Como calcular churn mensal em DAX: passo a passo
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?