Dimensionsdata, der ændrer sig langsomt eller uforudsigeligt, fanges i Slowly Changing Dimensions (SCD) analyser. I et datavarehusmiljø har en dimensionstabel en primær nøgle, der unikt identificerer hver post og andre oplysninger, der er kendt som dimensionsdata.
Alle opdateringsmetoderne for de forskellige SCD-typer kan udføres ved hjælp af SortCL-programmet i IRI CoSort. I IRI Voracity er der en guide til at hjælpe med at skabe de SCD-jobscripts, der bruges, når du kører SortCL-programmet. De fleste typer bruger en fuld ydre joinforbindelse til at matche poster fra den originale datakilde med poster i opdateringskilden baseret på at sidestille en nøgle fra hver. Optegnelser med kampe skal opdateres. Poster i opdateringskilden, der ikke har et match, skal tilføjes til masteren.
Denne artikel dækker SCD Type 1-modellen, hvor ny information fra opdateringsdata overskriver original information i masterkilden. Poster i opdateringskilden uden match føjes til den nye master. Da denne model indebærer at overskrive gamle værdier med de nuværende værdier og ikke opretholder nogen historik, bruges den ikke ofte.
Opdateringen udføres ved at tilslutte sig med hensyn til feltet ProductCode. I dette eksempel vil de aktuelle data være kildefilen master1.dat og update.dat bruges til at ændre værdier eller tilføje poster i den aktuelle masterkilde.
Master1.dat-kilden indeholder:
Produktkode | Omkostninger | Startdato |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365.00 | 20120101 |
G101 | 19.25 | 20110930 |
J245 | 450,50 | 20110430 |
S022 | 98,75 | 20110515 |
I dette tilfælde vil opdateringsdataene alle have den samme startdato. Update.dat-kilden indeholder poster med følgende værdier:
Produktkode | Omkostninger | Startdato |
---|---|---|
F112 | 2425.00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
Den nye dimensionstabel vil have disse værdier efter opdateringen:
Produktkode | Omkostninger | Startdato |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2425.00 | 20120701 |
G101 | 19.25 | 20110930 |
J245 | 550,50 | 20120701 |
M447 | 139,25 | 20120701 |
S022 | 101,75 | 20120701 |
I IRI Workbench er der en guide til at hjælpe med oprettelsen af scripts til opdatering af dimensionsfiler og tabeller. Denne guide er placeret i rullemenuen Voracity på navigationslinjen. Først vælger du SCD-typen. Derefter vises vinduet, hvor du vælger de filer, der skal bruges til at behandle opdateringen.
Det næste skærmbillede er til at definere den joinforbindelse, der udføres med master- og opdateringskilderne
Nedenfor er sortcl-jobscriptet, der produceres ved behandling af de to filer master1.dat og 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 ""