You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DAX计算订阅服务的月度经常性收入(MRR)

如何使用DAX计算订阅服务的月度经常性收入(MRR)

嘿,我完全懂你的困扰——之前用的CALCULATE(SUM(CRMTable[Revenue]), CRMTable[Contract] <> "0")只是把所有符合条件的收入一次性加总,根本没考虑合同的生效周期,自然没法得到分月的MRR。别着急,我们针对你给出的示例场景,写一个精准的DAX度量值就能解决问题。

首先先明确你的业务逻辑:每笔标记为X(Contract≠"0")的合同,会从ContractDate所在月份开始,到ContractEnd所在月份的前一个月结束,每个月贡献等额的Revenue(也就是你的示例里每个合同每月带来1000元)。我们需要把每个合同的贡献分摊到它生效的每个月份,再汇总出当月的总MRR。

假设你已经有了关联好的日历表(命名为Calendar),里面包含Date(日期字段,用来关联CRM表的日期)和YearMonth(格式如"01/2023",用来展示月份),那可以用下面的DAX度量值:

MRR = 
SUMX(
    // 先过滤出所有符合条件的合同(Contract不等于"0")
    FILTER(CRMTable, CRMTable[Contract] <> "0"),
    // 定义合同的生效起始月份(取ContractDate所在月的第一天)
    VAR ContractStartMonth = EOMONTH(CRMTable[ContractDate], -1) + 1
    // 定义合同的生效结束月份(取ContractEnd所在月的前一个月最后一天,因为ContractEnd是当月第一天,意味着上个月是最后生效月)
    VAR ContractEndMonth = EOMONTH(CRMTable[ContractEnd], -1)
    // 定义当前日历月的第一天
    VAR CurrentMonthStart = EOMONTH(MAX(Calendar[Date]), -1) + 1
    RETURN
    // 判断当前月是否在合同的生效周期内,是则计入该合同的Revenue,否则计0
    IF(
        CurrentMonthStart >= ContractStartMonth && CurrentMonthStart <= ContractEndMonth,
        CRMTable[Revenue],
        0
    )
)

公式逻辑解释:

  1. SUMX遍历合同:SUMX会逐个处理每笔符合条件的合同,计算它在当前月的贡献后再汇总。
  2. 确定合同生效周期:
    • ContractStartMonth:把合同开始日期转换为当月第一天,比如01/01/2023就变成01/01/2023。
    • ContractEndMonth:把合同结束日期转换为前一个月的最后一天,比如01/06/2023就变成31/05/2023,这样就能准确判断合同的最后生效月是5月。
  3. 判断当前月是否生效:对比当前日历月的第一天是否在合同的生效起止范围内,是的话就把该合同的Revenue计入当月MRR,否则不计。

把这个度量值和你的日历表YearMonth字段搭配使用,就能得到你想要的月度MRR结果,直接用来做折线图就可以啦。

备注:内容来源于stack exchange,提问作者rodrigo nilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:52:32