Dimensionale gegevens die langzaam of onvoorspelbaar veranderen, worden vastgelegd in Slowly Changing Dimensions (SCD)-analyses. In een datawarehouse-omgeving heeft een dimensietabel een primaire sleutel die elk record en andere stukjes informatie die bekend staan als de dimensionale gegevens op unieke wijze identificeert.
Alle updatemethoden voor de verschillende SCD-typen worden uitgevoerd met behulp van het SortCL-programma in IRI CoSort. In IRI Voracity is er een wizard die helpt bij het maken van de SCD-taakscripts die worden gebruikt bij het uitvoeren van het SortCL-programma. De meeste SCD-typen gebruiken een volledige outer join om records uit de oorspronkelijke gegevensbron te matchen met records in de bijgewerkte bron op basis van het gelijkstellen van een sleutel van elk. Type 4 voert de update echter uit met een sortering.
Type 4 SCD
Het Type 4-model is vergelijkbaar met dat voor Type 2. Het verschil is dat er 2 tabellen of bestanden worden bijgehouden:één voor de lopende kosten en één om de historiestukken bij te houden voor de kosten. Wanneer nieuwe huidige records aan de master worden toegevoegd, worden deze nieuwe records meestal tegelijkertijd aan de geschiedenis toegevoegd.
De velddefinities zijn hetzelfde in de update, de historie en de hoofdbestanden of tabellen. We sorteren de records voor de update en geschiedenis samen. Er wordt een nieuwe master gemaakt die slechts één record heeft voor elke ProductCode en dat record zal het meest actueel zijn. De geschiedenis bevat alle records voor elke ProductCode inclusief die van de updatebron.
De start-mastertabel zal hetzelfde zijn als de start-master uit ons voorbeeld van Type 1 met waarden zoals hieronder weergegeven.
Productcode | Kosten | Startdatum |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365,00 | 20120101 |
G101 | 19.25 | 20110930 |
J245 | 450,50 | 20110430 |
S022 | 98,75 | 20110515 |
Alle updategegevens hebben allemaal dezelfde StartDate. De bron update.dat bevat records met de volgende waarden:
Productcode | Kosten | Startdatum |
---|---|---|
F112 | 2425,00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
De startgeschiedenisbron hieronder is als de startende master in de Type 2. Type 4 is dus een combinatie van Type 1 en Type 2 waarbij de master hetzelfde is als een Type 1 master en de geschiedenis hetzelfde is als een Type 2 master.
Productcode | Kosten | 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 |
In IRI Workbench is er een Voracity-wizard die helpt bij het maken van scripts voor het bijwerken van dimensionale bestanden en tabellen. Deze wizard bevindt zich in de vervolgkeuzelijst Vraatzucht op de navigatiebalk. Kies eerst het SCD-type. Vervolgens wordt het venster weergegeven waarin u de bronnen selecteert die worden gebruikt voor het verwerken van de update.
In het volgende scherm stelt u de sortering in door de toetsen te selecteren. Er zijn 2 sleutels:ProductCode dan StartDatum . We groeperen op ProductCode , maar we moeten ook in aflopende volgorde sorteren op StartDate binnen elke ProductCode groepering. Dit is zodat we de meest recente record kunnen filteren voor elke ProductCode groep naar de nieuwe master.
Om de StartDate te maken een sleutel die in aflopende volgorde sorteert, selecteer die sleutel en selecteer vervolgens Sleutel bewerken . Dit zal het volgende scherm oproepen:
In de vervolgkeuzelijst voor Richting selecteer Aflopend .
Hier is het taakscript voor de sortering:
/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
Hieronder vindt u de bijgewerkte master die is geproduceerd door het bovenstaande taakscript uit te voeren met SortCL. De waarden zijn dezelfde die worden geproduceerd in een Type 1-update.
Productcode | Kosten | 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 |
Het geschiedenisbestand bevat alle eerdere records plus de nieuwe records uit het updatebestand.
Productcode | Kosten | 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 |