Slowly Changing Dimensions (SCD) é uma técnica de modelagem usada em data warehouses para atualização das tabelas de dimensões.
Existem duas principais metodologias para atualização de dimensões:
Tipo 1
Para esse tipo de SCD, você simplesmente sobrescreve os valores de dados existentes com ops novos valores da origem. Isso facilita a atualização da dimensão e limita o crescimento da tabela de dimensões apenas para novos registros. A desvantagem disso é que você perde o valor histórico dos dados porque a dimensão sempre conterá os valores atuais de cada atributo. Por exemplo, você tem uma dimensão de armazenamento que possui um atributo para uma região geográfica. Se houver uma mudança e algumas lojas se moverem de uma região para outra, todos os dados históricos serão movidos. Por exemplo, uma loja que pode estar reportando resultados na região Nordeste, depois altera sua localização para a região do Meio Atlântico. Mas, como resultado da atualização, agora toda a história dessa loja antes da mudança é essencialmente removida do Nordeste e transferida para o distrito do Meio Atlântico. Essa alteração distorcerá os relatórios históricos e os relatórios serão executados antes que a atualização não corresponda mais aos relatórios executados após a atualização no mesmo período de tempo.
Tipo 2
Este é o tipo mais comumente usado para contornar o problema de alteração de histórico do tipo 1. Nesse tipo, a atualização de um dos campos, marca o registro antigo como inativo. Isso permite que a tabela de fatos continue a usar a versão antiga dos dados para fins de geração de relatórios históricos, deixando os dados alterados no novo registro para impactar apenas os dados de fato desse ponto em diante. Várias colunas devem ser adicionadas à tabela de dimensões (datas de início / término do registro ativo e um sinalizador de registro ativo atual) para fornecer o gerenciamento de alterações históricas e garantir o uso ideal do registro ativo. Usando o mesmo exemplo da dimensão Tipo 1 acima, a alteração na região da loja, marcará as colunas de identificação do registro como inativo, e irá incluir um novo registro com a versão atualizada com uma nova chave. Essa nova chave de dimensão será usada na geração da tabela de fatos em andamento. Isso permite que a tabela de fatos ainda use os dados armazenados na chave de dimensão antiga para relatórios históricos. Isso garantirá que os dados permaneçam os mesmos e que um relatório histórico para o mesmo período de tempo executado antes de a atualização ser feita continuará exibindo exatamente os mesmos dados de antes da alteração ter sido feita.
Implementando o Tipo 1
Nesse tipo, os registros da tabela de dimensão destino são atualizados com os novos valores da tabela de origem. Os valores são basicamente substituídos e nenhum histórico é mantido.
Veja como será o fluxo de dados do exemplo:
1-Etapa Source SalesTerritory: Os dados de origem são extraídos da tabela de origem Sales.SalesTerritory
2-Lookup Country Region: O nome da região do país é inserido no fluxo de dados de origem para complementar o fluxo de dados de entrada. Esta etapa é opcional.
3-Slowly Changing Dimension: Etapa principal do fluxo de dados. Ela identifica os campos que serão monitorados no processo de atualização.
Nesta tela, você irá apontar para a tabela de dimensão no destino e irá marcar a coluna da chave negócio.
O chave de negócio representa a chave da tabela de origem, é a chave nativa do sistema de origem. A dimensão usará ela como chave candidata.
Ainda nesta tela, estão listadas todas as colunas de entrada que serão usadas no processo de atualização da dimensão. Marque todas como na tela abaixo e clique em próximo.
-
Selecionar o tipo de alteração: identificar quais colunas de entradas serão usadas para realizar a comparação entre o sistema de origem e a dimensão de destino. Marque todas que serão monitoradas pelo processo de atualização.
Ao finalizar o processo, serão criadas duas saídas. Uma para os registros novos e outra para os registros com os campos atualizados.
- Inserir Destino - Novos registros: Verifique se os relacionamentos da tarefa "Inserir Destino" estão criados corretamente.
- Comando OLE DB - Registros atualizados: Verifique o comando de atualização e o mapeamento dos parêmentros.
Para cada linha com dados atualizados, este comando será processado.
Mapeamento dos parâmetros.
Este tipo de atualização de dimensões é muito comum pois atende grande parte dos cenários, avalie sempre a real necessidade de usar o tipo 2, pois ela adiciona complexidade e aumenta o volume de dados na tabela de dimensão.
Este processo do tipo 1 pode ser substituído por outras técnicas de atualização incremental, já demonstrada em outros artigos neste blog.
Implementando o Tipo 2
A atualização SCD Tipo 2 é um método de atualização mais complexo, ele precisa lidar com cada atributo da dimensão de uma forma diferente.
Existem 3 tipos de tratamento que podem ser configurado para cada atributo.
- Atributo fixo: o valor não é alterado, usado quando é necessário garantir que o valores serão constantes.
- Atributo de alteração: o valor atual é sobrescrito com um novo valor. Usado em atributos que não geram a necessidade de versionar o registro para manutenção de histórico.
- Histórico de Atributo: o valor atual é marcado como inativo e um novo registro é inserido com a mesma chave candidata mas com uma chave substituta nova. Este versionamento, permite que o histórico seja mantido na tabela de fatos. Usar em casos como mudança de localização por exemplo.
Após configurar a fonte de dados, conecte à um componente SCD e inicie a configuração.
Selecione a tabela de Dimensão de Destino. Esta tabela deve ter uma coluna com a chave candidata marcada com o tipo "chave de negócio".
Além disso, a dimensão deve ter duas colunas para identificar a data de criação do registro (StartDate) e a data de inativação do registro (EndDate). Estes campos serão usados para o versionamento de registros com colunas do tipo "histórico".
Marcar o tipo de tratamento que será dado para cada atributo. Neste momento deve ser avaliado cada atributo, caso a caso.
Nesta etapa serão configurados os tratamentos dos atributos históricos. Para identificar o valor atual e os registros históricos, serão utilizadas as colunas StartDate e EndDate da dimensão.
Após configurar o winzard são geradas automaticamente 4 outputs.
Historical Attribute Inserts Output: todos os registros que foram alterados em seus atributos marcados com o tipo "Histórico". Neste fluxo de dados, um novo registro é inserido, o registro antigo recebe a data atual na coluna "EndDate".
UPDATE [dbo].[DimEmployee]
SET [EndDate] = ?
--Recebe a data atual
, [Status] = NULL
WHERE [EmployeeNationalIDAlternateKey] = ? AND [EndDate] IS NULL
--NULL representa o registro atual
Após alteração, o fluxo de dados se une aos novos registros da outra saída "New Output"
New Output: São os registros identificados como novos, neste caso eles são apenas inseridos no fluxo e unidos com os registros alterados.
Changing Attribute Updates: São os registros com os atributos marcados com o tipo atributo de alteração. Neste caso, os valores atuais são sobrescritos, não são versionados.
UPDATE [dbo].[DimEmployee]
SET [CurrentFlag] = ?,[EmailAddress] = ?,[FirstName] = ?,[Gender] =
?,[LastName] = ?,[LoginID] = ?,[MaritalStatus] = ?,[MiddleName] = ?,
[Phone] = ?,[SickLeaveHours] = ?,[Title] = ?,[VacationHours] = ?
WHERE [EmployeeNationalIDAlternateKey] = ?
Com cada saída identificada, o fluxo de dados gerado pelo compomente SCD trata a maioria dos casos possíveis garantindo assim a correta atualização das dimensões.
Fonte:
https://www.nuwavesolutions.com/slowly-changing-dimensions/
Livro: Professional SQL Server Integration Services 2014