(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como calcular churn mensal em DAX: passo a passo

João Barros 23 de July de 2026 3 min de leitura

Este tutorial mostra como calcular o churn mensal em DAX para saber quantos clientes se perderam entre meses e qual a taxa de churn. Calcular o churn mensal em DAX é útil para produto, marketing e reporting porque ajuda a medir retenção e a identificar problemas atempadamente.

Pré-requisitos

  • Power BI Desktop (ou outro motor com suporte a DAX).
  • Tabela Transactions com pelo menos as colunas Transactions[CustomerID] e Transactions[Date].
  • Tabela Date (calendar) ligada a Transactions[Date] e marcada como Date table.
  • Conhecimentos básicos de DAX e de visualizações (matriz/gráfico de linhas).

Passo 1: Criar e marcar a tabela de datas

O cálculo temporal precisa de uma tabela de datas contínua e marcada como Date table. Sem ela, PREVIOUSMONTH e outras funções de Time Intelligence não funcionam correctamente.

Date =
VAR MinD = MIN( Transactions[Date] )
VAR MaxD = MAX( Transactions[Date] )
RETURN
ADDCOLUMNS(
  CALENDAR( MinD, MaxD ),
  "Year", YEAR([Date]),
  "MonthNumber", MONTH([Date])
)

Passo 2: Medida de clientes activos (por período)

Comece por uma medida que conte clientes activos no contexto de filtro (por exemplo, por mês na linha da matriz).

Clientes Activos = DISTINCTCOUNT( Transactions[CustomerID] )

Passo 3: Clientes no mês anterior

Use PREVIOUSMONTH para obter o número de clientes no mês anterior ao contexto actual. Esta medida serve de denominador quando calcular a taxa de churn.

Clientes Mês Anterior =
CALCULATE(
  [Clientes Activos],
  PREVIOUSMONTH( 'Date'[Date] )
)

Passo 4: Calcular clientes perdidos (churn) em DAX

Aqui usamos conjuntos de customer IDs: clientes do mês anterior menos clientes do mês actual. EXCEPT devolve os IDs que saíram do conjunto actual.

Clientes Perdidos =
VAR PrevCustomers =
  CALCULATETABLE( VALUES( Transactions[CustomerID] ), PREVIOUSMONTH('Date'[Date]) )
VAR CurrCustomers =
  VALUES( Transactions[CustomerID] )
RETURN
  COUNTROWS( EXCEPT( PrevCustomers, CurrCustomers ) )

Passo 5: Medida da taxa de churn mensal

Calcule a taxa dividindo os clientes perdidos pelo total de clientes no mês anterior. Use DIVIDE para evitar divisão por zero.

Taxa Churn Mensal =
VAR Perdidos = [Clientes Perdidos]
VAR PrevAtivos = [Clientes Mês Anterior]
RETURN
  DIVIDE( Perdidos, PrevAtivos )

Passo 6: Boas práticas e erros comuns

Principais pontos a verificar:

  • Marque a tabela Date como Date table (Modeling > Mark as date table). Sem isso, PREVIOUSMONTH pode falhar.
  • PREVIOUSMONTH funciona quando o contexto temporal é mensal; num relatório com granularidade diária ajuste a lógica (ex.: DATEADD com -30 dias não é o mesmo que mês anterior).
  • COUNTROWS(EXCEPT(...)) pode ser dispendioso em modelos com muitos clientes. Se detetar problemas de performance, considere pré-calcular flags (ETL) ou usar agregações.
  • O primeiro mês do período não tem mês anterior — DIVIDE garante que não apareçam erros por divisão por zero.

Verificar o resultado

Crie um visual Matrix com 'Date'[Year] e um campo de mês (ou 'Date'[Date] formatado por mês) nas linhas, e as medidas Clientes Mês Anterior, Clientes Perdidos e Taxa Churn Mensal nas colunas. Verifique:

  • Clientes Perdidos nunca excede Clientes Mês Anterior.
  • Taxa Churn Mensal = Clientes Perdidos / Clientes Mês Anterior (verifique alguns meses com cálculo manual).
  • Valores nulos no primeiro mês (sem mês anterior) devem aparecer como em branco ou 0, dependendo da formatação.

Conclusão

Com estas medidas tem um churn mensal em DAX fiável para monitorizar retenção. Próximos passos: segmentar churn por produto, calcular churn por cohorts ou criar médias móveis para suavizar ruído. Dica: quer ver churn por cohort (mês de aquisição) — prefere que eu mostre esse exemplo?