Plain-language questions
Ask for customer 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
Customer churn rate is the number of customers who cancel in a period, divided by the number of customers at the start of that period, as a percentage. It shows how much of your customer base you lose each month or year. Because every lost customer has to be replaced before you can grow, customer churn rate is one of the most important metrics for a subscription business.
Customers who cancel in the period ÷ customers at the start of the period × 100%
Acme's subscription service starts September with 420 customers. During September, 13 customers cancel. Customer churn rate is 13 ÷ 420 × 100% = 3.1%.
Fictitious figures for Acme Groothandel, a sample wholesaler.
Lower churn means you keep customers longer, which raises customer value and makes growth cheaper. Compare churn by plan, customer segment and cohort; new customers often cancel more than those who have stayed a while. An acceptable level depends on your audience and price point, so compare mainly with your own trend and look at cancellation reasons.
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 months AS (
SELECT generate_series(date_trunc('month', current_date) - interval '12 months',
date_trunc('month', current_date) - interval '1 month', interval '1 month') AS month
),
counts AS (
SELECT m.month,
COUNT(DISTINCT s.customer_id) FILTER (WHERE s.started_at < m.month
AND (s.ended_at IS NULL OR s.ended_at >= m.month)) AS start_customers,
COUNT(DISTINCT s.customer_id) FILTER (WHERE s.started_at < m.month
AND s.ended_at >= m.month AND s.ended_at < m.month + interval '1 month') AS churned
FROM months m CROSS JOIN subscriptions s
GROUP BY m.month
)
SELECT month, start_customers, churned,
ROUND(100.0 * churned / NULLIF(start_customers, 0), 1) AS churn_pct
FROM counts
ORDER BY month;Customer Churn % =
VAR StartDate = MIN('Date'[Date])
VAR StartCustomers =
CALCULATE(
DISTINCTCOUNT(Subscriptions[customer_id]),
Subscriptions[started_at] < StartDate,
ISBLANK(Subscriptions[ended_at]) || Subscriptions[ended_at] >= StartDate,
REMOVEFILTERS('Date')
)
VAR Churned = CALCULATE(DISTINCTCOUNT(MrrMovements[customer_id]), MrrMovements[movement_type] = "churn")
RETURN
DIVIDE(Churned, StartCustomers)In ENABLE
Ask for customer 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
Divide the number of customers who cancel in a period by the number of customers at the start of that period and multiply by 100%. With 500 customers at the start of the month and 15 cancellations, churn is 3%. Do not include customers who joined during the period in the denominator.
Use 1 − (1 − monthly churn) to the power of 12, not monthly churn × 12. At 3% monthly churn, that is 1 − 0.97^12, roughly 30.6% a year. Multiplying by 12 overstates annual churn because each month you are working from a smaller customer base.
Customer churn counts the number of customers who cancel; revenue churn counts the MRR lost as a result. If mostly small customers leave, customer churn is higher than revenue churn, and vice versa. Track both, as they tell different stories.
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.