Database
 sql >> база данни >  >> RDS >> Database

SCD тип 2

Данни за измерения, които се променят бавно или непредвидимо, се улавят в анализи на бавно променящите се измерения (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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изненади и предположения при представянето:GROUP BY срещу DISTINCT

  2. Дизайн на база данни с Vertabelo

  3. Как да станете дизайнер на бази данни

  4. Инкрементална репликация на данни в IRI Workbench

  5. Как да създадете база данни в SQL?