Todos os estudos de caso

Marketing e Growth

Funil completo: da mídia paga ao LTV do cliente

Contexto

E-commerce de moda com investimento mensal de R$ 1,2 milhão em mídia distribuído em cinco canais. Cada plataforma reportava suas próprias conversões, e a soma das conversões declaradas era 2,3 vezes maior que o número real de pedidos. O objetivo é uma fonte única baseada no pedido real, com atribuição consistente, CAC por canal e LTV por coorte.

Perguntas que o painel deve responder

  • Qual canal traz clientes que continuam comprando, e não apenas o primeiro pedido?
  • Onde o funil perde mais gente: tráfego, produto, carrinho ou pagamento?
  • Qual o CAC real por canal, considerando o pedido efetivado e não a conversão declarada?
  • Quanto uma coorte de clientes gera em 3, 6 e 12 meses?
  • Que campanhas estão queimando verba sem gerar cliente novo?

Indicadores e metas

IndicadorMetaPor que importa
ROAS (Retorno sobre Investimento em Mídia)≥ 4,5xEficiência imediata da mídia paga
CAC (Custo de Aquisição)≤ R$ 78Quanto custa trazer um cliente novo, não um pedido
LTV≥ R$ 320Sem LTV, o CAC não tem referência de julgamento
Razão LTV/CAC≥ 3,0Abaixo de 3, o crescimento consome caixa
Taxa de Conversão do Funil≥ 2,4%Aponta onde o visitante desiste
Ticket MédioR$ 264Alavanca mais barata de crescimento de receita
Taxa de Recompra 90d≥ 28%Retenção é o que separa negócio sustentável de queima de caixa
Participação de Receita Orgânica≥ 35%Dependência de mídia paga é risco estratégico

Modelo de dados

A regra de ouro do marketing analytics: a fonte da verdade é o pedido do seu sistema, nunca a conversão declarada pela plataforma de mídia. As plataformas entram no modelo apenas como custo e como origem atribuída.

TabelaOrigemGranularidade
fPedidosE-commerce (fonte da verdade)Pedido, com UTM de origem
fInvestimentoAPIs das plataformasDia × Campanha × Canal
fSessoesAnalyticsDia × Canal × Dispositivo
fFunilAnalytics (eventos)Dia × Etapa × Canal
dClienteE-commerceCliente, com data da primeira compra
dCampanhaPlataformasCampanha, canal, público, criativo
dCalendarioGeradaDia
Linguagem MNormalizando UTM no Power Query
let    Origem = Sql.Database("servidor", "ecommerce"),    Pedidos = Origem{[Schema="dbo", Item="Pedidos"]}[Data],    // UTMs chegam sujos: maiúsculas, espaços, variações de nome    LimpaSource = Table.TransformColumns(Pedidos, {{"utm_source", each Text.Lower(Text.Trim(_ ?? "direto")), type text}}),    LimpaMedium = Table.TransformColumns(LimpaSource, {{"utm_medium", each Text.Lower(Text.Trim(_ ?? "none")), type text}}),    // Agrupa variações conhecidas em um canal padronizado    Canal = Table.AddColumn(LimpaMedium, "Canal", each        if List.Contains({"google","googleads","adwords"}, [utm_source]) and [utm_medium] = "cpc" then "Google Ads"        else if List.Contains({"facebook","instagram","meta","fb","ig"}, [utm_source]) then "Meta Ads"        else if [utm_medium] = "email" then "E-mail"        else if [utm_medium] = "organic" then "Orgânico"        else if [utm_source] = "direto" then "Direto"        else "Outros", type text)in    Canal

Medidas DAX

Investimento, ROAS e CPA

DAX
Investimento = SUM( fInvestimento[Custo] ) Receita = SUM( fPedidos[ValorTotal] ) ROAS = DIVIDE( [Receita], [Investimento] ) CPA = DIVIDE( [Investimento], [Qtd Pedidos] ) Margem de Contribuição após Mídia =[Receita] * [Margem Bruta %] - [Investimento]

ROAS ignora a margem. Um ROAS de 4x em um produto de 20% de margem destrói valor. A última medida é a que realmente importa.

CAC real (cliente novo, não pedido)

DAX
Clientes Novos =CALCULATE(    DISTINCTCOUNT( fPedidos[IdCliente] ),    FILTER(        fPedidos,        fPedidos[DataPedido] = RELATED( dCliente[DataPrimeiraCompra] )    )) CAC = DIVIDE( [Investimento], [Clientes Novos] ) Participação de Clientes Novos % =DIVIDE( [Clientes Novos], DISTINCTCOUNT( fPedidos[IdCliente] ) )

A diferença entre CPA e CAC é a mais cara de ignorar: você pode estar pagando caro para trazer de volta quem já compraria de qualquer jeito.

LTV por coorte

DAX
Coorte = FORMAT( MAX( dCliente[DataPrimeiraCompra] ), "yyyy-mm" ) Receita Acumulada da Coorte =VAR MesesDesdePrimeira = SELECTEDVALUE( dMesesDesde[Meses] )RETURNCALCULATE(    [Receita],    FILTER(        fPedidos,        DATEDIFF( RELATED( dCliente[DataPrimeiraCompra] ), fPedidos[DataPedido], MONTH ) <= MesesDesdePrimeira    )) LTV por Cliente =DIVIDE( [Receita Acumulada da Coorte], [Clientes da Coorte] ) Razão LTV/CAC = DIVIDE( [LTV por Cliente], [CAC] ) LTV Preditivo =-- Modelo simples e defensável: frequência x ticket x margem x horizonteVAR ComprasPorAno = DIVIDE( [Qtd Pedidos], [Clientes Ativos] ) * 12 / [Meses do Período]VAR Ticket = [Ticket Médio]VAR MargemPct = [Margem Bruta %]VAR VidaMediaAnos = 2.5RETURN ComprasPorAno * Ticket * MargemPct * VidaMediaAnos

A matriz de coorte (linhas = mês de aquisição, colunas = meses desde a primeira compra) é o visual mais valioso de marketing: revela se a qualidade do cliente adquirido está melhorando ou piorando.

Funil e taxas de conversão

DAX
Sessões       = SUM( fSessoes[Sessoes] )Visualizações = CALCULATE( SUM( fFunil[Eventos] ), fFunil[Etapa] = "Produto" )Carrinhos     = CALCULATE( SUM( fFunil[Eventos] ), fFunil[Etapa] = "Carrinho" )Checkouts     = CALCULATE( SUM( fFunil[Eventos] ), fFunil[Etapa] = "Checkout" ) Conversão Geral % = DIVIDE( [Qtd Pedidos], [Sessões] )Conv. Sessão→Produto %   = DIVIDE( [Visualizações], [Sessões] )Conv. Produto→Carrinho % = DIVIDE( [Carrinhos], [Visualizações] )Conv. Carrinho→Checkout %= DIVIDE( [Checkouts], [Carrinhos] )Conv. Checkout→Pedido %  = DIVIDE( [Qtd Pedidos], [Checkouts] ) Maior Gargalo do Funil =VAR Etapas =    DATATABLE( "Etapa", STRING, "Ordem", INTEGER, { { "Sessão→Produto", 1 }, { "Produto→Carrinho", 2 }, { "Carrinho→Checkout", 3 }, { "Checkout→Pedido", 4 } } )VAR ComTaxa =    ADDCOLUMNS( Etapas, "@Taxa",        SWITCH( [Ordem],            1, [Conv. Sessão→Produto %],            2, [Conv. Produto→Carrinho %],            3, [Conv. Carrinho→Checkout %],            4, [Conv. Checkout→Pedido %] ) )RETURNCONCATENATEX( TOPN( 1, ComTaxa, [@Taxa], ASC ), [Etapa] )

Abandono de checkout acima de 30% quase sempre é frete, prazo ou meio de pagamento — não é problema de mídia.

Atribuição multicanal

DAX
Receita Last Click =CALCULATE( [Receita], USERELATIONSHIP( fPedidos[CanalUltimoClique], dCampanha[Canal] ) ) Receita First Click =CALCULATE( [Receita], USERELATIONSHIP( fPedidos[CanalPrimeiroClique], dCampanha[Canal] ) ) Diferença de Atribuição % =DIVIDE( [Receita Last Click] - [Receita First Click], [Receita First Click] )

Canais de descoberta (social, display) brilham em first click; canais de captura (busca de marca, e-mail) brilham em last click. Mostrar os dois lado a lado encerra a disputa interna por orçamento.

Recompra e retenção

DAX
Taxa de Recompra d =VAR ClientesBase =    CALCULATE( VALUES( fPedidos[IdCliente] ), DATESINPERIOD( dCalendario[Date], TODAY() - 90, -90, DAY ) )VAR Recompraram =    CALCULATE(        DISTINCTCOUNT( fPedidos[IdCliente] ),        DATESINPERIOD( dCalendario[Date], TODAY(), -90, DAY ),        ClientesBase    )RETURN DIVIDE( Recompraram, COUNTROWS( ClientesBase ) )

Recompra é o indicador que a mídia paga não consegue comprar. É a prova de que o produto e a experiência funcionam.

Layout do painel

  1. 1Página 1 — Visão de Growth: cartões de Receita, Investimento, ROAS, CAC, LTV/CAC e Clientes Novos; linha de receita e investimento em eixo duplo justificado (ambos em reais); barras de ROAS por canal ordenadas.
  2. 2Página 2 — Funil: visual de funil com as 5 etapas e taxas entre elas; comparação de funil por dispositivo (mobile x desktop, quase sempre reveladora); caixa de texto com a medida Maior Gargalo do Funil.
  3. 3Página 3 — Coortes: matriz de coorte com cor de fundo por medida (mapa de calor de retenção); curva de LTV acumulado por coorte em linhas sobrepostas; LTV/CAC por canal de aquisição.
  4. 4Página 4 — Campanhas: tabela detalhada com investimento, pedidos, CAC, ROAS e margem após mídia, ordenada por margem; destaque em vermelho para campanhas com margem negativa.
  5. 5Página 5 — Atribuição: comparação first click x last click por canal, em barras opostas.
  6. 6Rodapé em todas as páginas: 'Fonte da verdade: pedidos do e-commerce. Conversões declaradas pelas plataformas não são somadas.'

Desafio final

Monte a matriz de coorte com mapa de calor de retenção e responda: a qualidade dos clientes adquiridos nos últimos 6 meses está melhor ou pior que a do ano anterior? Depois calcule o LTV/CAC por canal e defina para qual canal você realocaria 20% do orçamento.