Les données dimensionnelles qui changent lentement ou de manière imprévisible sont capturées dans les analyses de dimensions à variation lente (SCD). Dans un environnement d'entrepôt de données, une table de dimension possède une clé primaire qui identifie de manière unique chaque enregistrement et d'autres informations appelées données dimensionnelles.
Toutes les méthodes de mise à jour pour les différents types de SCD peuvent être réalisées à l'aide du programme SortCL dans IRI CoSort. Dans IRI Voracity, un assistant vous aide à créer les scripts de travail SCD utilisés lors de l'exécution du programme SortCL. La plupart des types utilisent une jointure externe complète pour faire correspondre les enregistrements de la source de données d'origine avec les enregistrements de la source de mise à jour en fonction de l'équivalence d'une clé de chacun. Les enregistrements avec des correspondances doivent être mis à jour. Les enregistrements de la source de mise à jour qui n'ont pas de correspondance doivent être ajoutés au maître.
Cet article couvre le modèle SCD de type 1, où les nouvelles informations des données de mise à jour écrasent les informations d'origine dans la source principale. Les enregistrements de la source de mise à jour sans correspondance sont ajoutés au nouveau maître. Comme ce modèle implique de remplacer les anciennes valeurs par les valeurs actuelles et ne conserve aucun historique, il n'est pas souvent utilisé.
La mise à jour s'effectue par jointure par rapport au champ ProductCode. Pour cet exemple, les données actuelles seront le fichier source master1.dat et update.dat est utilisé pour modifier des valeurs ou ajouter des enregistrements dans la source principale actuelle.
La source master1.dat contient :
ProductCode | Coût | Date de début |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365.00 | 20120101 |
G101 | 19.25 | 20110930 |
J245 | 450.50 | 20110430 |
S022 | 98,75 | 20110515 |
Dans ce cas, les données de mise à jour auront toutes la même StartDate. La source update.dat contient des enregistrements avec les valeurs suivantes :
ProductCode | Coût | Date de début |
---|---|---|
F112 | 2425.00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101.75 | 20120701 |
S022 | 101.75 | 20120701 |
La nouvelle table dimensionnelle aura ces valeurs après la mise à jour :
ProductCode | Coût | Date de début |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2425.00 | 20120701 |
G101 | 19.25 | 20110930 |
J245 | 550,50 | 20120701 |
M447 | 139.25 | 20120701 |
S022 | 101.75 | 20120701 |
Dans IRI Workbench, il existe un assistant pour aider à la création de scripts pour la mise à jour des fichiers et tables Dimensional. Cet assistant se trouve dans la liste déroulante Voracité de la barre de navigation. Vous choisissez d'abord le type de SCD. Ensuite, la fenêtre de sélection des fichiers utilisés pour le traitement de la mise à jour s'affiche.
L'écran suivant permet de définir la jointure réalisée avec les sources maître et mise à jour
Vous trouverez ci-dessous le script de travail sortcl produit lors du traitement des deux fichiers master1.dat et update.dat :
/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD1/master1.dat /PROCESS=DELIMITED /ALIAS=master1 /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/update.dat /PROCESS=DELIMITED /ALIAS=update /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /JOIN FULL_OUTER NOT_SORTED master1 NOT_SORTED update WHERE MASTER1.PRODUCTCODE == UPDATE.PRODUCTCODE /OUTFILE=/master1.dat # This processes all except the new records /PROCESS=DELIMITED /FIELD=(MASTER1.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST_NEW, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"', IF MASTER1.PRODUCTCODE EQ UPDATE.PRODUCTCODE THEN UPDATE.COST ELSE MASTER1.COST) /FIELD=(STARTDATE_NEW, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"', IF MASTER1.PRODUCTCODE EQ UPDATE.PRODUCTCODE THEN UPDATE.STARTDATE ELSE MASTER1.STARTDATE) /INCLUDE WHERE MASTER1.PRODUCTCODE NE "" /OUTFILE=master1.dat # This processes the new records to be added /PROCESS=DELIMITED /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') I /INCLUDE WHERE MASTER1.PRODUCTCODE EQ ""