Database
 sql >> Baza danych >  >> RDS >> Database

SCD typu 2

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 SCD 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 muszą zostać zaktualizowane w masterze. Rekordy w źródle aktualizacji, które nie pasują do siebie, muszą zostać dodane do wzorca.

Oto przegląd, jak zaktualizować plik wymiarowy za pomocą SCD Typ 2, gdzie utrzymuję koszty produktu. Aktualizacja odbywa się poprzez dołączenie w odniesieniu do pola Kod produktu .

SCD typu 2

W tym modelu zapisy bieżące i historyczne są przechowywane w tym samym pliku. W aktywnej bazie danych prawdopodobnie będziesz mieć klucz zastępczy, który będzie używany jako klucz podstawowy do łączenia się z tabelami faktów, oprócz Kodu Produktu klucz, który jest używany do procesu aktualizacji. Ponieważ bieżące rekordy i rekordy historyczne znajdują się w tym samym pliku, konieczne jest posiadanie pola wskazującego, czy rekord jest bieżącym rekordem dla Kod produktu i potrzebujemy pola, aby wskazać, kiedy koszt kodu produktu nie jest już skuteczny. W tym przykładzie mamy:

  • Kod produktu :To jest pole klucza identyfikatora.
  • Koszt :koszt, który wszedł w życie Data rozpoczęcia dla porządku.
  • Data rozpoczęcia :jest to data, w której koszt rekordu zaczął obowiązywać.
  • Data zakończenia :jest to data, w której Koszt w ewidencji nie jest już skuteczne. Jeśli koszt nadal obowiązuje, data zakończenia zostanie ustawiona na 99991231. Ma to na celu uniknięcie wartości null w tym polu.
  • Bieżące :Y, jeśli koszt nadal obowiązuje, N, jeśli nie.

Tabela startowa ma już 3 rekordy historii. Są to te, które mają wartość N w polu Bieżący . Główne źródło nazywa się master2.dat i zawiera następujące dane:

Kod produktu Koszt Data rozpoczęcia Data zakończenia Bieżący
C123 125,50 20110228 99991231 T
F112 2365,00 20120101 99991231 T
G101 19,25 20110930 99991231 T
G101 21,25 20110501 20110930 N
J245 450,50 20110430 99991231 T
J245 425,25 20101001 20110430 N
J245 385,25 20100215 20101001 N
S022 98,75 20110515 99991231 T

Wszystkie rekordy aktualizacji mają tę samą datę rozpoczęcia . Źródło update.dat zawiera rekordy z następującymi wartościami pól:

Kod produktu Koszt Data rozpoczęcia
F112 2425,00 20120701
J245 550,50 20120701
M447 101,75 20120701
S022 101,75 20120701

W IRI Workbench dostępny jest kreator Voracity, 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 należy wybrać źródła wykorzystywane do przetwarzania aktualizacji. W przypadku Typu 2 celem jest zwykle oryginalny plik główny lub tabela.

Na następnym ekranie określasz, w jaki sposób dane aktualizacji są mapowane i jak ustawiane są inne wartości pól lub kolumn. aktualizacja.Koszt zostanie odwzorowany na Master2.cost i aktualizacja. Data rozpoczęcia zostanie odwzorowany na master2.StartDate . Pole flagi to pole używane do określenia rekordu z aktywnym Kosztem. Oznacza to, czy wartości w rekordzie są aktywne czy historyczne. W takim przypadku Pole flagi to pole Bieżące . Zgłoś pozytywną wartość to wartość w Bieżącym który określa, czy Koszt to aktualny koszt; w naszym przykładzie wartość to „Y”, a Oznacz wartość ujemną to „N”. Pole końcowe zawiera nazwę pola, które przechowuje wartość używaną do określenia, kiedy Koszt dla rekordu przestaje obowiązywać i Master.EndDate utrzymuje tę wartość. Wartość końcowa jest używany jako wartość dla Pole końcowe gdy rekord zawiera aktualne wartości dla kodu produktu .

Kolejny ekran służy do zdefiniowania złączenia wykonanego ze źródłami głównymi i aktualizacyjnymi. Należy pamiętać, że oba źródła muszą być uporządkowane w odniesieniu do kodu produktu . Jeśli tak nie jest, musisz wybrać NOT_SORTED w menu Opcji sortowania pod źródłem danych, które należy posortować.

Oto skrypt pracy:

/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 ""

Nowy plik główny będzie miał następujące wartości:

Kod produktu Koszt Data rozpoczęcia Data zakończenia Bieżący
C123 125,50 20110228 99991231 T
F112 2425,00 20120701 99991231 T
F112 2365,00 20120101 20120701 N
G101 19,25 20110930 99991231 T
G101 21,25 20110501 20110930 N
J245 550,50 20120701 99991231 T
J245 450,50 20110430 20120701 N
J245 425,25 20101001 20110430 N
J245 385,25 20100215 20101001 N
M447 101,75 20120701 99991231 T
S022 101,75 20120701 99991231 T
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. Unikanie rozwiązywania problemów z wydajnością Knee-Jerk

  2. Zabawa z nowymi funkcjami Postgres w Django

  3. Utwórz relację w SQL

  4. Usuwanie domyślnego śladu – część 2

  5. Migracje danych