Plain-language questions
Ask for net revenue retention (NRR) 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
Net revenue retention (NRR) is the MRR from a group of existing customers after a period, usually twelve months, divided by their MRR at the start, as a percentage. Expansion counts, as do contraction and cancellations; new customers do not. NRR shows whether your existing customer base grows or shrinks on its own.
(Starting MRR + expansion − contraction − churn) ÷ starting MRR × 100%
Customers active with Acme's subscription service on 1 October 2025 were worth €36,000 MRR at the time. A year later they had added €6,480 in expansion, while €1,080 was lost to contraction and €2,520 to cancellations. Their MRR is now €38,880. NRR is €38,880 ÷ €36,000 × 100% = 108%.
Fictitious figures for Acme Groothandel, a sample wholesaler.
NRR above 100% means your existing customers pay more in total than a year ago, even though some have left. Below 100%, existing revenue shrinks and new sales must make up for it before you grow. Compare NRR by segment and plan, and always next to gross revenue retention to see how much expansion is needed to offset 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 per_customer AS (
SELECT customer_id,
SUM(mrr) FILTER (WHERE started_at <= current_date - interval '1 year'
AND (ended_at IS NULL OR ended_at > current_date - interval '1 year')) AS start_mrr,
SUM(mrr) FILTER (WHERE started_at <= current_date
AND (ended_at IS NULL OR ended_at > current_date)) AS end_mrr
FROM subscriptions
GROUP BY customer_id
)
SELECT SUM(start_mrr) AS start_mrr,
SUM(COALESCE(end_mrr, 0)) AS mrr_same_customers_now,
ROUND(100.0 * SUM(COALESCE(end_mrr, 0)) / NULLIF(SUM(start_mrr), 0), 1) AS nrr_pct
FROM per_customer
WHERE start_mrr > 0;NRR (12 months) % =
VAR StartDate = EDATE(MAX('Date'[Date]), -12)
VAR Window = DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -12, MONTH)
VAR Cohort =
CALCULATETABLE(VALUES(MrrMovements[customer_id]), REMOVEFILTERS('Date'), MrrMovements[month] <= StartDate)
VAR StartMRR = CALCULATE([MRR], DATEADD('Date'[Date], -12, MONTH))
VAR Expansion =
CALCULATE(SUM(MrrMovements[amount]), Window, Cohort, MrrMovements[movement_type] = "expansion")
VAR Lost =
CALCULATE(SUM(MrrMovements[amount]), Window, Cohort, MrrMovements[movement_type] IN {"contraction", "churn"})
RETURN
DIVIDE(StartMRR + Expansion - Lost, StartMRR)In ENABLE
Ask for net revenue retention (NRR) 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
Take the customers who were active at the start of the period and compare their MRR now with their MRR then. Expansion is included, contraction and cancellations are deducted, and new customers are left out. With €100,000 starting MRR and €104,000 now, NRR is 104%.
NRR above 100% means your existing customers generate more revenue in total than at the start of the period. Expansion, such as extra users or a higher plan, outweighs losses from downgrades and cancellations. You then grow even without new customers.
NRR includes expansion from existing customers; GRR (gross revenue retention) does not. GRR can therefore never exceed 100% and shows purely how much revenue you hold on to. The gap between the two is the contribution of expansion.
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.