Dimensionsdata som förändras långsamt eller oförutsägbart fångas i Slowly Changing Dimensions (SCD) analyser. I en datalagermiljö har en dimensionstabell en primärnyckel som unikt identifierar varje post och annan information som kallas dimensionsdata.
Alla uppdateringsmetoder för de olika SCD-typerna kan utföras med programmet SortCL i IRI CoSort. I IRI Voracity finns det en guide som hjälper dig att skapa SCD-jobbskripten som används när du kör SortCL-programmet. De flesta typer använder en fullständig yttre koppling för att matcha poster från den ursprungliga datakällan med poster i uppdateringskällan baserat på att likställa en nyckel från varje. Register med matchningar måste uppdateras. Poster i uppdateringskällan som inte har en matchning måste läggas till i mastern.
Den här artikeln täcker SCD Type 1-modellen, där ny information från uppdateringsdata skriver över den ursprungliga informationen i huvudkällan. Poster i uppdateringskällan utan matchningar läggs till i den nya mastern. Eftersom denna modell innebär att gamla värden skrivs över med de nuvarande värdena och inte har någon historik, används den inte ofta.
Uppdateringen görs genom att ansluta med avseende på fältet ProductCode. I det här exemplet kommer aktuell data att vara källfilen master1.dat och update.dat används för att ändra värden eller lägga till poster i den aktuella huvudkällan.
Källan master1.dat innehåller:
Produktkod | Kostnad | Startdatum |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365.00 | 20120101 |
G101 | 19.25 | 20110930 |
J245 | 450,50 | 20110430 |
S022 | 98,75 | 20110515 |
I det här fallet kommer alla uppdateringsdata att ha samma startdatum. Update.dat-källan innehåller poster med följande värden:
Produktkod | Kostnad | Startdatum |
---|---|---|
F112 | 2425.00 | 20120701 |
J245 | 550.50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
Den nya dimensionstabellen kommer att ha dessa värden efter uppdateringen:
Produktkod | Kostnad | Startdatum |
---|---|---|
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 finns det en guide som hjälper dig att skapa skript för uppdatering av dimensionsfiler och tabeller. Den här guiden finns i rullgardinsmenyn Voracity i navigeringsfältet. Först väljer du SCD-typen. Då visas fönstret där du väljer de filer som används för att bearbeta uppdateringen.
Nästa skärm är för att definiera kopplingen som utförs med master- och uppdateringskällorna
Nedan finns sortcl-jobbskriptet som produceras vid bearbetning av de två filerna master1.dat och 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 ""