Consumption Net Revenue Retention: The consumption revenue of the customers active at period start, over a twelve-month period, divided by the same customers' consumption revenue over the twelve months before. Consumption Net Revenue Retention (Consumption NRR) reads year two over year one, Snowflake's basis.
Formula
Consumption NRR = Consumption Revenue of the period-start cohort in the twelve-month period / Consumption Revenue of the same cohort in the prior twelve months × 100 Computable definition
The canonical formula in the GASP formula grammar. The MCP server compiles it to SQL over the datasets listed below.
metric.consumption_revenue / lag(metric.consumption_revenue, 12 month) over cohort(field.customer_id, period_start) Unit: percent (the formula yields an unscaled ratio)
Notes: The cohort's consumption revenue over the period divided by the same cohort's consumption revenue in the twelve months before, on a twelve-month period: year two over year one, Snowflake's basis. A customer in the cohort that consumed nothing in the period counts at zero. A second basis beside NRR, which reads MRR movements; a company reporting this figure names it as such rather than as NRR.
Data requirements
Grain: Customer cohort at period start · Frequency: Monthly · Aggregation: cohort (trailing 12 months) · Staged: yes, a cohort or prior-period comparison that a staged dataset makes cheaper · Main source: Billing.
| Field | Dataset | Type |
|---|---|---|
credit_amount | credit_event | decimal |
credit_event_type | credit_event | string |
customer_id | credit_event | string |
customer_id | customer | string |
customer_status | customer | string |
event_date | credit_event | date |
snapshot_date | customer | date |
Example SQL (Postgres)
SELECT (CAST(((-(SELECT COALESCE(SUM(credit_amount), 0) FROM credit_event WHERE event_date >= :period_start AND event_date <= :period_end AND credit_event_type = 'consumption' AND customer_id IN (SELECT customer_id FROM customer WHERE snapshot_date = :period_start AND customer_status = 'active')))) AS DOUBLE PRECISION) / NULLIF(((-(SELECT COALESCE(SUM(credit_amount), 0) FROM credit_event WHERE event_date >= (:period_start - INTERVAL '12 month') AND event_date <= (((:period_end + INTERVAL '1 day') - INTERVAL '12 month') - INTERVAL '1 day') AND credit_event_type = 'consumption' AND customer_id IN (SELECT customer_id FROM customer WHERE snapshot_date = :period_start AND customer_status = 'active')))), 0)) AS consumption_net_revenue_retention From an agent: with the GASP MCP server, call
lookup_metric({ "name": "Consumption Net Revenue Retention" }) or generate_query({ "metric": "Consumption Net Revenue Retention", "adapter": "<your adapter JSON>" }).
What It Tells You
Whether the customers you had a year ago consume more or less today, including the pay-as-you-go customers whom NRR leaves outside its cohort.
Common Mistakes
- Reporting Consumption NRR as NRR
- Including customers acquired during the period
- Measuring over a period shorter than twelve months, where seasonal consumption distorts the ratio