Customer Value

Derives average customer value metrics by dividing ARR components by customer counts.

Purpose

Provide a customer-level value view of recurring revenue, translating aggregated ARR metrics into average value per customer for analytical and strategic use.

This model is designed as a derived reporting layer, enabling:

  • Average revenue per customer (ARPC / ARPA) analysis
  • Comparison of customer quality across periods and movements
  • Insight into acquisition vs retention value dynamics

It removes scale effects by normalizing revenue against customer counts.

Business Logic

  • Start from ARR Aggregated
  • Join with Customer Count View
  • Derive ARR base as current_base + upsell − downsell
  • Divide ARR components by their respective customer counts
  • Produce one row per date and value type

Output Contract

Definitions

ColumnDescription
dateDate of the snapshot (YYYY-MM-DD)
value_typeValue type such as actual, budget
current_baseAverage ARR per existing customer
new_customersAverage ARR per newly acquired customer
churnAverage ARR lost per churned customer
total_customer_valueAverage ARR per customer at period end

Sample & Implementation

Average ARR value per customer by date and value type.
datevalue_typecurrent_basenew_customerschurntotal_customer_value
2025-01-01budget60076.0060000.0060000.0060075.12
2025-02-01budget60150.2460075.1260075.1260149.10
2025-03-01budget60223.0760149.1660149.1660221.96
2025-04-01budget60294.8360222.0060222.0060293.75
2025-05-01budget60365.5460293.7560293.7560364.49
2025-06-01budget60435.2360364.4460364.4360434.22
2025-07-01budget60503.9460434.2860434.2760502.98
2025-08-01budget60571.7460503.0460503.0460570.79
2025-09-01budget60638.6160570.8360570.8460637.70
2025-10-01budget60704.6060637.6860637.6860703.71
{{config(materialized='view')}}


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

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

customer_values as (
    select
        date,
        value_type,
        current_base + upsell - downsell as arr_base,
        new_customers,
        churn,
        ending_balance
    from arr_aggregated
)

select
    cv.date,
    cv.value_type,
    cv.arr_base / ccv.current_base as current_base,
    cv.new_customers / ccv.new_customers as new_customers,
    cv.churn / ccv.churn as churn,
    cv.ending_balance / ccv.ending_balance as total_customer_value
from customer_values cv
left join customer_count_view ccv on cv.date = ccv.date and cv.value_type = ccv.value_type

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.