EnableYourData.com

KPI · Subscriptions and SaaS

Monthly recurring revenue (MRR): formula and example.

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.

Monthly recurring revenue (MRR) formula

Sum of monthly subscription amounts across all active customers (annual contracts ÷ 12)

Worked example

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.

How to read this KPI

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.

Pitfalls with monthly recurring revenue (MRR)

  • Including one-off amounts such as set-up or consultancy fees in MRR.
  • Counting an annual contract in full in the month it is invoiced instead of dividing by 12.
  • Counting customers on a free trial or a temporary discount at the full price.

SQL & DAX

Calculating monthly recurring revenue (MRR) in SQL and 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.

SQL · PostgreSQL
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;
DAX · Power BI
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

Tracking this KPI in ENABLE

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.

Read more →

In your Power BI dashboard

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.

Read more →

Custom dashboards (pilot)

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.

Read more →

Monthly targets

With the built-in Targets app you set a target for the KPI per month, so you see actuals and target side by side.

Read more →

FAQ

Frequently asked questions

How do you calculate MRR?

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.

Is MRR the same as revenue?

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.

Should discounts be included in MRR?

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.

Use AI on your own data. Securely, and without the headache.

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.