Dimensionsdata som förändras långsamt eller oförutsägbart fångas i Slowly Changing Dimensions-analyser (SCD). 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 utförs 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 SCD-typer använder en fullständig yttre koppling för att matcha poster från den ursprungliga datakällan med poster i den uppdaterade källan baserat på att likställa en nyckel från varje. Typ 4 utför dock uppdateringen med hjälp av en sortering.
Typ 4 SCD
Typ 4-modellen liknar den för typ 2. Skillnaden är att det finns 2 tabeller eller filer som underhålls:en för de aktuella kostnaderna och en för att hålla historikposterna för kostnaderna. När nya aktuella poster läggs till i mastern, läggs dessa nya poster vanligtvis till i historiken samtidigt.
Fältdefinitionerna är desamma i uppdateringen, historiken och masterfilerna eller tabellerna. Vi kommer att sortera posterna för uppdateringen och historiken tillsammans. En ny master kommer att skapas som bara har en post för varje Produktkod och det rekordet kommer att vara det mest aktuella. Historiken kommer att ha alla poster för varje Produktkod inklusive de från uppdateringskällan.
Startmastertabellen kommer att vara densamma som startmaster från vårt exempel på typ 1 med värden som visas nedan.
Produktkod | Kostnad | Startdatum |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365.00 | 20120101 |
G101 | 19.25 | 20110930 |
J245 | 450,50 | 20110430 |
S022 | 98,75 | 20110515 |
Alla uppdateringsdata kommer alla 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 |
Starthistorikkällan nedan är som startmästaren i Typ 2. Så Typ 4 är en kombination av Typ 1 och Typ 2 där mastern är densamma som en Typ 1-master och historiken är densamma som en Typ 2-master.
Produktkod | Kostnad | Startdatum |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365.00 | 20120101 |
G101 | 19.25 | 20110930 |
G101 | 21.25 | 20110501 |
J245 | 450,50 | 20110430 |
J245 | 425.25 | 20101001 |
J245 | 385.25 | 20100215 |
S022 | 98,75 | 20110515 |
I IRI Workbench finns det en Voracity-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 källor som används för att bearbeta uppdateringen.
Nästa skärm är där du ställer in sorteringen genom att välja nycklarna. Det finns två nycklar:Produktkod sedan Startdatum . Vi grupperar efter Produktkod , men vi måste också sortera i fallande ordning efter Startdatum inom varje Produktkod gruppering. Detta för att vi ska kunna filtrera den senaste posten för varje Produktkod grupp till den nya mastern.
För att göra Startdatum en nyckel som sorteras i fallande ordning, välj den nyckeln och välj sedan Redigera nyckel . Detta kommer att ta upp följande skärm:
I rullgardinsmenyn för Riktning välj Fallande .
Här är jobbskriptet för sorten:
/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD4/history4.dat /PROCESS=DELIMITED /ALIAS=history4 /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='\"') /SORT /KEY=(PRODUCTCODE, TYPE=ASCII) /KEY=(STARTDATE, DESCENDING, TYPE=ASCII) /OUTFILE=history4.dat # This file will contain all the records from both inputs /PROCESS=DELIMITED /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /OUTFILE=master4.dat # Include only one record for each ProductCode /PROCESS=DELIMITED /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /INCLUDE WHERE PRODUCTCODE
Nedan visas den uppdaterade mastern som skapats genom att köra ovanstående jobbskript med SortCL. Värdena är desamma som produceras i en typ 1-uppdatering.
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 |
Historikfilen innehåller alla tidigare poster plus de nya posterna från uppdateringsfilen.
Produktkod | Kostnad | Startdatum |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2425.00 | 20120701 |
F112 | 2365.00 | 20120101 |
G101 | 19.25 | 20110930 |
G101 | 21.25 | 20110501 |
J245 | 550.50 | 20120701 |
J245 | 450,50 | 20110430 |
J245 | 425.25 | 20101001 |
J245 | 385.25 | 20100215 |
M447 | 101,75 | 220120701 |
S022 | 101,75 | 20120701 |
S022 | 98,75 | 20110515 |