Rozměrová data, která se mění pomalu nebo nepředvídatelně, jsou zachycena v analýzách Slowly Changing Dimensions (SCD). V prostředí datového skladu má tabulka dimenzí primární klíč, který jednoznačně identifikuje každý záznam a další informace, které jsou známé jako dimenzionální data.
Všechny metody aktualizace pro různé typy SCD lze provést pomocí programu SortCL v IRI CoSort. V IRI Voracity existuje průvodce, který pomáhá při vytváření skriptů úloh SCD používaných při spouštění programu SortCL. Většina variant používá úplné vnější spojení ke spárování záznamů z původního hlavního zdroje dat se záznamy v aktualizovaném zdroji na základě ztotožnění klíče z každého z nich. Záznamy se shodami je třeba aktualizovat v masteru. Záznamy ve zdroji aktualizací, které nemají shodu, je třeba přidat do hlavního serveru.
Zde je přehled toho, jak aktualizovat rozměrový soubor pomocí SCD typu 3, kde udržuji náklady na produkt. Aktualizace se provede připojením s ohledem na pole ProductCode .
SCD typu 3
U modelu typu 3 jsou aktuální data a historická data přenášena ve stejném záznamu. Jednou z hlavních věcí, které je třeba rozhodnout, je, kolik historie by se mělo uchovávat. S naším příkladem ponechám náklady na tři počáteční data. Koncové datum je datum, kdy náklady v záznamu již nejsou účinné. Pokud jsou náklady stále efektivní, pak Datum ukončení1 pole bude nastaveno na 99991231. Tím se zabrání prázdné hodnotě v tomto poli. Zde jsou hodnoty obsažené ve výchozím hlavním zdroji (master3.dat):
Kód produktu | Cena 1 | Datum zahájení1 | Datum ukončení1 | Cena 2 | Datum zahájení2 | Datum konce2 | Cena 3 | StartDate3 | Datum ukončení 3 |
---|---|---|---|---|---|---|---|---|---|
C123 | 125,50 | 20110228 | 99991231 | ||||||
F112 | 2365,00 | 20120101 | 99991231 | ||||||
G101 | 19:25 | 20110930 | 99991231 | 21.25 | 20110501 | 20110930 | |||
J245 | 450,50 | 20110430 | 99991231 | 425,25 | 20101001 | 20110430 | 385,25 | 20100215 | 20101001 |
S022 | 98,75 | 20110515 | 99991231 |
Všechny záznamy aktualizace mají stejné počáteční datum. Zdroj update.dat obsahuje následující hodnoty polí pro záznamy:
Kód produktu | Cena | Datum zahájení |
---|---|---|
F112 | 2425,00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
Níže jsou aktualizované údaje. Pro každý záznam, který byl aktualizován, se každá cena, počáteční datum a koncové datum přesunou o jednu sadu doprava. Ve staré aktuální skupině pro záznam se koncové datum změní na počáteční datum pro novou aktualizovanou aktuální sadu. Všechny hodnoty pro starou třetí sadu jsou vyřazeny.
Kód produktu | Cena 1 | Datum zahájení1 | Datum ukončení1 | Cena 2 | Datum zahájení2 | Datum konce2 | Cena 3 | StartDate3 | Datum ukončení 3 |
---|---|---|---|---|---|---|---|---|---|
C123 | 125,50 | 20110228 | 9991231 | ||||||
F112 | 2425,00 | 20120701 | 9991231 | 2365,00 | 20120101 | 20120701 | |||
G101 | 19:25 | 20110930 | 9991231 | 21.25 | 20110501 | 20110930 | |||
J245 | 550,50 | 20120701 | 9991231 | 450,50 | 20110430 | 20120701 | 425,25 | 20101001 | 20110430 |
M447 | 101,75 | 20120701 | 9991231 | ||||||
S022 | 101,75 | 20120701 | 9991231 | 98,75 | 20110515 | 20120701 |
V IRI Workbench je průvodce Voracity, který pomáhá při vytváření skriptů pro aktualizaci Dimensional souborů a tabulek. Tento průvodce se nachází v rozevíracím seznamu Voracity na navigační liště. Nejprve vyberte typ SCD. Poté se zobrazí okno, kde vyberete soubory, které se použijí pro zpracování aktualizace.
V horní tabulce na další obrazovce určíte, jak jsou aktualizovaná data mapována na master. V prostředním seskupení na obrazovce vyberte pole, která poskytují hodnoty stavu pro záznamy, které se aktualizují.
V rozbalovacích nabídkách pod Aktuální a Historické sady polí , první sada, kterou definujete, poskytuje názvy polí pro aktuální hodnoty. Pole hodnoty je rozměrová hodnota, která se aktualizuje. Počáteční pole je pole, které určuje, kdy bude pole hodnoty se stal aktivním a Ukončit pole určuje, kdy již neplatí. Poté definujte tolik sad, kolik potřebujete pro počet uchovávaných historických hodnot.
Zde je skript úlohy, který aktualizuje hlavní soubor:
/INFILE=master3.dat /PROCESS=DELIMITED /ALIAS=master3 /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",") /FIELD=(COST1, TYPE=NUMERIC, POSITION=2, SEPARATOR=",") /FIELD=(STARTDATE1, TYPE=ASCII, POSITION=3, SEPARATOR=",") /FIELD=(ENDDATE1, TYPE=ASCII, POSITION=4, SEPARATOR=",") /FIELD=(COST2, TYPE=NUMERIC, POSITION=5, SEPARATOR=",") /FIELD=(STARTDATE2, TYPE=ASCII, POSITION=6, SEPARATOR=",") /FIELD=(ENDDATE2, TYPE=ASCII, POSITION=7, SEPARATOR=",") /FIELD=(COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",") /FIELD=(STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",") /FIELD=(ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",") /INFILE=update.dat /PROCESS=DELIMITED /ALIAS=update /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /JOIN FULL_OUTER master3 update WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE /OUTFILE=master3.dat # Include only records that are to be updated /PROCESS=DELIMITED /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",") /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",") /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",") /FIELD=(ENDDATE1_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",") /FIELD=(MASTER3.COST1, TYPE=NUMERIC, POSITION=5, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE1, TYPE=ASCII, POSITION=6, SEPARATOR=",") /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=7, SEPARATOR=",") /FIELD=(MASTER3.COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",") /FIELD=(MASTER3.ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",") /INCLUDE WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE /OUTFILE=master3.dat # Include only records that are not to be updated /PROCESS=DELIMITED /FIELD=(MASTER3.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",") /FIELD=(MASTER3.COST1, TYPE=NUMERIC, POSITION=2, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE1, TYPE=ASCII, POSITION=3, SEPARATOR=",") /FIELD=(MASTER3.ENDDATE1, TYPE=ASCII, POSITION=4, SEPARATOR=",") /FIELD=(MASTER3.COST2, TYPE=NUMERIC, POSITION=5, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE2, TYPE=ASCII, POSITION=6, SEPARATOR=",") /FIELD=(MASTER3.ENDDATE2, TYPE=ASCII, POSITION=7, SEPARATOR=",") /FIELD=(MASTER3.COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",") /FIELD=(MASTER3.ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",") /OMIT WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE /OMIT WHERE MASTER3.PRODUCTCODE EQ "" /OUTFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD3/master3.dat # Add new records /PROCESS=DELIMITED /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",") /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",") /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",") /FIELD=(ENDDATE1_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",") /INCLUDE WHERE MASTER3.PRODUCTCODE EQ "" AND UPDATE.PRODUCTCODE NE ""