AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 89371
Accepted
IronicMuffin
IronicMuffin
Asked: 2015-01-16 05:58:35 +0800 CST2015-01-16 05:58:35 +0800 CST 2015-01-16 05:58:35 +0800 CST

Quais estratégias conhecidas, se houver, posso usar para validar uma dimensão de mudança lenta?

  • 772

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.

ssas data-warehouse
  • 1 1 respostas
  • 1211 Views

1 respostas

  • Voted
  1. Best Answer
    Jo Douglass
    2015-09-09T08:59:49+08:002015-09-09T08:59:49+08:00

    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 LAGe LEADin 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 LEADpara 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 na WHEREclá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 COUNTvalores 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.

    • 4

relate perguntas

  • Propriedades DSO do SQL Server 2008 Analysis Services

  • Soluções Open Source Business Intelligence/DWH [fechadas]

  • Hierarquia de dimensões do SSAS causa erros de implantação

  • Criação de Data Warehouse

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve