MRR Aggregated

Consolidated monthly recurring revenue view enriched with revenue change decomposition by driver.

Purpose

Provide a single, analysis-ready MRR table, combining balance-style MRR metrics with flow-based revenue change drivers.

This model is designed as the MRR reporting layer, enabling:

  • MRR bridges and waterfalls
  • Plan vs actual vs forecast comparison
  • Consistent revenue movement analysis across periods

It centralizes MRR logic and removes the need to join multiple revenue tables downstream.

Business Logic

  • Start from MRR View
  • Join with Revenue Changes
  • Map revenue change types to business drivers:
    • New customers
    • Upsell
    • Downsell
    • Churn
  • Produce one row per date and value type

Output Contract

Definitions

ColumnDescription
dateDate of the MRR snapshot (YYYY-MM-DD)
value_typeIndicator such as actual, budget
current_baseMRR from existing customers at period start
new_customersMRR added from new customer acquisition
upsellMRR added from expansions
downsellMRR lost from contractions
churnMRR lost from customer churn
net_new_mrrNet change in MRR over the period
ending_balanceTotal MRR at period end

Sample & Implementation

Monthly recurring revenue metrics decomposed by revenue driver and value type.
datevalue_typecurrent_basenew_customersupselldownsellchurnnet_new_mrrending_balance
2025-01-01budget15000000.00300000.0020000.001000.00125000.00194000.0015194000.00
2025-02-01budget15194000.00300375.6020000.001000.0065081.38254294.0015448294.00
2025-03-01budget15448294.00300745.8020000.001000.0065161.59254584.0015702878.00
2025-04-01budget15702878.00301110.0020000.001000.0065240.50254870.0015957748.00
2025-05-01budget15957748.00301468.8020000.001000.0065318.23255151.0016212898.00
2025-06-01budget16212898.00301822.2020000.001000.0065394.81255427.0016468326.00
2025-07-01budget16468326.00302171.3920000.001000.0070506.659250665.0016718991.00
2025-08-01budget16718991.00302515.2020000.001000.0070586.88250928.0016969919.00
2025-09-01budget16969919.00302854.1920000.001000.0070665.98251188.0017221107.00
2025-10-01budget17221107.00303188.4020000.001000.0070743.96251444.0017472552.00
{{config(materialized='view')}}


with mrr_view as (
    select * from {{ ref('mrr_view') }}
),

changes as (
    select * from {{ref('revenue_changes')}}
),

value_types as (
    select * from {{ref('value_types')}}
    ),

new_customers as (
    select
        date,
        value_type_id,
        total_mrr
    from changes
    where revenue_type_id = 1
),

upsell_customers as (
    select
        date,
        value_type_id,
        total_mrr
    from changes
    where revenue_type_id = 2
),

downsell_customers as (
    select
        date,
        value_type_id,
        total_mrr
    from changes
    where revenue_type_id = 3
),

churn_customers as (
    select
        date,
        value_type_id,
        total_mrr
    from changes
    where revenue_type_id = 4
)

select
    mrr.date,
    vt.name as value_type,
    mrr.current_base,
    nc.total_mrr as new_customers,
    uc.total_mrr as upsell,
    dc.total_mrr as downsell,
    chc.total_mrr as churn,
    mrr.net_new_mrr,
    mrr.ending_balance
from mrr_view mrr
left join new_customers nc on nc.date = mrr.date and nc.value_type_id = mrr.value_type_id
left join upsell_customers uc on uc.date = mrr.date and uc.value_type_id = mrr.value_type_id
left join downsell_customers dc on dc.date = mrr.date and dc.value_type_id = mrr.value_type_id
left join churn_customers chc on chc.date = mrr.date and chc.value_type_id = mrr.value_type_id
left join value_types vt on vt.id = mrr.value_type_id

Dependencies

On this page

Star us on GitHub

If you enjoy this content and find it useful, give us a star on GitHub to show your support and stay updated with our latest improvements.