Conseils et formations : vos deux atouts pour réussir !
Accueil > Integration Services > Articles
Gestion de membre inféré en dimension à variation lente

Transformation de dimension à variation lente :

J'ai déjà évoqué cette transformation ici http://www.dominiqueverriere.com/SSIS/Lists/Billets/Post.aspx?ID=12 elle est utilisée en amont d'un cube pour permettre de stocker/gérer des données instables dans le temps.

La notion de membre inféré est assez fumeuse dans la documentation ,aussi ai-je voulu aller plus loin pour mesurer les tenants et aboutissants.

 

Soit cette table d'origine :

Source de mes données de dimension ….et celle-ci :

Cible de mes données de dimension.

 

Voici la transformation mise en œuvre :

 

La stratégie que j'ai choisie est la suivante :

  • Changement de prénom : modification en lieu et place
  • Changement de nom (mariage) : historisation sur un nouveau membre de dimension avec horodatage de l'événement

Cela étant l'objet de la transformation.

Maintenant le membre inféré ?

Imaginons que la table DimPersonne soit mise à jour de deux façons :

  1. L'une par ce package
  2. L'autre par un autre traitement (package ou autre)

Et que l'on puisse insérer des membres de dimension dans un 1er temps par cet autre traitement, membres qui seront complétés par mon package dans un deuxième temps.

 

Ceux qui ont du métier se diront tout de suite : mais il y a violation des clés étrangères ??? En effet si on a du insérer un membre de dimension, c'est qu'on en avait besoin et donc qu'une ligne du groupe de mesure y faisait référence…

Donc pour moi, du travail de cochon… mais bon, admettons le cas…

Pour gérer ceci, il nous faut un indicateur sur la table cible, c'est-à-dire ma table DimPersonne : j'ai choisi Infere de type bit.

 

1ère mise en garde :

Les valeurs NULL ne sont pas gérées et provoquent un plantage du package (Type DT_BOOL) ; il faut donc avoir toujours une valeur.

Je règle ce problème de cette manière :

Et là :

En clair, tot ce qui vient par mon pakgae se voit attribuer Infere à FALSE.

 

Ceci étant fait, la notion de membre inféré peut être utilisée.

 

Voyons ceci en exécution :

 

 

Table d'origine

Table de destination

Avant mon 1er run

 

Après mon 1er run

 

Insertion d'un membre inféré

Données sur le membre arrivent à la source

Après mon 2ème run

    

 

2ème mise en garde :

Si vous gérez les dates de début et fin de validité comme dans cete exemple, il faut toujours une valeur de DtDebut même pour les membres inférés.

Ce que je corrige ici :

 

Et qui me donne l'éxecution correcte :

 

Après mon 2ème run

 

Comme chacun sait, en relationnel, NULL ne se compare à rien…

 

Conclusion :

Je trouve que cette possibilité est une porte ouverte aux 'bidouilleurs' qui refusent l'intégrité référentielle, mais elle existe…et est une question de certification…donc …

 ‭(Masqué)‬ WebPart1 Web Part

/SSIS/Gestion de membre inféré en dimension à variation lente/