Optimiser le chargement des dimensions en SCD de type 1

Sur les différents projets MS BI sur lesquels il m’a été donné de travailler, j’ai souvent rencontré le même type d’implémentation pour alimenter une dimension en SCD de type 1.

Etant donnée la persistance des données dans les dimensions celle-ci sont chargées en grande partie en UPSERT en respectant le modèle suivant :

  1. Récupération des données sources (à partir d’une table de staging ou d’un ODS)
  2. Transformations des données (conversion, colonnes dérivées, dé doublonnage, etc…)
  3. Recherche d’existence des enregistrements sources dans la dimension à partir de(s) la(les) clés métiers (business keys)
  4. Insertion des enregistrements sans correspondance
  5. Mise à jour des enregistrements existants

Je rappelle au passage qu’il est reconnu de ne PAS utiliser le composant SCD (Slowly Changing Dimension) et de préférer le LOOKUP, ce qui nous donne le package suivant :

SCD1 - CommonImplementation

Ce type d’implémentation est correct, mais il est bien loin d’être optimisé. Cela n’a pas trop d’impact sur des dimensions de quelques centaines de lignes, mais plus la volumétrie augmente plus les temps de traitements explosent (la courbe étant plutôt exponentielle que logarithmique).

Certains diront que les traitements d’intégration étant exécutés la nuit, cela n’a pas beaucoup d’importance. Cette remarque est sans doute pertinente dans un contexte Franco-Français, avec une seule et unique solution sur votre serveur BI. Mais cela devient beaucoup plus critique lorsque votre serveur héberge plusieurs solutions BI et que vous devez travailler dans un contexte international. Par ailleurs, il n’est pas rare de devoir exécuter partiellement ou complètement des traitements en cours de journée.

Je préfère donc définir un Template qui sera utilisé sur toutes les dimensions un peu comme un Design-Pattern. J’en profite pour glisser une petite digression : dans toute implémentation de package SSIS les deux maîtres mots à respecter sont « performance » et « maintenance ». Voyons comment optimiser notre package de départ. 
Lire la suite