首页/数据/数仓建模速查/案例:SaaS 订阅与用量建模
建模基础69 条

案例:SaaS 订阅与用量建模

SaaS 域:订阅周期快照(MRR 来源)+ 用量事实(计量)+ 变更事件;账户与计划为共享维度,续费与流失在指标层定义。

数仓建模速查数据更新于 2026-10-13

SaaS 域三块拼图

SaaS 域由三部分拼成:订阅周期快照提供 MRR 来源,用量事实按计量点记录消耗,变更事件表记录升级、降级、退订。账户与套餐是共享维度,续费与流失在指标层定义。用量数据的难点在计量口径统一:同一计量点在不同套餐里单位可能不同,去重规则与重试次数也要写进指标定义,否则跨计量点相加得到的数字没有业务含义。

基本信息

快照订阅 × 计费周期
用量事实计量点 × 时间,多行
事件升级、降级、退订、暂停
维度账户、套餐、计量点、销售渠道
指标MRR、NRR、流失率、用量超限率

典型使用场景

  • 计算 MRR 与净收入留存率,跟踪经常性收入变化
  • 用量超限提醒与超额计费,需要计量点级明细支撑
  • 套餐升级降级分析,评估对收入结构的影响
  • 试用转化分析:试用期激活行为与付费转化的关系
  • 与财务收入确认比对,解释 MRR 与确认收入的差异
  • 用量峰谷分析:识别资源紧张时段,指导容量规划
  • 计量点字典维护:新增计量点需同步登记单位与归属套餐

用量事实

用量事实
-- 用量事实:计量点级粒度,单位由维度统一
CREATE TABLE fact_usage (
  usage_id    string,
  account_sk  bigint,
  metric_code string    COMMENT '计量点编码',
  qty         decimal(18,4),
  usage_ts    timestamp
) PARTITIONED BY (dt string) STORED AS ORC;

-- 计量口径写进指标定义,不可跨计量点直接相加
SELECT account_sk, metric_code, sum(qty) AS qty
FROM fact_usage WHERE dt = '2026-10-12'
GROUP BY account_sk, metric_code;

建模对象对照

建模对象粒度要点
订阅周期快照订阅 × 计费周期MRR 的唯一来源
用量事实计量点 × 时间跨计量点不可直接汇总
变更事件一次变更一行解释 MRR 变动的构成
账户与套餐维账户级套餐版本变更需做对照
用量数据的去重与重试处理要统一:客户端重试上报会造成重复计量,不做去重,用量与账单之间就会出现系统性偏差。
试用账户与付费账户要分开统计:把试用期用量计入付费指标,会让用量与收入的关系失真,转化分析也失去参考价值。

易错点

  • 不同计量点单位不同,直接汇总得到没有意义的数字
  • 订阅快照缺失造成的 MRR 断点无人发现
  • 客户端重试未去重,用量与账单长期偏差
  • 试用与付费账户混算,转化与用量指标同时失真

数据来源与参考

  • SaaS 数仓实践:订阅与用量模型
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌