Star schema: o que é e como modelar dados de receita

Marketing puxa o número de leads de um lugar, Vendas de outro, Financeiro tem a receita numa terceira planilha — e no fim do mês nenhum bate. Cada pergunta nova (“quanto de receita veio de inbound no trimestre, por segmento?”) vira um projeto de meio dia de PROCV. O problema não é falta de ferramenta; é arquitetura de dados. Este guia cobre o que é star schema, a diferença entre fato e dimensão, como montar na ordem certa, quando ele vence o snowflake e as armadilhas de quem já implementou.

Também chamado:
Modelagem dimensional · método Kimball
Categoria:
Arquitetura de dados
Referência canônica:
Kimball (Data Warehouse Toolkit)
Resposta rápida
Star schema é o jeito consagrado de organizar dados para análise: uma tabela-fato no centro (os eventos que você mede — cada venda, cada pagamento, cada lead) cercada por tabelas-dimensão (o contexto — quem, o quê, quando, qual canal). O nome vem do desenho: a fato no meio, as dimensões em volta como pontas de uma estrela. Serve para uma coisa — transformar dados operacionais espalhados em algo que responde pergunta de negócio rápido e sem ambiguidade.

O que é star schema

Os dados já existem — todo mundo tem CRM, tem BI, tem planilha. O que falta é modelá-los numa forma que responde pergunta. Star schema (esquema estrela, ou modelagem dimensional) é a resposta madura para isso, e madura de verdade: Ralph Kimball formalizou o método nos anos 90 e ele segue sendo o padrão da indústria para análise, inclusive nas plataformas de nuvem modernas.[1]

A ideia é dividir todo dado em duas categorias, e só duas. A fato (fact table) é o que aconteceu e você mede — uma linha por evento no menor nível possível: uma venda, um pagamento, um clique. Guarda números (valor, quantidade) e chaves que apontam para o contexto; cresce sem parar, milhões de linhas, e é magra em colunas. A dimensão (dimension table) é o contexto que descreve o fato — o “quem, o quê, onde, quando”: cliente, produto, data, canal, vendedor. Poucas linhas, muitas colunas descritivas. É por aqui que você filtra e agrupa.

A Microsoft resume a divisão de trabalho de forma limpa: dimensões servem para filtrar e agrupar; fatos servem para somar.[2] Toda pergunta de BI é uma combinação disso — “some a receita (fato), agrupada por canal (dimensão), filtrada pelo trimestre (dimensão)”. Quando os dados já estão nesse formato, a pergunta vira uma linha; quando não estão, vira um projeto.

AspectoTabela-fatoTabela-dimensão
O que guardaeventos que você mede (venda, pagamento, lead)contexto que descreve o evento (quem, o quê, quando, qual canal)
Conteúdo das colunaschaves + medidas numéricas (valor, quantidade)atributos descritivos (nome, segmento, categoria)
Formatomuitas linhas (milhões), poucas colunaspoucas linhas, muitas colunas
Papel na consultasomar (agregação)filtrar e agrupar[2]
Como crescesem parar — uma linha por eventodevagar — uma linha por entidade
A divisão de trabalho que define o star schema. Fato guarda chave e número; descrição mora na dimensão.

Não confunda com dois vizinhos. O data warehouse é o lugar onde o star schema mora (o banco analítico); o star schema é a forma como você organiza os dados lá dentro — dá para ter um warehouse mal modelado, sem estrela, e sofrer para tirar relatório dele. E o snowflake schema é a versão normalizada da mesma ideia, com mais joins — assunto da seção “Quando usar”. Onde o star schema realmente importa é como meio, não como fim: é ele que faz NRR, CAC e forecast serem calculáveis de um jeito confiável. Sem ele, cada métrica é uma planilha isolada com sua própria definição de “cliente” e “receita” — e é exatamente aí que os números param de bater.

Como montar um star schema

Kimball define um processo canônico de quatro passos, nessa ordem: (1) escolha o processo de negócio, (2) declare o grão, (3) liste as dimensões, (4) liste os fatos.[4] A ordem não é decorativa — pular o grão para começar pelas dimensões (a parte “visível”) é a origem de quase todo modelo quebrado.

A decisão mais importante e a que mais gente erra é o grão (grain): em que nível fica uma linha da fato? Uma linha por pedido? Por item do pedido? Por dia? Kimball é categórico — declare o grão primeiro, por escrito, com todos os donos concordando, e faça no nível atômico (o mais detalhado que a fonte permite).[4] Grão errado é irreversível na prática: se você agregou por dia, nunca mais responde “por hora”; se misturou grãos (uma linha por item e uma linha de total do pedido), soma tudo em dobro e o número infla sem ninguém perceber. Esse é o passo que trava reunião — deixe travar, é barato aqui e caríssimo depois.

Depois vêm dimensões e fatos. As dimensões saem dos recortes que o negócio realmente fatia — cliente, produto, data, canal, vendedor: cada coisa que alguém vai querer filtrar ou agrupar. Os fatos são só o que se soma naquele grão — valor, quantidade, desconto, custo. Números aditivos entram; taxa e percentual se calculam depois, não se guardam na fato. Duas escolhas de engenharia fecham o modelo. Use uma chave substituta (surrogate key) gerada por você, nunca o ID do sistema de origem[2] — o dia em que você troca de CRM, ou o cliente muda de segmento, o ID de origem te trai, e é a surrogate key que sustenta o versionamento (as slowly changing dimensions, o histórico de “esse cliente era tier 1 na venda de janeiro, virou tier 2 em março”). E faça as dimensões conformes: uma dim_cliente só, que serve o fato de venda e o fato de receita — é o que faz os números baterem entre áreas. Ao fim, valide com uma pergunta real que hoje é difícil; se o modelo responde em uma consulta, funcionou; se ainda exige três joins e uma reza, o grão ou as dimensões estão errados — volte ao passo dois.

Quando usar star schema (e quando snowflake)

A dúvida clássica é star contra snowflake. No star schema, cada dimensão é uma tabela só, achatada (desnormalizada): a dimensão produto já traz categoria e subcategoria dentro dela. No snowflake schema, você normaliza — quebra produto em produto → subcategoria → categoria, três tabelas encadeadas. O snowflake economiza um pouco de armazenamento e é mais “limpo” academicamente, mas cobra o preço em joins a mais em toda consulta e num modelo mais difícil de o usuário de negócio entender.[3]

CritérioStar schemaSnowflake schema
Dimensõesachatadas, desnormalizadas (uma tabela por dimensão)normalizadas, encadeadas em várias tabelas
Joins por consultamenosmais[3]
Velocidade de leituramais rápidamais lenta
Armazenamentousa um pouco maiseconomiza um pouco
Legibilidade para o negócioaltabaixa
Recomendação para receitapadrão — na dúvida, star[2]casos de nicho
Para 99% da operação de receita, star ganha: menos join, consulta mais rápida, menos ambiguidade.

Há ainda a comparação com o modelo transacional normalizado (3NF), o formato de banco de sistema operacional. Consultas contra um modelo dimensional são significativamente mais rápidas que contra um 3NF, porque os joins e as agregações já foram aplicados na modelagem.[5] Na dúvida, star — a própria Microsoft recomenda colapsar um snowflake numa dimensão única no BI.[2] O ganho real não é de milissegundo, é de clareza: todo mundo consulta a mesma fonte com a mesma definição. Quem promete “star schema melhora performance em X%” está chutando — o ganho depende do volume, do motor (Postgres, BigQuery, Snowflake) e da qualidade dos índices.

Como implementar na prática

Star schema é modelagem em nível de negócio antes de ser SQL — quem decide o quê, não como se escreve a query. Na prática, o trabalho é escolher um processo, casar as fontes e fazer as áreas concordarem com o grão e as definições. Metade do serviço é casar o CRM (a fonte da intenção) com o billing (a fonte do dinheiro).

Onde os dados moram

Fatos de pipeline + dimensão cliente/deal CRM (Pipedrive, HubSpot, Salesforce) — deal criado, avançou de estágio, fechou. Cuidado com valor zerado e canal em branco: dado sujo na origem vira fato sujo.
Fato de receita reconhecida Billing / ERP financeiro (Conta Azul, Omie, sistema de cobrança) — a fonte de verdade do dinheiro.
Fatos de comportamento Web analytics / eventos (GA4, produto) — sessão, evento, sign-up; enriquece a dimensão canal/campanha.
Dimensões pequenas e críticas Planilhas de apoio — metas, mapa de canais, tabela de segmentação.

Quem precisa entrar

RevOps / Engenharia de dados Dono do modelo: define o grão, desenha fato e dimensões, constrói e mantém o pipeline. É quem diz “não” quando pedem para misturar grão.
Financeiro Dono da definição de receita e do que conta como cliente ativo. Sem ele na mesa, a fato de receita nasce errada.
Vendas / Marketing Donos das definições de estágio de funil, MQL/SQL e canal — dizem o que cada dimensão precisa carregar.
Customer Success Dono da definição de churn e expansão, que alimenta NRR e GRR em cima da fato.
  1. 1 Escolha um processo de negócio, um só — vendas fechadas, ou receita reconhecida, ou geração de lead. Não modele a empresa inteira de uma vez: modele um processo, entregue valor, repita.
  2. 2 Declare o grão — “uma linha da fato = uma linha por item de pedido”. Escreva e faça todos concordarem antes de seguir. É o passo que trava reunião; deixe travar.
  3. 3 Liste as dimensões — os recortes que o negócio realmente filtra e agrupa: cliente, produto, data, canal, vendedor.
  4. 4 Liste os fatos — só números aditivos (valor, quantidade, desconto). Taxa e percentual se calculam depois, nunca se guardam na fato.
  5. 5 Crie chaves substitutas e dimensões conformes — uma dim_cliente que serve venda e receita é o que faz os números baterem entre áreas.
  6. 6 Valide com uma pergunta real que hoje é difícil. Responde em uma consulta? Funcionou. Ainda exige três joins? O grão ou as dimensões estão errados — volte ao passo 2.

Armadilhas comuns

Estes são os erros que mais aparecem quando ajudamos um time a montar um star schema do zero — a maioria nasce de modelagem apressada, não de falta de ferramenta.

Pular a definição do grão e sair criando tabela

O erro nº 1 é começar pelas dimensões porque é a parte visível, e deixar o grão implícito. Aí metade das linhas da fato é por item e a outra metade é total de pedido — ninguém declarou, então ninguém percebe. Toda soma de receita infla, o forecast fica otimista, e você descobre quando o número do BI não bate com o do Financeiro no fechamento. Grão primeiro, sempre. É a regra nº 1 do Kimball e a mais ignorada.[4]

Guardar taxa e percentual dentro da fato

O time quer “NRR” ou “win rate” prontos na fato para não recalcular. O problema: percentual não é aditivo — você não soma dois NRR e obtém um NRR válido. Quando alguém agrega por trimestre, o número vira lixo silencioso. A fato guarda os ingredientes aditivos (receita retida, receita base); a taxa se calcula na consulta ou na camada de métrica. Todo mundo tenta essa e todo mundo se queima.

Usar o ID de origem como chave, sem surrogate key

Parece economia — “por que criar uma chave nova se o Pipedrive já tem ID?”. Aí você troca de CRM, ou o cliente muda de segmento, e o histórico se perde ou os IDs colidem. Sem chave substituta você não consegue versionar dimensão (slowly changing dimension) e perde a resposta para “esse cliente estava em que tier na venda de janeiro?”.[2] Barato de fazer no início, caro de retrofit.

Modelar a empresa inteira antes de entregar qualquer coisa

O impulso perfeccionista é desenhar todas as fatos e dimensões de uma vez. Seis meses depois não há nada em produção e o negócio perdeu a fé no projeto. Kimball é claro: um processo de negócio por vez, entrega incremental, dimensões conformes reusadas entre eles.[4] Quem tenta o big bang morre no meio.

Normalizar por reflexo de “boa prática de banco”

Quem vem de sistema transacional normaliza por instinto — quebra produto em três tabelas encadeadas porque “é o certo”. No mundo analítico isso cobra join extra em toda consulta e deixa o modelo ilegível para o pessoal de negócio.[3] A regra inverte: no OLAP você desnormaliza a dimensão de propósito. Redundância de um nome de categoria repetido mil vezes é irrelevante; join a mais em toda pergunta, não.

Alimentar a fato com dado sujo e culpar o modelo

Star schema não limpa dado — ele propaga. Se o CRM tem canal nulo em metade dos deals e valor zerado, sua dim_canal nasce com um monte de “não identificado” e a fato de receita fica furada. Quando o número sai errado, o instinto é mexer no schema — mas o conserto mora lá atrás, no processo de captura, em quem preenche o CRM. Diagnostique a fonte antes de reengenheirar a estrela. (A única descrição que pode viver na fato de propósito é a degenerate dimension — um atributo como o número do pedido.[2])

Checklist de implementação

FAQ

Perguntas frequentes sobre star schema

As dúvidas que mais aparecem de quem vai montar o modelo.

Não. Data warehouse é o lugar — o banco analítico onde os dados consolidados moram; star schema é a forma como você organiza os dados lá dentro. Dá para ter um warehouse mal modelado, sem star schema, e sofrer para tirar relatório dele.

Sim, e talvez mais ainda. Ferramentas de BI são desenhadas em cima da lógica dimensional — a Microsoft afirma que o design do Power BI encaixa nos princípios do star schema: dimensões filtram e agrupam, fatos somam. BI em cima de tabela bagunçada dá relatório lento e número que não bate.

Star, na dúvida. Snowflake economiza armazenamento à custa de mais joins e de um modelo mais difícil de entender. Para operação de receita, a simplicidade e a velocidade do star compensam quase sempre; a própria Microsoft recomenda colapsar dimensões snowflake em uma só.

Grão é o nível de detalhe de uma linha da fato — “uma linha por item de pedido”, por exemplo. É a decisão que trava o resto do modelo e a mais cara de reverter. Kimball manda declarar o grão antes de escolher dimensões e fatos, no nível mais atômico possível.

Porque taxa e percentual não são aditivos — somar dois não dá um válido. A fato guarda os componentes aditivos (receita, contagem); a métrica se calcula em cima. Guardar taxa pronta gera erro silencioso quando alguém agrega por período.

Não. Ele organiza e propaga o que existe. Se o canal está nulo na origem, vai nascer “não identificado” na dimensão. A limpeza acontece antes, no processo de captura e no pipeline de transformação — não no schema.

Depende do escopo, mas a regra é entregar por processo, não a empresa toda. Um primeiro processo (ex.: vendas fechadas) modelado, testado e em produção é questão de semanas com o time certo — e é assim que deve ser, incremental, não big bang.

RevOps ou engenharia de dados é dono do modelo, mas não decide sozinho: Financeiro define receita e cliente ativo, Vendas e Marketing definem estágios e canal, CS define churn e expansão. Modelo dimensional é decisão de negócio disfarçada de decisão técnica.

Sua estrela precisa de quem monte a arquitetura, não de mais um painel

Quando cada pergunta vira um projeto e os números não batem entre áreas, o problema não se resolve com mais uma ferramenta de BI — resolve-se com quem senta, escolhe o processo, declara o grão e casa CRM com billing numa fonte única. É o que o time de RevOps da Incuca faz: estrutura a arquitetura de dados que faz NRR, CAC e forecast pararem de divergir, e deixa o modelo vivo mês a mês.

Falar com o time de RevOps

Referências

  1. [1] Kimball Group. Star Schema OLAP Cube — Kimball Dimensional Modeling Techniques. https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/star-schema-olap-cube/
  2. [2] Microsoft Learn. Understand star schema and the importance for Power BI. Atualizado 2024. https://learn.microsoft.com/en-us/power-bi/guidance/star-schema
  3. [3] Fivetran. Star schema vs. snowflake schema: key differences & examples. https://www.fivetran.com/learn/star-schema-vs-snowflake
  4. [4] Kimball, Ralph & Ross, Margy. The Data Warehouse Toolkit, 3ª edição. Wiley, 2013. https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/books/data-warehouse-dw-toolkit/
  5. [5] Neo, Jonathan (dbt Labs). Building a Kimball dimensional model with dbt. 2023. https://docs.getdbt.com/blog/kimball-dimensional-model
Samuel Adiers Stefanello

Sobre o autor

Samuel Adiers Stefanello

Diretor de TI na InCuca, especialista em tecnologia para negócios: AI, data science e big data e especialista no desenvolvimento de projetos digitais.