Dados dimensionais que mudam de forma lenta ou imprevisível são capturados em análises de Dimensões de Alteração Lenta (SCD). Em um ambiente de data warehouse, uma tabela de dimensões tem uma chave primária que identifica exclusivamente cada registro e outras informações conhecidas como dados dimensionais.
Todos os métodos de atualização para os diferentes tipos de SCD são realizados usando o programa SortCL no IRI CoSort. No IRI Voracity existe um assistente para auxiliar na criação dos scripts de trabalho SCD usados ao executar o programa SortCL. A maioria dos tipos de SCD usa uma junção externa completa para corresponder registros da fonte de dados original com registros na fonte atualizada com base na igualdade de uma chave de cada um. O tipo 4, no entanto, realiza a atualização usando uma classificação.
SCD Tipo 4
O modelo do Tipo 4 é semelhante ao do Tipo 2. A diferença é que existem 2 tabelas ou arquivos que são mantidos:um para os custos atuais e outro para manter os registros do histórico dos custos. Quando novos registros atuais são adicionados ao mestre, esses novos registros geralmente são adicionados ao histórico ao mesmo tempo.
As definições dos campos são as mesmas na atualização, no histórico e nos arquivos ou tabelas mestres. Vamos classificar os registros para a atualização e o histórico juntos. Será criado um novo mestre que possui apenas um registro para cada ProductCode e esse registro será o mais atual. O histórico terá todos os registros para cada ProductCode incluindo os da fonte de atualização.
A tabela master inicial será a mesma que a master inicial do nosso exemplo do Tipo 1 com os valores mostrados abaixo.
ProductCode | Custo | Data de início |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365,00 | 20120101 |
G101 | 19,25 | 20110930 |
J245 | 450,50 | 20110430 |
S022 | 98,75 | 20110515 |
Todos os dados de atualização terão a mesma StartDate. A fonte update.dat contém registros com os seguintes valores:
ProductCode | Custo | Data de início |
---|---|---|
F112 | 2.425,00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
A fonte do histórico inicial abaixo é como o mestre inicial no Tipo 2. Assim, o Tipo 4 é uma combinação de Tipo 1 e Tipo 2, onde o mestre é o mesmo que um mestre Tipo 1 e o histórico é o mesmo que um mestre Tipo 2.
ProductCode | Custo | Data de início |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365,00 | 20120101 |
G101 | 19,25 | 20110930 |
G101 | 21.25 | 20110501 |
J245 | 450,50 | 20110430 |
J245 | 425,25 | 20101001 |
J245 | 385,25 | 20100215 |
S022 | 98,75 | 20110515 |
No IRI Workbench, existe um assistente Voracity para auxiliar na criação de scripts para atualização de arquivos e tabelas Dimensionais. Este assistente está localizado no menu suspenso Voracity na barra de navegação. Primeiro você escolhe o tipo de SCD. Em seguida, a janela onde você seleciona as fontes que são usadas para processar a atualização é exibida.
A próxima tela é onde você configura a ordenação selecionando as chaves. Existem 2 chaves:ProductCode então DataInício . Estamos agrupando por ProductCode , mas também precisamos classificar em ordem decrescente por StartDate dentro de cada ProductCode agrupamento. Isso é para que possamos filtrar o registro mais recente para cada ProductCode grupo para o novo mestre.
Para tornar a StartDate uma chave que classifica em ordem decrescente, selecione essa chave e, em seguida, selecione Editar chave . Isso trará a seguinte tela:
Na lista suspensa de Direção selecione Decrescente .
Aqui está o script de trabalho para a classificação:
/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD4/history4.dat /PROCESS=DELIMITED /ALIAS=history4 /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='\"') /SORT /KEY=(PRODUCTCODE, TYPE=ASCII) /KEY=(STARTDATE, DESCENDING, TYPE=ASCII) /OUTFILE=history4.dat # This file will contain all the records from both inputs /PROCESS=DELIMITED /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /OUTFILE=master4.dat # Include only one record for each ProductCode /PROCESS=DELIMITED /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /INCLUDE WHERE PRODUCTCODE
Abaixo está o mestre atualizado produzido pela execução do script de trabalho acima usando SortCL. Os valores são os mesmos que são produzidos em uma atualização do Tipo 1.
ProductCode | Custo | Data de início |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2.425,00 | 20120701 |
G101 | 19,25 | 20110930 |
J245 | 550,50 | 20120701 |
M447 | 139,25 | 20120701 |
S022 | 101,75 | 20120701 |
O arquivo de histórico contém todos os registros anteriores mais os novos registros do arquivo de atualização.
ProductCode | Custo | Data de início |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2.425,00 | 20120701 |
F112 | 2365,00 | 20120101 |
G101 | 19,25 | 20110930 |
G101 | 21.25 | 20110501 |
J245 | 550,50 | 20120701 |
J245 | 450,50 | 20110430 |
J245 | 425,25 | 20101001 |
J245 | 385,25 | 20100215 |
M447 | 101,75 | 220120701 |
S022 | 101,75 | 20120701 |
S022 | 98,75 | 20110515 |