O que é Degenerate Dimension (dimensão degenerada)?

É uma dimensão que é derivada da Tabela Fato e não tem sua própria Tabela de Dimensão. By Lito – Consultando o Wikipedia e outras fontes.

Em um Data Warehouse, uma Degenerate Dimension (Dimensão Degenerada) é uma dimensão  que é derivada da  Tabela Fato  e não tem sua própria Tabela de Dimensão.  Degenerate Dimensions são usadas frequentemente quando a granularidade de uma tabela de fato representa os dados de nível transacional, e que se deseje manter identificadores específicos do sistema, como os números de ordem, números de fatura e similares, sem forçar a sua inclusão na sua própria dimensão. A decisão de usar Degenerate Dimensions é muitas vezes baseada no desejo de fornecer uma referência direta a um sistema transacional, sem a sobrecarga da manutenção de uma tabela dimensão separada.

Dimensão Degenerada é conseguida através de uma abordagem de modelagem gradual seguindo as normas de Modelagem Dimensional. Vamos dar exemplo de um star schema (esquema estrela) que representa Faturas. O fato não teria o “Total Faturado” como medida primária. Agora, quando olhamos para a origem da nota fiscal, é o corpo da fatura em papel, temos as seguintes informações sobre cada fatura:

  • Invoice Date (Data da fatura)
  • Customer ID (ID do cliente)
  • Products within the Invoice (Produtos na fatura)
  • Reference to Order Number(s) (Referência ao(s) numero(s) do pedido)
  • Invoice Number (Número da Fatura)
  • Invoice Line Numbers (Número do Item – as várias linhas da fatura)
  • Invoice Line Amount (Valor do item da fatura)
  • Invoice Total Amount (Valor Total da fatura)

Seguindo os padrões de modelagem dimensional, analisando o modelo acima teremos as seguintes dimensões distintas:

  • Calendar Dimension (Dimensão Calendário – que representa a data da fatura)
  • Customer Dimension (Dimensão Cliente – que representa ID do cliente)
  • Product Dimension (Dimensão Produto – que representa produtos na Fatura)
  • Order Dimension (Dimensão Pedidos – Os Pedidos)
  • Invoice Dimension (Dimensão Fatura – representando Número e os itens da Fatura)

Vem a Pergunta – quais seriam os atributos que fariam parte da Dimensão Fatura, caso decidamos ter uma?

É nesta situação, que podemos decidir por ‘degenerar’ os atributos Número da Fatura e Número do Item para o fato e evitar que uma entidade distinta para representar o Número da Fatura / Números de Itens como uma dimensão. O que nós conseguimos com isso:

  • Evitar um enorme join entre o fato e as dimensões, que teriam a mesma granularidade,
  • Permitir consultas pelo Número da Fatura como ponto de entrada

Então, quando esse cenário aparece, deixamos os atributos (ou seja, Número da Fatura e Número do Item, no nosso caso), como parte do fato, parte da chave primária no Fato. Eis porque e como nós criamos Degenerate Dimensions em nosso modelo.

Resumindo

Dimensão Degenerada é uma chave de dimensão sem dimensão correspondente. Exemplo:

Na tabela  fato PointOfSale temos:

  1. Date Key (FK),
  2. Product Key (FK),
  3. Store Key (FK),
  4. Promotion Key (FP),
  5. POS Transaction Number.
  • Dimensão Data corresponde à Date Key (PK/SK);
  • Dimensão Produto corresponde à Product Key (PK/SK);
  • Dimensão Loja corresponde à Store Key (PK/SK);
  • Dimensão Promoção corresponde à Promotion Key (PK/SK).

Em um banco de dados tradicional, com hierarquia pai-filho, o POS Transactional Number seria a chave para o registro de cabeçalho da transação que contém toda a informação válida para a operação como um todo, tais como a data da transação e identificador da loja. Mas neste modelo dimensional, já extraímos estas informações, armazenando-as em outras dimensões. Portanto, POS Transactional Number se parece com uma chave de dimensão na tabela de fatos, mas não tem a tabela de dimensão correspondente.

Portanto, POS Transactional Number é uma dimensão degenerada.

Mais algumas definições

Kelley Chuck: Uma dimensão degenerada é um dado que é tridimensional na natureza, mas armazenados em uma tabela fato. Por exemplo, se você tiver uma dimensão que só tem Número do Pedido e Número do Item, você teria uma relação de 1:1 com a tabela de fatos. Você quer ter duas tabelas com um bilhão de linhas ou uma tabela com um bilhão de linhas. Portanto, esta seria uma Degenerate Dimension e o Número do Pedido e o Número do Item seriam armazenados na tabela de fatos.

Joe Oates: Muitas tabelas do tipo Fato Transacional, em um Data Warehouse, têm um número de controle, tais como o Número da Fatura, Número do Pedido ou Número da Apólice. Ao longo dos anos, refletidos no Data Warehouse, pode haver centenas de milhares ou mesmo milhões de números de controle específicos, tais como Número da Nota Fiscal. Não é prático ter uma lista drop-down de cada um destes números para encontrar dados normalmente encontrados no cabeçalho da fatura do sistema legado, como Número da Fatura, Data da Fatura, Tipo da Fatura. Por conseguinte, estes itens de dados são colocados na tabela de fato para usos do tipo Slice and Dice, conforme a necessidade do usuário. Estes números de controle são chamados de Degenerate Dimension.

Se tivéssemos uma dimensão de nota fiscal, teríamos quase tantas entradas quanto na chamada Fato Item-Linha. Este Fato é, de longe, a maior tabela do Data warehouse. Juntando as multimilionárias ou multibilionárias linhas da tabela Fato com as multimilionárias ou multibilionárias linhas da dimensão, fará com que o Data Warehouse ocupe um espaço gigantesco em disco, muito mais do que deveria, bem como um desempenho significativamente degradante.

Clay Rehm: Uma Degenerate Dimension é uma dimensão que é armazenada na tabela Fato ao invés de ser em uma tabela de dimensão. Isso elimina a necessidade de um join a mais com uma dimensão, além de reduzir o espaço de armazenamento.

Joe Oates é um autor internacionalmente conhecido, palestrante e consultor em Data Warehouse, com mais de 30 anos de experiência.

Chuck Kelley é um conhecido especialista internacional em banco de dados e Data Wwarehousing, com 30 anos de experiência.

Clay Rehm, é presidente da Rehm Tecnologia, uma empresa de consultoria especializada em soluções de integração de dados.

Exemplo:

Até a Próxima!

9 Respostas to “O que é Degenerate Dimension (dimensão degenerada)?”

  1. Marcos Paulo - Slipmp Says:

    Realmente muito bom! Me ajudou bastante para a prova que eu terei hoje!

    Muito Obrigado!

  2. Joel Says:

    Também me ajudou bastante na prova que terei hoje.

    Interessante que sou da mesma sala que o Marcos Paulo (acima) hehehe.

    Muito obrigado!

  3. Wilson Says:

    Eu estudo Data Warehouse pelo livro do Kimball (inglês). A tradução de degenerate dimension é realmente dimensão degenerada?

    • Carlos Alberto Lorenzi Lima Says:

      Fala Wilson, tudo bem.

      Ao ‘pé da letra’ a palavra degenerate em inglês corresponde a degenerado em português. Um concito um tanto quanto forte, se considerarmos a tradução seca. Na verdade, podemos considerar essa ideia de ‘degenerate’ como sendo uma dimensão que não precisa ser gerada, que não precisa existir. Convenhamos que usar uma dimensão que não existe, é um tando quanto fora do normal, o que nos trás o termo DEGENERAÇÂO: s.f. Estado do que cai abaixo de uma condição ou qualidade normal.
      Abs.
      Lito

  4. Ricardo Leal Says:

    vc pode enviar o modelo final resultado da sua explicação? Ainda não entendi como vão ficar os atributos da Fato

  5. Dimensões e Fatos: Analisando as Dimensões - Evaristo Moreira Says:

    […] 1) Normalmente, essa dimensão reside na própria fato. Não é criada uma tabela de dimensão pra ela. Por conta disso, no Analysis Services dizemos que a relação da dimensão degenerada com a fato é uma “Fact-Dimension”, já que ela reside na própria tabela fato. 2) Através desta dimensão podemos agrupar os “line itens”, ou itens da fato. Em uma Fato de Vendas – FatoVenda – por exemplo, podemos ter uma chave de venda que é 0004837. Nessa venda, feita para o cliente Luís, foram vendidos três itens: —Venda 0004837—– Um Joystick Dual Shock – $40.00, Um jogo GTA V Definitive Edition – $59.99 Dois conjuntos de pilhas alcalinas Rayovac 4 un. – $6.00 ———————- Se utilizarmos somente a dimensão degenerada “Número da Venda” filtrada para 0004837, e colocarmos a métrica Valor Total de Venda, teremos o valor da soma dos valores dos itens, $95.99. Se acrescentarmos na análise a dimensão produto, veremos as descrições dos itens conforme listado acima. Se quisermos o preço unitário dos produtos, podemos criar uma métrica calculada que faça a divisão entre “Valor Total de Venda” por “Quantidade de Itens Vendidos” ( Assim veríamos o valor $3.00 para o preço unitário do conjunto de pilhas alcalinas). Mais informações podem ser obtidas nesta excelente matéria do blog do Lito. […]

  6. Gustavo Gomes Says:

    Obrigado pelas explicações. o Blog está excelente e vou passar a acompanhá-lo, pois estou iniciando os estudos nesta área. um abraço!


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: