Metric name: Monthly Churn Rate (MRR-based, cohort-aware)Definition: Percentage of active subscription MRR at start of month that was lost due to cancellations or non-renewals during the month (excluding downgrades where MRR remains ≥0 via plan change). Use calendar month windows.Numerator: Sum of MRR lost during the month attributable to subscriptions that transitioned from Active to Cancelled/Expired within the month. Include:- Recurring MRR portion forfeited (pro-rated for partial-period cancellations — count only remaining unused MRR from cancellation effective date through end of billing period).- Unpaid churn (subscriptions moved to “Cancelled_due_to_nonpayment”) should be included and flagged separately.Denominator: Sum of active recurring MRR at the start of the month (timestamp = 00:00 on first day). Exclude trial MRR and promo credits. Include only subscriptions with status in {Active, Past_Due} at start.Time window: Calendar month (e.g., 2025-06-01 00:00 to 2025-06-30 23:59:59). Compute monthly; can aggregate to quarter/year.Partial-period cancellations: For a subscription cancelled mid-billing-cycle, count lost MRR as the pro-rated amount from cancellation effective date to end of billing period. If refund issued, use net MRR lost (post-refund).Voluntary vs involuntary: Include both in primary churn metric. Maintain separate breakdown fields:- churn_type = {voluntary, involuntary}- reason_code if available.Edge rules:- Exclude churn from cancellations due to company-initiated removals (e.g., fraud) unless business wants included; flag with system_reason.- If subscription is downgraded but remains active, count only MRR delta if plan change reduces recurring MRR — classify as contraction (not churn) and reported in Net MRR Churn separately.Calculation steps (implementation-ready):1. Calculate start_month_mrr = SUM(recurring_mrr) for subscriptions with status in {Active, Past_Due} at month_start.2. For events within month where subscription status transitions to Cancelled/Expired or to Cancelled_due_to_nonpayment, compute lost_mrr_event = remaining_recurring_mrr_for_billing_period_at_event_time (pro-rated). Sum lost_mrr_event -> numerator.3. churn_rate = numerator / start_month_mrr.SQL snippet (illustrative):sql
SELECT
month,
SUM(lost_mrr) / NULLIF(SUM(start_month_mrr),0) AS churn_rate,
SUM(CASE WHEN reason = 'involuntary' THEN lost_mrr ELSE 0 END)/NULLIF(SUM(start_month_mrr),0) AS involuntary_rate
FROM churn_events
WHERE month = '2025-06'
GROUP BY month;
Owner: BI Team responsible for metrics (Primary: BI Analyst, Secondary: Revenue Ops). Maintain spec in metrics catalog; BI to produce monthly table churn_events with fields: month, subscription_id, start_month_mrr, lost_mrr, cancellation_date, churn_type, reason_code, system_reason.