Tenho uma dimensão de cliente em nosso data warehouse (SSAS 2014 Multidimensional). Ele é configurado como um SCD Tipo II, com apenas os campos Data inicial e Final para rastrear as alterações. (data final nula = atual).
À medida que nossa carga diária é executada e vejo as mudanças fluindo, às vezes me preocupo com a criação de novos registros quando não deveria.
Que tipo de scripts podem ser executados para comparar cada cliente em seu respectivo histórico e garantir que ele esteja sendo alterado adequadamente?
Além disso, e acho que estou abordando o problema de lacunas e ilhas, quais estratégias existem para verificar se as datas de início e término são todas contíguas?
Quero me sentir confiante de que a tabela está relatando dados corretos dia a dia sem se tornar uma fera devido a alguma verificação nula, causando a criação de uma tonelada de registros a cada dia.
Obrigado por qualquer ajuda que você possa oferecer.
Verificando se as datas são contíguas
Você não diz qual DBMS está usando aqui, mas está usando SSAS, então estou supondo que seja SQL Server. Se você estiver em uma versão recente, usar as funções
LAG
eLEAD
in window pode ser muito útil para esse tipo de tarefa. Você pode ordenar as linhas pela data de início ou por um ID incremental, se tiver um, e usá-los para verificar os valores na linha seguinte ou anterior.Assim, por exemplo, você pode configurar uma função de janela que é particionada por sua chave comercial/chave durável substituta (vou usar apenas o termo chave durável daqui em diante) e ordenada por sua data de início (ascendente). Você poderia usar
LEAD
para verificar se a data de início na próxima linha era igual à data de término + 1 na linha atual. Você não pode usar funções de janela naWHERE
cláusula, então talvez você possa criar uma instrução case que sinalize as linhas que são para o mesmo cliente (ou seja, têm a mesma chave durável), mas onde a próxima linha StartDate não é igual a isso EndDate + 1 da linha. Você pode fazer o mesmo ao contrário para sinalizar a linha seguinte também. Uma consulta externa poderia selecionar apenas as linhas que precisam de investigação.Verificando se o SCD está funcionando corretamente
Até certo ponto, as verificações que você pode fazer dependerão de sua situação particular, mas tentarei abordar isso de um ponto de vista genérico que pode ser útil para você (se ainda precisar de ajuda, 7 meses depois!), e que pode ajudar outras pessoas com problemas semelhantes. Se você retornar e fornecer detalhes mais específicos, informe-me e ficarei feliz em ler e melhorar minha resposta, se possível.
Uma opção pode ser executar algumas consultas que selecionam alguns
COUNT
valores em diferentes aspectos da dimensão. Assim, por exemplo, você pode agrupar pela chave durável e obter uma contagem de quantas linhas existem para essa chave durável. Se você não entender quantas alterações são razoáveis, poderá fazer uma contagem média e procurar clientes que estejam acima dessa média (ou acima dessa média em alguma porcentagem ou valor definido).A partir daí, pesquisar os dados pertencentes a um punhado de clientes suspeitos pode revelar problemas óbvios que merecem uma investigação mais aprofundada. Sem detalhes, não sei quais problemas você pode estar enfrentando, mas, como exemplo, digamos que você observe um cliente que tem centenas de linhas, com um valor que está mudando entre dois valores. A partir daí, você pode escrever algumas consultas para procurar esse problema no restante da tabela - por exemplo, criar uma consulta que permita examinar o número de linhas para cada cliente versus o número de linhas exclusivas para cada cliente (observando apenas as colunas de atributos reais, não as datas ou quaisquer outras colunas de metadados que você possa ter).
Verificar se o cliente está mudando corretamente ao longo do tempo dependerá de quais dados históricos você manteve em sua(s) fonte(s) ou área de preparação. Se você tiver dados históricos em um ou ambos os locais, poderá comparar os valores com suas linhas de dimensão diretamente por data (se os dados históricos incluírem datas) ou talvez pela ordem em que essas alterações ocorreram.
Em uma ligeira tangente, mas vale a pena mencionar: estou supondo que, pelo fato de você não ter certeza se esta dimensão está se comportando corretamente, isso é algo que você talvez tenha herdado de outro desenvolvedor? Se você está realmente preocupado com o tamanho dessa dimensão e não conhece o motivo completo de seu design atual, pode valer a pena verificar se todos os campos SCD Tipo II realmente devem ser SCD Tipo II.
Alguns desenvolvedores de data warehouse tenderão a presumir o SCD II por padrão, o que pode ser realmente problemático . Além dos problemas de espaço, conforme o link entra, o uso do SCD II pode levar a alguns resultados inesperados para as pessoas que consomem os dados. Isso pode não ser relevante no seu caso (os atributos SCD II podem ser bem pensados e adequados para os requisitos de seus usuários), mas se for relevante, pode ser possível aliviar sua preocupação com o tamanho da dimensão e também remover a necessidade de fazer essas verificações de qualidade de dados.