Данни за измерения, които се променят бавно или непредвидимо, се улавят в анализи на бавно променящите се измерения (SCD). В среда на хранилище за данни таблицата с измерения има първичен ключ, който уникално идентифицира всеки запис и други части от информация, които са известни като данни за измерения.
Всички методи за обновяване за различните типове SCD могат да бъдат извършени с помощта на програмата SortCL в IRI CoSort. В IRI Voracity има съветник, който да помага при създаването на скриптове за задания SCD, използвани при изпълнение на програмата SortCL. Повечето типове SCD използват пълно външно свързване, за да съпоставят записи от оригиналния източник на данни със записи в източника на актуализиране въз основа на приравняване на ключ от всеки. Записите със съвпадения трябва да се актуализират в главния. Записите в източника на актуализация, които нямат съвпадение, трябва да бъдат добавени към главния.
Ето преглед на това как да актуализирам файл с размери с помощта на SCD тип 2, където поддържам разходите за продукти. Актуализацията се извършва чрез присъединяване по отношение на полето ProductCode .
SDD тип 2
В този модел текущите и историческите записи се съхраняват в един и същ файл. В активна база данни вероятно ще имате сурогатен ключ, който да използвате като първичен ключ за свързване към таблиците с факти в допълнение към ProductCode ключ, който се използва за процеса на актуализиране. Тъй като текущите записи и историческите записи се съдържат в един и същ файл, е необходимо да има поле, което показва дали записът е текущият запис за ProductCode и имаме нужда от поле, което да посочи кога е цената за ProductCode вече не е ефективен. В този пример имаме:
- Код на продукта :Това е полето за ключов идентификатор.
- Цена :Разходи, които са влезли в сила на Начална дата за протокола.
- Начална дата :това е датата, на която цената за записа влезе в сила.
- Крайна дата :Това е датата, на която Цената в протокола вече не е в сила. Ако цената все още е ефективна, тогава крайната дата ще бъде зададена на 99991231. Това е за избягване на нулева стойност в това поле.
- Текущи :Y, ако цената все още е в сила, N, ако не е.
Началната таблица вече има 3 исторически записа. Те са тези, които имат стойността N за полето Current . Главният източник се нарича master2.dat и съдържа следните данни:
Код на продукта | Разходи | Начална дата | Крайна дата | Текущ |
---|---|---|---|---|
C123 | 125,50 | 20110228 | 99991231 | Y |
F112 | 2365,00 | 20120101 | 99991231 | Y |
G101 | 19,25 | 20110930 | 99991231 | Y |
G101 | 21,25 | 20110501 | 20110930 | N |
J245 | 450,50 | 20110430 | 99991231 | Y |
J245 | 425,25 | 20101001 | 20110430 | N |
J245 | 385,25 | 20100215 | 20101001 | N |
S022 | 98,75 | 20110515 | 99991231 | Y |
Всички записи за актуализиране имат една и съща начална дата . Източникът update.dat съдържа записи със следните стойности на полета:
Код на продукта | Разходи | Начална дата |
---|---|---|
F112 | 2425,00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
В IRI Workbench има съветник за Voracity, който помага при създаването на скриптове за актуализиране на размерни файлове и таблици. Този съветник се намира в падащото меню Прожорливост в лентата за навигация. Първо избирате типа SCD. След това се показва прозорецът, в който избирате източниците, които се използват за обработка на актуализацията. За тип 2 целта обикновено е оригиналният главен файл или таблица.
Със следващия екран вие определяте как се картографират данните за актуализиране и как се задават други стойности на полета или колони. актуализация.Цена ще се съпостави с Master2.cost и актуализацията. Начална дата ще се съпостави с master2.StartDate . Полето на флага е полето, което се използва за определяне на записа с активната цена. Тоест дали стойностите в записа са активни или исторически. В този случай Полето за флаг е полето Текущ . Положителна стойност на флага е стойността в Текуща която определя дали Цената е текущата Цена; стойността е „Y“ в нашия пример и Flag Negative Value е „N“. Крайно поле съдържа името на полето, което съдържа стойността, използвана за определяне кога цената за записа вече не е ефективна и Master.EndDate притежава тази стойност. Крайна стойност се използва като стойност за Крайно поле когато записът съдържа текущите стойности за ProductCode .
Следващият екран е за дефиниране на присъединяването, извършено с главния източник и източниците за актуализиране. Трябва да имате предвид, че и двата източника трябва да бъдат подредени по отношение на ProductCode . Ако не са, тогава трябва да изберете NOT_SORTED в падащото меню за Опция за сортиране под източника на данни, който трябва да бъде сортиран.
Ето работния скрипт:
/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD2/master2.dat /PROCESS=DELIMITED /ALIAS=master2 /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /FIELD=(ENDDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"') /FIELD=(CURRENT, TYPE=ASCII, POSITION=5, 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=ASCII, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /JOIN FULL_OUTER master2 update WHERE MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE /OUTFILE=master2.dat # Include only records that are being updated # Use the Cost and StartDate from the Update file /PROCESS=DELIMITED /FIELD=(MASTER2.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='\"') /FIELD=(MASTER2.ENDDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"') /FIELD=(MASTER2.CURRENT, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"') /INCLUDE WHERE MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE AND MASTER2.CURRENT EQ “Y" /OUTFILE=master2.dat # Change any current records that are being updated to history records # by giving the EndDate as the StartDate from the update record # and changing the field Current to N /PROCESS=DELIMITED /CONDITION=(MATCH, TEST=(MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE AND MASTER2.CURRENT EQ "Y")) /FIELD=(MASTER2.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(MASTER2.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(MASTER2.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /FIELD=(ENDDATE_NEW, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"', IF MATCH THEN UPDATE.STARTDATE ELSE MASTER2.ENDDATE) /FIELD=(CURRENT_NEW, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"', IF MATCH THEN "N" ELSE MASTER2.CURRENT) /OMIT WHERE MASTER2.PRODUCTCODE EQ "" /OUTFILE=master2.dat # Add new records /PROCESS=DELIMITED /FIELD=(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='\"') /FIELD=(ENDDATE_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"') /FIELD=(CURRENT_NEW="Y", TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"') /INCLUDE WHERE UPDATE.PRODUCTCODE NE "" AND MASTER2.PRODUCTCODE EQ ""
Новият главен файл ще има следните стойности:
Код на продукта | Разходи | Начална дата | Крайна дата | Текущ |
---|---|---|---|---|
C123 | 125,50 | 20110228 | 99991231 | Y |
F112 | 2425,00 | 20120701 | 99991231 | Y |
F112 | 2365,00 | 20120101 | 20120701 | N |
G101 | 19,25 | 20110930 | 99991231 | Y |
G101 | 21,25 | 20110501 | 20110930 | N |
J245 | 550,50 | 20120701 | 99991231 | Y |
J245 | 450,50 | 20110430 | 20120701 | N |
J245 | 425,25 | 20101001 | 20110430 | N |
J245 | 385,25 | 20100215 | 20101001 | N |
M447 | 101,75 | 20120701 | 99991231 | Y |
S022 | 101,75 | 20120701 | 99991231 | Y |
S022 | 98,75 | 20110515 | 20120701 | N |