Каноническая формула
Для множества активных recurring contract lines L monthly recurring revenue в момент времени t определяется так:
MRR(t) = Σ for i in L(t) of MonthlyRecurringValue(i)
Для каждой recurring line i:
MonthlyRecurringValue(i) = RecurringContractValue(i) / TermInMonths(i)
Если pricing построен на quantity-based логике, то эквивалентное line-level выражение такое:
MonthlyRecurringValue(i) = UnitPricePerBillingPeriod(i) × Quantity(i) × BillingPeriodsPerMonth(i)
Эти формулы точны только тогда, когда линия действительно recurring и срок контракта нормализован без ошибки.
Определения переменных
- L(t): множество recurring contract или subscription lines, активных в момент
t. - RecurringContractValue(i): полная committed recurring value линии
iза её billing term, без one-time charges и налогов. - TermInMonths(i): точное число месяцев, покрываемых recurring commitment линии
i. - UnitPricePerBillingPeriod(i): recurring unit price за один billing period.
- Quantity(i): billable recurring units, seats, licenses или committed usage blocks.
- BillingPeriodsPerMonth(i): коэффициент перевода billing period линии
iв один месяц.
Правила включения
Линия попадает в MRR тогда и только тогда, когда одновременно выполняются все условия:
- Charge по контракту является recurring.
- Service period активен в момент
t. - Цена относится к ongoing service, а не к one-time событию.
- Contract term можно однозначно нормализовать в месяцы.
В терминах множеств:
L(t) = { i | i is recurring AND i active at t AND i monthly-normalizable }
Правила исключения
В MRR не входят:
- One-time setup и onboarding fees.
- Professional services и implementation work.
- Taxes, VAT и pass-through fees.
- Hardware shipments.
- Non-recurring credits и one-off adjustments.
- Будущие recurring lines, которые ещё не активны в момент
t.
Cash collected in advance тоже не меняет формулу. MRR строится на normalized recurring contract value, а не на cash timing.
Нормализация срока
Нормализация должна следовать точному recurring term:
- Monthly contract:
MonthlyRecurringValue = ContractValue / 1 - Quarterly contract:
MonthlyRecurringValue = ContractValue / 3 - Annual contract:
MonthlyRecurringValue = ContractValue / 12 - Multi-year recurring contract:
MonthlyRecurringValue = ContractValue / TotalMonthsInCommittedTerm
Из этого следует жёсткое правило:
ARR = 12 × MRR
Поэтому если ARR нельзя вывести точно из MRR base, значит политика нормализации MRR противоречива.
Edge cases
- Annual prepayment: полный invoice amount не попадает целиком в один месяц MRR; учитывается только normalized monthly value.
- Mid-period expansion: MRR меняется с effective date recurring amendment, а не просто с даты подписи, если сервис ещё не начался.
- Discounted term: используется фактическая contracted recurring value после recurring discount, а не list price.
- Metered overages: включаются только если они contractually recurring base commitments; чисто variable usage без committed recurring revenue исключается.
- Paused subscription: если service entitlement остановлен и billing inactive, такая линия не входит в
L(t).
Числовой пример
Предположим, у workspace есть три активные recurring lines в момент t:
- Line A: annual subscription, USD 12,000 на 12 месяцев
- Line B: monthly add-on, USD 300 в месяц
- Line C: quarterly seat package, USD 900 за 3 месяца
Тогда:
MonthlyRecurringValue(A) = 12,000 / 12 = 1,000
MonthlyRecurringValue(B) = 300 / 1 = 300
MonthlyRecurringValue(C) = 900 / 3 = 300
MRR(t) = 1,000 + 300 + 300 = 1,600
Если на том же invoice есть one-time implementation fee USD 2,500, его вклад в MRR равен 0.
Строгий вывод
MRR — это не “cash collected this month” и не “invoice value this month”. Это точная сумма всех active recurring lines после monthly normalization их recurring committed value.
Если charge не recurring, не active или не monthly-normalizable, ему не место в формуле.
Связанные материалы
Базовые страницы: