Данни за измерения, които се променят бавно или непредвидимо, се улавят в анализи на бавно променящите се измерения (SCD). В среда на хранилище за данни таблицата с измерения има първичен ключ, който уникално идентифицира всеки запис и други части от информация, които са известни като данни за измерения.
Всички методи за актуализиране за различните типове SCD могат да се осъществят с помощта на програмата SortCL в IRI CoSort. В IRI Voracity има съветник, който да помага при създаването на скриптове за задания SCD, използвани при изпълнение на програмата SortCL. Повечето варианти използват пълно външно свързване, за да съпоставят записи от оригиналния източник на основни данни със записи в актуализирания източник въз основа на приравняване на ключ от всеки. Записите със съвпадения трябва да се актуализират в главния. Записите в източника на актуализация, които нямат съвпадение, трябва да бъдат добавени към главния.
Ето преглед на това как да актуализирам файл с размери с помощта на SCD тип 3, където поддържам разходите за продукти. Актуализацията се извършва чрез присъединяване по отношение на полето ProductCode .
Тип 3 SCD
При модел тип 3 текущите данни и историческите данни се пренасят в един и същ запис. Едно от основните неща, които трябва да решите, е колко история трябва да се съхранява. С нашия пример ще запазя цена за три начални дати. Крайна дата е датата, на която разходите в записа вече не са в сила. Ако цената все още е ефективна, тогава Крайна дата1 полето ще бъде зададено на 99991231. Това е за да се избегне празна стойност в това поле. Ето стойностите, съдържащи се в началния главен източник (master3.dat):
Код на продукта | Разходи1 | Начална дата1 | Крайна дата1 | Разходи2 | Начална дата2 | Крайна дата2 | Cost3 | Начална дата3 | Крайна дата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 |
Всички записи за актуализиране имат една и съща начална дата. Източникът update.dat съдържа следните стойности на полета за записите:
Код на продукта | Разходи | Начална дата |
---|---|---|
F112 | 2425,00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
По-долу са актуализираните данни. За всеки актуализиран запис всяка цена, начална и крайна дата се преместват вдясно с един набор. В старата текуща група за записа крайната дата се променя на началната дата за новия актуализиран текущ набор. Всички стойности за стария трети набор се отхвърлят.
Код на продукта | Разходи1 | Начална дата1 | Крайна дата1 | Разходи2 | Начална дата2 | Крайна дата2 | Cost3 | Начална дата3 | Крайна дата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 |
В IRI Workbench има съветник за Voracity, който помага при създаването на скриптове за актуализиране на размерни файлове и таблици. Този съветник се намира в падащото меню Прожорливост в лентата за навигация. Първо избирате типа SCD. След това се показва прозорецът, в който избирате файловете, които се използват за обработка на актуализацията.
В горната таблица на следващия екран вие определяте как данните, които се актуализират, се съпоставят с главния. В средното групиране на екрана изберете полетата, които дават стойностите на състоянието на записите, които се актуализират.
В падащите менюта под Текущи и Набори от исторически полета , първият набор, който дефинирате, дава имената на полетата за текущите стойности. Поле за стойност е размерната стойност, която се актуализира. Начално поле е полето, което определя кога Поле за стойност стана активен иEnd Field определя кога вече не е валиден. След това дефинирайте толкова набори, колкото са ви необходими за броя исторически стойности, които се съхраняват.
Ето скрипта за работа, който ще актуализира главния файл:
/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 ""