Dane wymiarowe, które zmieniają się powoli lub nieprzewidywalnie, są rejestrowane w analizach wolno zmieniających się wymiarów (SCD). W środowisku hurtowni danych tabela wymiarów ma klucz podstawowy, który jednoznacznie identyfikuje każdy rekord i inne informacje znane jako dane wymiarowe.
Wszystkie metody aktualizacji dla różnych typów SCD można wykonać za pomocą programu SortCL w IRI CoSort. W IRI Voracity dostępny jest kreator, który pomaga w tworzeniu skryptów zadań SCD używanych podczas uruchamiania programu SortCL. Większość typów używa pełnego sprzężenia zewnętrznego w celu dopasowania rekordów z oryginalnego źródła danych do rekordów w źródle aktualizacji na podstawie zrównania klucza z każdego z nich. Rekordy z dopasowaniami wymagają aktualizacji. Rekordy w źródle aktualizacji, które nie pasują do siebie, muszą zostać dodane do wzorca.
W tym artykule omówiono model SCD typu 1, w którym nowe informacje z danych aktualizacji zastępują oryginalne informacje w źródle głównym. Rekordy w źródle aktualizacji bez dopasowań są dodawane do nowego wzorca. Ponieważ ten model polega na zastępowaniu starych wartości bieżącymi wartościami i nie zachowuje historii, nie jest często używany.
Aktualizacja odbywa się poprzez dołączenie w odniesieniu do pola ProductCode. W tym przykładzie bieżącymi danymi będzie plik źródłowy master1.dat, a update.dat służy do zmiany wartości lub dodawania rekordów w bieżącym głównym źródle.
Źródło master1.dat zawiera:
Kod produktu | Koszt | Data rozpoczęcia |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365,00 | 20120101 |
G101 | 19,25 | 20110930 |
J245 | 450,50 | 20110430 |
S022 | 98,75 | 20110515 |
W takim przypadku wszystkie dane aktualizacji będą miały tę samą datę rozpoczęcia. Źródło update.dat zawiera rekordy o następujących wartościach:
Kod produktu | Koszt | Data rozpoczęcia |
---|---|---|
F112 | 2425,00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
Nowa tabela wymiarowa będzie miała następujące wartości po aktualizacji:
Kod produktu | Koszt | Data rozpoczęcia |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2425,00 | 20120701 |
G101 | 19,25 | 20110930 |
J245 | 550,50 | 20120701 |
M447 | 139,25 | 20120701 |
S022 | 101,75 | 20120701 |
W IRI Workbench dostępny jest kreator, który pomaga w tworzeniu skryptów do aktualizacji plików i tabel Dimensional. Ten kreator znajduje się w menu rozwijanym Wolność na pasku nawigacyjnym. Najpierw wybierasz typ SCD. Następnie zostanie wyświetlone okno, w którym wybierasz pliki używane do przetwarzania aktualizacji.
Następny ekran służy do definiowania połączenia wykonanego z głównym i aktualizacyjnym źródłem
Poniżej znajduje się skrypt zadania sortcl, który jest tworzony podczas przetwarzania dwóch plików master1.dat i 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 ""