Plain-language questions
Ask for monthly recurring revenue (MRR) 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
Monthly recurring revenue (MRR) is the sum of all recurring monthly subscription amounts from active customers. Annual contracts are converted to a monthly figure by dividing by 12; one-off charges such as onboarding fees are left out. MRR is the starting point for almost every other SaaS metric, including growth, churn and retention.
Sum of monthly subscription amounts across all active customers (annual contracts ÷ 12)
At the end of August, Acme's subscription service has 380 customers on monthly plans worth €30,400 a month in total. It also has 40 annual contracts worth €115,200 a year, or €115,200 ÷ 12 = €9,600 a month. MRR is €30,400 + €9,600 = €40,000.
Fictitious figures for Acme Groothandel, a sample wholesaler.
Rising MRR means your recurring revenue is growing; to understand why, split the change into new, expansion, contraction and churned MRR. Compare MRR month on month and against plan, and look at how it is spread across plans. MRR is not accounting revenue: it is a snapshot of what recurs every month if nothing changes.
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 '11 months',
date_trunc('month', current_date), interval '1 month') AS month
)
SELECT m.month,
COUNT(DISTINCT s.customer_id) AS customers,
SUM(s.mrr) AS mrr
FROM months m
JOIN subscriptions s
ON s.started_at < m.month + interval '1 month'
AND (s.ended_at IS NULL OR s.ended_at >= m.month + interval '1 month')
GROUP BY m.month
ORDER BY m.month;MRR =
VAR PeriodEnd = MAX('Date'[Date])
RETURN
CALCULATE(
SUM(Subscriptions[mrr]),
Subscriptions[started_at] <= PeriodEnd,
ISBLANK(Subscriptions[ended_at]) || Subscriptions[ended_at] > PeriodEnd,
REMOVEFILTERS('Date')
)
MRR Share by Plan =
DIVIDE([MRR], CALCULATE([MRR], REMOVEFILTERS(Subscriptions[plan])))In ENABLE
Ask for monthly recurring revenue (MRR) 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 monthly subscription amounts of all active customers. Divide annual contracts by 12 and quarterly contracts by 3, and leave out one-off charges. With 100 customers paying €50 and 10 annual contracts of €1,200, MRR is €5,000 + €1,000 = €6,000.
No, MRR measures recurring subscription revenue, not accounting revenue. Your accounts also include one-off revenue and spread revenue over the contract term according to accounting rules. MRR shows what comes in structurally every month.
Yes, use the amount the customer actually pays, so after any ongoing discount. For a temporary introductory discount, choose one approach and record it, because otherwise MRR jumps when the discount ends without anything changing for the customer.
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.