Modelagem dimensional no Microsoft Fabric Warehouse: tabelas de fatos

Aplica-se a:✅ ponto de extremidade de análise SQL e Warehouse no Microsoft Fabric

Nota

Este artigo faz parte da série de artigos Modelagem dimensional. Esta série se concentra na orientação e nas práticas recomendadas de design relacionadas à modelagem dimensional no Microsoft Fabric Warehouse.

Este artigo fornece orientação e práticas recomendadas para projetar tabelas de fatos em um modelo dimensional. Ele fornece orientação prática para o Warehouse no Microsoft Fabric, que é uma experiência que oferece suporte a muitos recursos do T-SQL, como a criação de tabelas e o gerenciamento de dados em tabelas. Assim, você tem o controle total de criar suas tabelas de modelo dimensional e carregá-las com dados.

Nota

Neste artigo, o termo data warehouse refere-se a um data warehouse corporativo, que oferece integração abrangente de dados críticos em toda a organização. Em contraste, o termo autônomo de armazém refere-se a um Fabric Warehouse, que é uma oferta de banco de dados relacional de software como serviço (SaaS) que você pode usar para implementar um data warehouse. Para maior clareza, neste artigo este último é mencionado como Armazém de Tecidos.

Gorjeta

Se você não tem experiência com modelagem dimensional, considere esta série de artigos seu primeiro passo. Não se destina a fornecer uma discussão completa sobre o design de modelagem dimensional. Para obter mais informações, consulte diretamente o conteúdo publicado amplamente adotado, como The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3ª edição, 2013), de Ralph Kimball, e outros.

Em um modelo dimensional, uma tabela de fatos armazena medidas associadas a observações ou eventos. Ele poderia armazenar ordens de venda, saldos de estoque, taxas de câmbio, leituras de temperatura e muito mais.

As tabelas de fatos incluem medidas, que normalmente são colunas numéricas, como a quantidade da ordem do cliente. As consultas analíticas resumem medidas (usando soma, contagem, média e outras funções) dentro do contexto de filtros e agrupamentos de dimensão.

As tabelas de fatos também incluem chaves de dimensão, que determinam a dimensionalidade dos fatos. Os valores-chave da dimensão determinam a granularidade dos fatos, que é o nível atômico pelo qual os fatos são definidos. Por exemplo, uma chave de dimensão de data de pedido em uma tabela de fatos de vendas define a granularidade dos fatos no nível de data, enquanto uma chave de dimensão de data de destino em uma tabela de fatos de destino de vendas pode definir a granularidade em nível de trimestre.

Nota

Embora seja possível armazenar fatos com uma granularidade mais alta, não é fácil dividir os valores de medida em níveis mais baixos de granularidade (se necessário). Grandes volumes de dados, juntamente com requisitos analíticos, podem fornecer uma razão válida para armazenar fatos de maior granularidade, mas às custas de uma análise detalhada.

Para identificar facilmente as tabelas de fatos, você normalmente prefixa seus nomes com f_ ou Fact_.

Estrutura da tabela de factos

Para descrever a estrutura de uma tabela de fatos, considere o exemplo a seguir de uma tabela de fatos de vendas chamada f_Sales. Este exemplo aplica boas práticas de design. Cada um dos grupos de colunas é descrito nas seções a seguir.

CREATE TABLE f_Sales
(
    --Dimension keys
    OrderDate_Date_FK INT NOT NULL,
    ShipDate_Date_FK INT NOT NULL,
    Product_FK INT NOT NULL,
    Salesperson_FK INT NOT NULL,
    <…>
    
    --Attributes
    SalesOrderNo INT NOT NULL,
    SalesOrderLineNo SMALLINT NOT NULL,
    
    --Measures
    Quantity INT NOT NULL,
    <…>
    
    --Audit attributes
    AuditMissing BIT NOT NULL,
    AuditCreatedDate DATE NOT NULL,
    AuditCreatedBy VARCHAR(15) NOT NULL,
    AuditLastModifiedDate DATE NOT NULL,
    AuditLastModifiedBy VARCHAR(15) NOT NULL
);

Chave primária

Como é o caso no exemplo, a tabela de fatos de exemplo não tem uma chave primária. Isso porque normalmente não serve a um propósito útil e aumentaria desnecessariamente o tamanho do armazenamento da tabela. Uma chave primária é frequentemente implícita pelo conjunto de chaves de dimensão e atributos.

Teclas de dimensão

A tabela de fatos de exemplo tem várias chaves de dimensão, que determinam a dimensionalidade da tabela de fatos. As chaves de dimensão são referências às chaves substitutas (ou atributos de nível superior) nas dimensões relacionadas.

Nota

É uma tabela de fatos incomum que não inclui pelo menos uma chave de dimensão de data.

Uma tabela de fatos pode fazer referência a uma dimensão várias vezes. Neste caso, é conhecida como uma dimensão de RPG. Neste exemplo, a tabela de fatos tem as OrderDate_Date_FK chaves e ShipDate_Date_FK dimensão. Cada chave de dimensão representa um papel distinto, mas há apenas uma dimensão de data física.

É uma boa prática definir cada chave de dimensão como NOT NULL. Durante a carga da tabela de fatos, você pode usar membros de dimensão especiais para representar estados ausentes, desconhecidos, N/A ou de erro (se necessário).

Atributos

A tabela de fatos de exemplo tem dois atributos. Os atributos fornecem informações adicionais e definem a granularidade dos dados de fatos, mas não são chaves de dimensão, nem atributos de dimensão, nem medidas. Neste exemplo, as colunas de atributos armazenam informações de ordem de venda. Outros exemplos podem incluir números de rastreamento ou números de bilhetes. Para fins de análise, um atributo pode formar uma dimensão degenerada.

Medições

A tabela de fatos de exemplo também tem medidas, como a Quantity coluna. As colunas de medida são tipicamente numéricas e comumente aditivas (o que significa que podem ser somadas e resumidas usando outras agregações). Para obter mais informações, consulte Tipos de medida mais adiante neste artigo.

Atributos de auditoria

A tabela de fatos de exemplo também tem vários atributos de auditoria. Os atributos de auditoria são opcionais. Eles permitem que você acompanhe quando e como os registros de fatos foram criados ou modificados, e podem incluir informações de diagnóstico ou solução de problemas geradas durante os processos de Extração, Transformação e Carga (ETL). Por exemplo, você desejará controlar quem (ou qual processo) atualizou uma linha e quando. Os atributos de auditoria também podem ajudar a diagnosticar um problema desafiador, como quando um processo de ETL é interrompido inesperadamente.

Tamanho da tabela de fatos

As tabelas de fatos variam em tamanho. Seu tamanho corresponde à dimensionalidade, granularidade, número de medidas e quantidade de histórico. Em comparação com as tabelas de dimensões, as tabelas de fatos são mais estreitas (menos colunas), mas grandes ou mesmo imensas em termos de linhas (em mais de bilhões).

Conceitos de design de factos

Esta seção descreve vários conceitos de design de fatos.

Tipos de tabela de factos

Existem três tipos de tabelas de factos:

  • Tabelas de fatos de transações
  • Tabelas de fatos de instantâneos periódicos
  • Acumulando tabelas de fatos de instantâneo

Tabelas de fatos de transações

Uma tabela de fatos de transação armazena eventos de negócios ou transações. Cada linha armazena fatos em termos de teclas e medidas de dimensão e, opcionalmente, outros atributos. Todos os dados são totalmente conhecidos quando inseridos, e nunca mudam (exceto para corrigir erros).

Normalmente, as tabelas de fatos de transação armazenam fatos no menor nível possível de granularidade e contêm medidas que são aditivas em todas as dimensões. Uma tabela de fatos de vendas que armazena todas as linhas de ordem de venda é um bom exemplo de uma tabela de fatos de transação.

Tabelas de fatos de instantâneos periódicos

Uma tabela de fatos de instantâneo periódico armazena medições em um tempo predefinido ou intervalos específicos. Ele fornece um resumo das principais métricas ou indicadores de desempenho ao longo do tempo, e por isso é útil para análise de tendências e monitoramento de mudanças ao longo do tempo. As medidas são sempre semiaditivas (descritas mais adiante).

Uma tabela de fatos de inventário é um bom exemplo de uma tabela periódica de instantâneos. Ele é carregado todos os dias com o saldo de estoque de fim de dia de cada produto.

Tabelas periódicas de instantâneos podem ser usadas em vez de uma tabela de fatos de transações quando o registro de grandes volumes de transações é caro e não suporta nenhum requisito analítico útil. Por exemplo, pode haver milhões de movimentos de ações em um dia (que podem ser armazenados em uma tabela de fatos de transação), mas sua análise está preocupada apenas com as tendências dos níveis de estoque no final do dia.

Acumulando tabelas de fatos de instantâneo

Uma tabela de fatos de instantâneo acumulado armazena medições que se acumulam em um período ou fluxo de trabalho bem definido. Ele geralmente registra o estado de um processo de negócios em estágios ou marcos distintos, que podem levar dias, semanas ou até meses para serem concluídos.

Uma linha de fatos é carregada logo após o primeiro evento de um processo e, em seguida, a linha é atualizada em uma sequência previsível toda vez que ocorre um evento de marco. As atualizações continuam até que o processo seja concluído.

A tabela de fatos de instantâneo acumulada tem várias chaves de dimensão de data, cada uma representando um evento de marco. Algumas chaves de dimensão podem gravar um estado N/D até que o processo chegue a um determinado marco. As medidas normalmente registram durações. As durações entre marcos podem fornecer informações valiosas sobre um fluxo de trabalho de negócios ou processo de montagem.

Tipos de medidas

As medidas são tipicamente numéricas e comumente aditivas. No entanto, algumas medidas nem sempre podem ser adicionadas. Estas medidas são classificadas como semiaditivas ou não aditivas.

Medidas aditivas

Uma medida aditiva pode ser somada em qualquer dimensão. Por exemplo, a quantidade de pedidos e a receita de vendas são medidas aditivas (desde que a receita seja registrada para uma moeda única).

Medidas semi-aditivas

Uma medida semi-aditiva só pode ser somada em determinadas dimensões.

Eis alguns exemplos de medidas semi-aditivas.

  • Qualquer medida em uma tabela de fatos de instantâneo periódico não pode ser somada em outros períodos de tempo. Por exemplo, você não deve somar a idade de um item de inventário amostrado todas as noites, mas pode somar a idade de todos os itens de inventário em uma prateleira, todas as noites.
  • Uma medida de balanço de estoque em uma tabela de fatos de estoque não pode ser somada em outros produtos.
  • A receita de vendas em uma tabela de fatos de vendas que tem uma chave de dimensão de moeda não pode ser somada entre moedas.

Medidas não aditivas

Uma medida não aditiva não pode ser resumida em nenhuma dimensão. Um exemplo é uma leitura de temperatura, que por sua natureza não faz sentido adicionar a outras leituras.

Outros exemplos incluem taxas, como preços unitários, e rácios. No entanto, é considerada uma prática melhor armazenar os valores usados para calcular a razão, o que permite que a razão seja calculada, se necessário. Por exemplo, uma porcentagem de desconto de um fato de venda pode ser armazenada como uma medida de valor de desconto (a ser dividida pela medida de receita de vendas). Ou, a idade de um item de estoque na prateleira não deve ser somada ao longo do tempo, mas você pode observar uma tendência na idade média dos itens de inventário.

Embora algumas medidas não possam ser somadas, elas ainda são medidas válidas. Eles podem ser agregados usando contagem, contagem distinta, mínimo, máximo, média e outros. Além disso, medidas não aditivas podem se tornar aditivas quando são usadas em cálculos. Por exemplo, o preço unitário multiplicado pela quantidade do pedido produz receita de vendas, que é aditiva.

Tabelas de factos sem factos

Quando uma tabela de fatos não contém colunas de medidas, ela é chamada de tabela de fatos sem fatos. Uma tabela de fatos sem fatos normalmente registra eventos ou ocorrências, como alunos assistindo às aulas. Do ponto de vista da análise, uma medição pode ser obtida através da contagem de linhas de factos.

Quadros de factos agregados

Uma tabela de fatos agregados representa um acúmulo de uma tabela de fatos base para uma dimensionalidade menor e/ou maior granularidade. Seu objetivo é acelerar o desempenho da consulta para dimensões comumente consultadas.

Nota

Um modelo semântico do Power BI pode gerar agregações definidas pelo usuário para obter o mesmo resultado ou usar a tabela de fatos agregados do data warehouse usando o modo de armazenamento DirectQuery.

No próximo artigo desta série, saiba mais sobre orientação e práticas recomendadas de design para carregar tabelas de modelos dimensionais.