Como calcular taxa de retenção cohortal em DAX: passo a passo
Este tutorial mostra como calcular a taxa de retenção por cohort em DAX: ou seja, agrupar utilizadores pela sua primeira interação (cohort) e medir quantos desses utilizadores voltam nos meses seguintes. A análise cohortal é útil para entender retenção, eficácia de onboarding e impacto de mudanças no produto.
Pré-requisitos
- Power BI Desktop (ou outro ambiente que suporte DAX).
- Uma tabela de eventos com colunas: UserID, EventDate (datetime) e EventType (opcional).
- Tabela de datas (date table) marcada como Date e relações entre Date[Date] e Event[EventDate].
Passo 1: Criar a coluna de First Purchase Month (cohort)
Precisamos identificar o mês da primeira interação de cada utilizador — essa será a sua cohort. Vamos criar uma coluna calculada na tabela de utilizadores ou na tabela de eventos (agrupar por UserID). Aqui usamos a tabela Event.
FirstEventMonth =
VAR FirstDate =
CALCULATE(
MIN(Event[EventDate]),
ALLEXCEPT(Event, Event[UserID])
)
RETURN
STARTOFMONTH(FirstDate)
Explicação: CALCULATE + MIN encontra a primeira data por UserID; ALLEXCEPT garante que o contexto é apenas o utilizador. STARTOFMONTH normaliza para o primeiro dia do mês, facilitando agrupamentos mensais.
Passo 2: Criar coluna MonthOfEvent para comparação temporal
Precisamos também de uma coluna com o mês do próprio evento para comparar meses decorridos desde a cohort.
EventMonth = STARTOFMONTH(Event[EventDate])
Esta coluna é simples e normaliza cada evento ao início do mês correspondente.
Passo 3: Calcular months since cohort (meses desde a cohort)
Agora calculamos quantos meses separam EventMonth e FirstEventMonth para pivotar a retenção por mês (M0, M1, M2...).
MonthsSinceCohort =
DATEDIFF(Event[FirstEventMonth], Event[EventMonth], MONTH)
DATEDIFF em MONTH devolve 0 para o mês da cohort, 1 para o mês seguinte, etc.
Passo 4: Criar a medida de utilizadores únicos por cohort e mês
Queremos contar quantos utilizadores únicos, por combinação de FirstEventMonth e MonthsSinceCohort, tiveram pelo menos um evento. Criamos uma medida para isso.
Users by Cohort =
CALCULATE(
DISTINCTCOUNT(Event[UserID]),
VALUES(Event[FirstEventMonth]),
VALUES(Event[MonthsSinceCohort])
)
VALUES garante que a contagem respeita o filtro das colunas de cohort e meses no visual (tabela ou matrix).
Passo 5: Criar a medida de cohort size (tamanho da cohort)
Para obter a taxa de retenção dividimos pelo número de utilizadores da cohort no mês zero (M0). Criamos uma medida que calcula o tamanho da cohort (utilizadores no M0) para cada FirstEventMonth.
Cohort Size =
VAR CohortMonth = SELECTEDVALUE(Event[FirstEventMonth])
RETURN
CALCULATE(
DISTINCTCOUNT(Event[UserID]),
Event[FirstEventMonth] = CohortMonth,
Event[MonthsSinceCohort] = 0
)
SELECTEDVALUE obtém a cohort do contexto actual. O filtro MonthsSinceCohort = 0 isola apenas os utilizadores no mês inicial.
Passo 6: Medida de taxa de retenção (retention rate)
Finalmente, calculamos a percentagem que retornou no mês N dividindo Users by Cohort pela Cohort Size. Usamos DIVIDE para evitar divisões por zero.
Retention Rate =
DIVIDE(
[Users by Cohort],
[Cohort Size],
0
)
Esta medida retorna valores entre 0 e 1; multiplica por 100 no visual se quiseres percentagem.
Verificar o resultado
Cria uma Matrix em Power BI com as linhas a serem Event[FirstEventMonth] (cohort), as colunas Event[MonthsSinceCohort] (ordenadas 0,1,2...) e valores a serem [Retention Rate] (formatar como percentagem) e [Cohort Size] como referência. Verifica se:
- Na coluna MonthsSinceCohort = 0, Retention Rate é 100% (ou 1) pois cohort size divide por si mesma.
- Os números decrescem gradualmente para meses posteriores, salvo picos justificados.
- Se veres diferenças inesperadas, confere se as colunas FirstEventMonth e EventMonth estão correctas e se a tabela de datas está relacionada correctamente.
Conclusão
Com estas medidas tens uma base para análises cohortais em DAX: identificar cohorts, medir retenção mês a mês e comparar coortes ao longo do tempo. Próximos passos incluem ajustar para retenção por semana, segmentar por canal ou EventType, e criar heatmaps para visualização. Dica: usa filtros de data e segmentações para validar cenários e confirma sempre se o primeiro evento está correctamente calculado — esse erro é muito comum.