Plain-language questions
Ask for revenue churn rate per month, customer or product in the SQL Explorer with AI. The AI writes the SQL, you see the query and run it yourself; the AI only receives metadata.
KPI · Subscriptions and SaaS
Revenue churn rate is the MRR lost in a period through cancellations and downgrades, divided by MRR at the start of that period, as a percentage. Where customer churn counts customers, revenue churn rate measures what those leaving or shrinking customers were worth. Subtracting expansion revenue gives net revenue churn.
(Churned MRR + contraction MRR) ÷ MRR at the start of the period × 100%
Acme's subscription service starts September with €40,000 MRR. Cancellations remove €1,400 and downgrades €400. Revenue churn rate is (€1,400 + €400) ÷ €40,000 × 100% = 4.5%. Adding €900 of expansion, net revenue churn is (€1,800 − €900) ÷ €40,000 × 100% = 2.25%.
Fictitious figures for Acme Groothandel, a sample wholesaler.
Lower revenue churn means you keep more of your existing recurring revenue. Compare it with customer churn: if revenue churn is much higher, it is mainly larger customers leaving, which needs attention. Net revenue churn below zero means expansion within existing accounts more than makes up for the losses.
SQL & DAX
Two examples on a fictitious data warehouse for Acme Groothandel: a PostgreSQL query and a measure for a Power BI model. Adjust table and column names to your own model.
WITH monthly AS (
SELECT month,
SUM(amount) FILTER (WHERE movement_type IN ('churn', 'contraction')) AS lost_mrr,
SUM(CASE WHEN movement_type IN ('churn', 'contraction') THEN -amount ELSE amount END) AS net_new_mrr
FROM mrr_movements
GROUP BY month
),
with_start AS (
SELECT month, lost_mrr,
SUM(net_new_mrr) OVER (ORDER BY month) - net_new_mrr AS start_mrr
FROM monthly
)
SELECT month, start_mrr, lost_mrr,
ROUND(100.0 * lost_mrr / NULLIF(start_mrr, 0), 1) AS revenue_churn_pct
FROM with_start
ORDER BY month;Revenue Churn % =
VAR StartMRR = CALCULATE([MRR], DATEADD('Date'[Date], -1, MONTH))
VAR LostMRR =
CALCULATE(SUM(MrrMovements[amount]), MrrMovements[movement_type] IN {"churn", "contraction"})
RETURN
DIVIDE(LostMRR, StartMRR)In ENABLE
Ask for revenue churn rate per month, customer or product in the SQL Explorer with AI. The AI writes the SQL, you see the query and run it yourself; the AI only receives metadata.
Define the KPI as a measure in your Power BI model and show it in the portal, with "Last refreshed" next to it. Access profiles and optional row-level security decide who sees which figures.
Add the KPI as a tile to a custom dashboard, compared with last year. The Dashboard Builder is a pilot and can be switched on per client.
With the built-in Targets app you set a target for the KPI per month, so you see actuals and target side by side.
FAQ
Add up the MRR lost to cancellations and downgrades and divide by MRR at the start of the period. With €50,000 starting MRR and €1,500 lost, revenue churn is 3%. State whether contraction is included.
Gross revenue churn counts only MRR lost through cancellations and downgrades. Net revenue churn subtracts expansion revenue from existing customers. Net revenue churn can be negative when existing customers expand by more than is lost.
Negative churn means expansion revenue from existing customers is greater than the revenue lost to cancellations and downgrades. Recurring revenue from your existing base then grows even without new customers. It is the same as net revenue retention above 100%.
In an online demo we show how ENABLE makes your data securely available and how you build on it: describing an app in the AI Builder, plain-language questions, dashboards and APIs. And how we set it up and manage it for you.