Modelagem dimensional para marketing analytics: star schema na prática

\"Modelagem

Dashboard bonito em cima de modelo errado é o cenário mais caro de analytics de marketing: números batem internamente, stakeholders confiam, e a decisão de budget vai para o canal errado. Star schema não é exercício acadêmico — é a forma de garantir que spend, sessão, lead e receita coexistam na mesma granularidade sem duplicar fatos ou misturar dimensões incompatíveis. Modelagem dimensional bem feita antecipa a pergunta do BI antes que o analista precise inventar join na hora do meeting.

Fatos dimensoes e granularidade de dados
Fatos dimensoes e granularidade de dados

O que é star schema e por que marketing precisa dele?

Star schema organiza dados em uma tabela de fatos central — eventos mensuráveis como impressões, cliques, sessões, leads ou receita — rodeada por dimensões descritivas: data, campanha, canal, dispositivo, produto, região. A estrutura em estrela simplifica joins previsíveis, acelera queries de BI e reduz ambiguidade sobre o que está sendo somado.

Marketing vive de cruzamentos: ROAS por campanha, CPL por canal, conversão por landing page, receita por cohort de aquisição. Sem modelo dimensional, cada cruzamento vira SQL ad hoc com risco de cartesian product, double counting ou grain mismatch. O star schema força a conversa sobre granularidade antes do dashboard ir ao ar.

Como definir a granularidade da tabela de fatos?

A granularidade é a unidade mínima de uma linha na fato: uma linha por impressão, por clique, por sessão, por lead ou por pedido. A escolha depende das perguntas de negócio e do custo de storage/processamento. Fatos diários agregados por campanha servem para reporting executivo; fatos em nível de evento servem para funis e atribuição fina.

O erro clássico é misturar grains na mesma tabela — somar impressões com cliques na mesma linha, ou juntar sessão com transação sem regra de cardinalidade. Documente o grain em linguagem de negócio: ‘cada linha representa uma sessão iniciada no site, atribuída à última campanha non-direct click’. Qualquer métrica derivada deve respeitar esse contrato.

  • Grain documentado em uma frase de negócio, não só técnica
  • Métricas aditivas vs semi-aditivas vs não-aditivas identificadas
  • Surrogate keys nas dimensões para joins estáveis
  • Degenerate dimensions (order_id, session_id) quando necessário
  • Decisão explícita sobre snapshot vs transactional fact

Quais dimensões são obrigatórias em marketing analytics?

Dim_date é universal: permite YoY, WoW, sazonalidade e alinhamento com calendário fiscal. Dim_campaign ou dim_utm captura origem de mídia com hierarquia account > campaign > ad group > ad. Dim_channel agrupa plataformas em categorias de negócio (paid search, paid social, organic, email). Dim_device, dim_geo e dim_landing_page completam a maioria dos breakdowns operacionais.

Dimensões de produto, cliente e conta entram quando marketing cruza com CRM ou e-commerce. A regra é: se o stakeholder filtra ou segmenta por um atributo com frequência, ele merece dimensão — não parâmetro solto em JSON. Dimensões lentamente mutáveis (SCD Type 2) são necessárias quando atributos históricos importam, como mudança de segmento de cliente ou reclassificação de campanha.

DimensãoAtributos típicosFonte comumArmadilha
dim_datedata, semana, mês, trimestre, feriadoCalendário geradoTimezone inconsistente entre fontes
dim_campaigncampaign_id, nome, canal, objetivo, budgetAds APIs, UTMNaming caótico sem governança
dim_channelcanal, subcanal, paid/owned/earnedRegra de negócio + UTMClassificação manual não versionada
dim_devicedevice category, OS, browserGA4, user-agentCardinalidade alta demais no BI
dim_customersegmento, tier, região, cohortCRM, CDPSCD mal implementado distorce histórico

Como modelar spend de mídia junto com comportamento web?

Spend de ads e sessões/conversões do GA4 vivem em grains diferentes: spend é diário por entidade de campanha; sessões são por usuário/dispositivo com atribuição probabilística. A ponte é dim_campaign (ou dim_ad) com chave comum e uma fato de spend separada da fato de sessões/conversões. Juntar tudo numa única fato wide é tentador e quase sempre quebra reconciliação.

Para ROAS e CPA, agregue ambas as fatos na grain de campanha + data antes de calcular ratio. Métricas derivadas como ROAS não são aditivas — somar ROAS de duas campanhas não faz sentido. O modelo dimensional deixa isso explícito: numerador e denominador vêm de fatos compatíveis, ratio calculado na camada semântica ou no BI com regra documentada.

Snowflake schema vs star schema: quando complicar?

Star schema mantém dimensões flat — todos os atributos na mesma tabela. Snowflake schema normaliza dimensões em sub-tabelas (ex.: dim_product → dim_category → dim_brand). Para marketing analytics, star flat costuma vencer: queries mais simples, BI mais rápido de configurar, menos joins para o analista.

Snowflake faz sentido quando dimensões são enormes, compartilhadas entre múltiplos assuntos de negócio, ou quando governança exige normalização estrita. Mid-market de marketing raramente precisa — o risco de over-engineering supera o benefício. Prefira star com dimensões bem desenhadas e views semânticas para abstrações complexas.

Quais erros de modelagem quebram dashboards silenciosamente?

Fan trap e chasm trap ocorrem quando joins entre dimensões e fatos multiplicam linhas inadvertidamente — receita dobra, CPA cai pela metade, ninguém percebe até alguém reconciliar com a plataforma de ads. Many-to-many sem bridge table é outro clássico: campanha ligada a múltiplos produtos sem tabela associativa.

Dimensões com grain mais fino que a fato também distorcem: juntar fato diária de spend com dim_creative que muda de nome intraday gera duplicatas. Teste de sanidade obrigatório: total de spend no modelo = total na plataforma de ads; total de conversões = total no GA4/CRM para a mesma janela e definição.

  • Reconciliação automática spend plataforma vs warehouse
  • Teste de unicidade na grain da fato
  • Validação de cardinalidade em joins críticos
  • Documentação de métricas aditivas vs ratios
  • Alerta quando totais divergem além de threshold

Como evoluir o modelo sem quebrar histórico?

Mudanças de grain ou de definição de dimensão são breaking changes — trate como versionamento de API. Adicione colunas nullable antes de deprecar antigas; mantenha views de compatibilidade por um ciclo de reporting. Quando reclassificar canal ou campanha retroativamente, use SCD Type 2 ou tabela de override com effective_date.

dbt, documentação inline e testes de schema ajudam a evoluir com confiança. Cada PR que altera grain ou join deve incluir query de reconciliação antes/depois. Marketing muda nomenclatura de campanha toda semana — o modelo precisa absorver isso sem exigir redesign mensal.

Checklist prático

  • Grain da fato documentado em linguagem de negócio
  • Dimensões core: date, campaign, channel, device mapeadas
  • Spend e conversões em fatos separadas com ponte dimensional
  • Métricas aditivas vs ratios classificadas e documentadas
  • Reconciliação automática com plataformas de origem
  • Testes de unicidade e cardinalidade nos joins críticos
  • SCD Type 2 onde atributos históricos importam
  • Processo de change management para alterações de grain

Erros comuns

  • Misturar impressão, clique e conversão na mesma linha de fato
  • Somar ROAS ou CPA como se fossem métricas aditivas
  • Ignorar timezone na dim_date e distorcer reporting diário
  • Criar dimensão com cardinalidade ilimitada (ex.: URL completa)
  • Join many-to-many sem bridge table
  • Mudar grain da fato sem versionar dashboards dependentes

Dashboard bonito em cima de modelo errado?

A DataScroll desenha modelos dimensionais para marketing com fatos, dimensões e governança — para BI refletir o negócio.

Modelar meus dados de marketing Falar com a DataScroll

Perguntas frequentes

▸Star schema funciona com BigQuery e Snowflake?

Sim — ambos são otimizados para star schema com columnar storage e joins dimensionais eficientes. BigQuery favorece tabelas wide e particionamento por data; Snowflake se beneficia de clustering keys nas fatos. O padrão dimensional é agnóstico de plataforma; a implementação física (partições, clustering) varia.

▸Preciso de Kimball completo para marketing?

Não. Kimball é referência, não checklist religioso. Marketing mid-market precisa de star schema pragmático: 2-4 fatos, 5-8 dimensões, grain claro, reconciliação. Data vault ou 3NF completa é over-engineering para a maioria dos casos de mídia e web analytics.

▸Como modelar atribuição multi-touch no star schema?

Opções: fato de touchpoint (uma linha por interação na jornada) com dimensões de posição e modelo; ou fato agregada por campanha com colunas de crédito por modelo (first, last, linear). Touchpoint dá flexibilidade; agregada é mais simples de operar. Documente qual modelo alimenta qual dashboard.

▸Dimensão degenerada: quando usar?

Quando um identificador transacional (order_id, session_id, lead_id) precisa estar na fato para drill-through mas não justifica tabela dimensional completa. Útil para investigação operacional; cuidado com cardinalidade no BI — use como filtro, não como eixo de gráfico.

▸Como tratar UTMs ausentes ou ‘(not set)’?

Crie valor explícito na dim_channel/dim_campaign — ‘direct/unknown’, ‘unattributed’ — em vez de NULL. NULL quebra joins e esconde volume significativo. Meça % unattributed como KPI de qualidade de tagueamento, não como buraco no modelo.

▸Fato snapshot ou transactional para CRM?

Transactional para eventos (lead criado, stage changed, deal won). Snapshot para estados periódicos (pipeline em fim de mês). Marketing de performance usa principalmente transactional; forecast e pipeline review precisam de snapshot. Não misture os dois na mesma fato.

▸Quem deve ser dono do modelo dimensional?

Engenharia de dados ou analytics engineering, com input de marketing ops e BI. Marketing define perguntas e definições de negócio; dados implementam grain, joins e testes. Sem dono único, o modelo vira frankenstein de queries ad hoc materializadas.

▸A DataScroll modela star schema para marketing?

Sim — desenhamos fatos, dimensões e grain alinhados às perguntas reais de mídia, CRM e produto, com reconciliação e governança. O objetivo é BI que reflete o negócio, não dashboard bonito em cima de join errado.