Pular para o conteúdo

Fato, dimensão, grão

Aula 2 de 107 minOperarAtualizada em 2026-10-04

Vídeo em produção

A gravação desta aula está no lote de produção. O objetivo, o exercício e a documentação já valem. Duração-alvo: 7 min.

Objetivo: Identificar fato/dimensões/grão do Aurora

Selo de estado: Preview (teto atual do produto) · Curso ACD-310 — Modelo semântico e modelagem dimensional · Aula 2 de 10 · Atualizado em 2026-10-04.

Objetivo#

Ao final desta aula você vai identificar, nas tabelas da Aurora Varejo, qual é o fato, quais são as dimensões e qual é o grão de cada uma.

Vídeo#

Identificador no manifesto: acd-310-02-modelagem-dimensional · duração-alvo 7 min · tela do produto: /dashboards.

Roteiro:

  1. 00:00–01:00 — Por que modelar: o problema de "cada gráfico com uma definição diferente" · tela: /dashboards (dois cartões de receita divergentes)
  2. 01:00–02:30 — Fato × dimensão: a regra "soma ou conta = fato; agrupa ou filtra por = dimensão" · tela: /dashboards/[id] (diagrama do modelo)
  3. 02:30–04:00 — Classificando as 5 tabelas da Aurora: vendas, produtos, clientes, filiais, calendario · tela: /dashboards/[id] (lista de tabelas do modelo)
  4. 04:00–05:40 — Grão: o que uma linha de vendas representa, e por que misturar grãos infla números · tela: /dashboards/[id] (amostra de linhas de vendas)
  5. 05:40–07:00 — Modelo estrela × floco de neve: por que a estrela é o padrão recomendado · tela: /dashboards/[id] (diagrama final da estrela Aurora)

Conteúdo#

Modelar começa com um vocabulário simples, que Conceitos de modelagem dimensional define e que esta aula aplica diretamente às cinco tabelas do workspace de treino Aurora Varejo (dataset aurora_gold): vendas, produtos, clientes, filiais e calendario.

Fato × dimensão

Todo modelo dimensional separa dois papéis de tabela:

PapelO que guardaRegra prática
FatoOs eventos mensuráveis do negócio — uma linha por ocorrência, com números que se somam.Se você soma ou conta uma coluna dela, é fato.
DimensãoO contexto que descreve os eventos: quem, o quê, onde, quando.Se você agrupa ou filtra por uma coluna dela, é dimensão.

Na frase "receita por categoria por mês": receita é a medida do fato; categoria vem da dimensão produtos; mês vem da dimensão calendario. O verbo muda, o papel da tabela muda.

As cinco tabelas da Aurora, classificadas

TabelaPapelPor quê
vendasFatoUma linha por item vendido, com valor, quantidade, custo — números que você soma.
produtosDimensãoDescreve o quê foi vendido: categoria, marca. Você agrupa e filtra por ela, nunca soma uma linha dela como receita.
clientesDimensãoDescreve quem comprou: segmento, cidade.
filiaisDimensãoDescreve onde: uf, regiao, cidade.
calendarioDimensão de tempoDescreve quando: ano, mes, trimestre. É a dimensão que a aula 6 detalha.

No editor do dashboard (/dashboards/[id], aba do modelo), cada tabela aparece como um nó do diagrama; não existe um campo "isto é fato/isto é dimensão" para marcar — o papel é inferido pelo uso: a tabela que concentra as medidas agregadas (SOMA, CONTD, MEDIA) é o fato; as demais, ligadas a ela, são dimensões. Por isso vale fazer esse exercício de classificação antes de desenhar qualquer relação — é o assunto da aula 3.

Grão: a decisão mais importante do modelo

O grão é o que uma linha do fato representa. Em vendas, o grão é "um item de um pedido": cada linha tem um produto_id, um cliente_id, um filial_id, uma data e um valor. Definir o grão corretamente importa porque:

  • Toda medida do fato é somada nesse grão. SOMA(valor) dá a receita total porque cada linha é, de fato, um item vendido — não um pedido inteiro, não um dia.
  • Misturar grãos infla números. Imagine juntar vendas (grão: item) a uma tabela de metas por filial e mês (grão: filial/mês). Somar a meta sobre esse join contaria a mesma meta uma vez por item vendido daquela filial naquele mês — um número várias vezes maior que o real.

Aviso

O ingestia.bi detecta esse estouro de linhas (fan-out) e recusa a agregação em vez de entregar um total inflado. Você vai ver esse bloqueio na prática na aula 4 — mas a causa-raiz quase sempre é esta: dois grãos diferentes somados pelo mesmo join.

Se você precisar de números em grãos diferentes — itens vendidos e metas mensais, por exemplo — o caminho correto é dois fatos ligados às mesmas dimensões, não um join forçado entre eles.

Modelo estrela × floco de neve

  • Estrela (recomendado): um fato no centro, cercado de dimensões, cada uma ligada diretamente ao fato. É o desenho que o gerador de SQL do ingestia.bi resolve melhor, e é o que a Aurora usa:

    código
            calendario
                |
    clientes — vendas — produtos
                |
             filiais
  • Floco de neve: dimensões normalizadas em sub-tabelas (por exemplo, produtos → categorias → departamentos). Funciona, mas cada salto extra é mais um join. Prefira achatar a dimensão — trazer categoria e departamento para dentro de produtos — sempre que puder.

Como isso aparece no produto

Hoje a classificação fato/dimensão e o grão não têm uma tela própria — eles se expressam em três lugares concretos do editor do dashboard (/dashboards/[id]):

  1. Nas medidas que você cria (aula 8): toda medida agregada (SOMA, CONTD, MEDIA) aponta para uma coluna do fato.
  2. No diagrama de relações (aula 3): as linhas sempre saem de uma coluna-chave do fato para a coluna identificadora de uma dimensão.
  3. No bloqueio de fan-out (aula 4): é o próprio produto confirmando, na prática, se você respeitou o grão.

Erros comuns

  • Tratar uma dimensão como fato. Tentar SOMA(filiais.meta) direto, sem passar por uma agregação consciente do grão, é o erro mais comum de quem vem do Excel — lá, qualquer coluna numérica pode ser somada; aqui, o papel da tabela importa.
  • Misturar grãos no mesmo fato. Juntar linhas de granularidades diferentes numa única tabela "achada" é a origem de boa parte dos bloqueios de fan-out que você vai ver na aula 4.
  • Supor que o floco de neve é "mais correto". Ele não é errado, só mais caro em joins; a estrela resolve a esmagadora maioria dos casos de uma PME.

Faça você mesmo#

No workspace de treino Aurora Varejo (abra /dashboards no console, editor de um painel, aba do modelo):

  1. Liste as cinco tabelas do modelo: vendas, produtos, clientes, filiais, calendario.
  2. Para cada uma, escreva se ela é fato ou dimensão, usando a regra "soma/conta = fato; agrupa/filtra = dimensão".
  3. Em vendas, identifique as colunas numéricas que você somaria (valor, quantidade, custo) e confirme que elas só existem ali.
  4. Em calendario, confirme que não há nenhuma coluna que faça sentido somar — é uma dimensão pura.
  5. Escreva, numa frase, qual é o grão de vendas (dica: "uma linha é um/uma ___ de um ___").
  6. Verifique se alguma outra tabela do seu workspace real (fora da Aurora) tem grão diferente do fato principal — se tiver, anote que ela precisará de um fato separado.

Você terminou quando conseguir apontar, para as cinco tabelas da Aurora, o papel (fato/dimensão) e o grão de vendas sem consultar a tabela acima.

Checagem rápida#

Três perguntas no final da aula, corrigidas no servidor. A aula só conta como concluída depois da checagem.

Documentação relacionada#

Capacidades ensinadas#

C05.1 — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".

Carregando seu progresso…