Proposta de site feita pela Genesis Innovation · conteúdo do LinkedIn de Daniel Santos

Pular para o conteúdo
Daniel Santos

Wiki Arquitetura e modelagem

Modelagem dimensional (star schema)

Fatos (o que aconteceu, com números) no centro; dimensões (quem, o quê, quando, onde) em volta. É o formato que BI lê melhor.

O modelo estrela tem uma tabela fato no centro e tabelas dimensão ao redor.

  • Fato: um evento de negócio por linha, no grão definido (aqui, um item de pedido), com medidas numéricas (quantidade, valor) e chaves para as dimensões.
  • Dimensão: descreve o contexto (cliente, produto, data), com atributos para filtrar e agrupar.

A primeira decisão é o grão: o que exatamente é uma linha da fato. Misturar grãos na mesma fato (item e pedido inteiro) é o que faz número dobrar.

Uma estrela pequena, que roda aqui

A fato tem grão de item. A pergunta "quanto vendeu cada categoria, por segmento de cliente" vira dois JOINs e um GROUP BY.

SQL · SQLite
CREATE VIEW fato_itens AS
SELECT i.pedido_id, p.data, p.cliente_id, i.produto_id, i.qtd, i.qtd * pr.preco AS receita
FROM itens i
JOIN pedidos p ON p.id = i.pedido_id
JOIN produtos pr ON pr.id = i.produto_id
WHERE p.status = 'entregue';

SELECT pr.categoria, c.segmento, SUM(f.receita) AS receita
FROM fato_itens f
JOIN produtos pr ON pr.id = f.produto_id
JOIN clientes c ON c.id = f.cliente_id
GROUP BY pr.categoria, c.segmento
ORDER BY receita DESC;

Saída

categoria   | segmento | receita
----------- | -------- | -------
telas       | atacado  | 1800
telas       | varejo   | 900
periféricos | varejo   | 380
periféricos | atacado  | 300
acessórios  | varejo   | 60

O pedido 109, de um cliente que não existe na dimensão, sumiu do resultado no JOIN com clientes. Num modelo de verdade, a dimensão ganha uma linha "desconhecido" (chave -1) para a fato não perder venda.

Estrela ou floco de neve

No *snowflake*, a dimensão é normalizada em várias tabelas (produto → categoria → departamento). Economiza repetição, mas custa JOINs em toda consulta. Para BI (Power BI incluso), a recomendação é a estrela: dimensões largas e desnormalizadas.

  • Chave substituta (*surrogate key*), um inteiro gerado no warehouse, isola a fato das mudanças de chave da origem e permite histórico de dimensão (veja SCD).
  • Dimensão de data própria (uma linha por dia, com mês, trimestre, feriado) é quase sempre a primeira a ser construída.

Fontes

Conhecimento compartilhado pela Genesis Innovation.