Schema Theory

← Back to KPIs & Dashboards

Revenue Churn Rate

Description

Revenue Churn Rate measures the percentage of recurring revenue lost due to subscription cancellations or downgrades within a given time period. Unlike customer churn, it reflects the financial impact of churned customers.

Visual Example

Revenue Churn Rate Visual

DAX Formula

Revenue Churn (Gross) = 
VAR MonthStart = STARTOFMONTH('Date'[Date])
VAR MonthEnd = ENDOFMONTH('Date'[Date])
VAR MRR_Start = 
    CALCULATE(
        SUM(Subscriptions[MonthlyFee]),
        FILTER(
            Subscriptions,
            Subscriptions[StartDate] <= MonthStart &&
            (ISBLANK(Subscriptions[EndDate]) || Subscriptions[EndDate] > MonthStart)
        )
    )
VAR MRR_Lost = 
    CALCULATE(
        SUM(Subscriptions[MonthlyFee]),
        FILTER(
            Subscriptions,
            Subscriptions[EndDate] >= MonthStart &&
            Subscriptions[EndDate] <= MonthEnd
        )
    )
RETURN
DIVIDE(MRR_Lost, MRR_Start)

SQL Example

WITH monthly_mrr AS (
  SELECT
    DATE_TRUNC('month', d)::DATE AS period_start,
    SUM(s.MonthlyFee) AS MRR_Start
  FROM Date d
  JOIN Subscriptions s ON s.StartDate <= d AND (s.EndDate IS NULL OR s.EndDate > d)
  WHERE d = DATE_TRUNC('month', d)
  GROUP BY 1
),
lost_mrr AS (
  SELECT
    DATE_TRUNC('month', EndDate)::DATE AS period_start,
    SUM(MonthlyFee) AS MRR_Lost
  FROM Subscriptions
  WHERE EndDate IS NOT NULL
  GROUP BY 1
)
SELECT
  m.period_start,
  m.MRR_Start,
  l.MRR_Lost,
  CASE 
    WHEN m.MRR_Start = 0 THEN NULL
    ELSE (l.MRR_Lost / m.MRR_Start)
  END AS RevenueChurnRate
FROM monthly_mrr m
LEFT JOIN lost_mrr l ON m.period_start = l.period_start
ORDER BY m.period_start;

Usage Notes

Downloads