如何在Power BI中实现MRR的同比(YoY)月度对比?
Power BI实现MRR同比(上年同月)对比方案
一、确认模型基础
确保合同表与月度日历表的字段完整性:
- 月度日历表需包含
Date(每日日期)、Year(年份)、Month Number(月份数字)、Year-Month(如"2023-07"格式的年月标识)字段 - 合同表保留
Total Contract Value、Contract Start Date、Contract End Date核心字段 - 无需为两张表建立主动关系,所有筛选逻辑通过度量值实现
二、编写基础月度MRR度量值
该度量值用于计算指定日历月内,所有有效合同产生的月度 recurring revenue:
月度MRR = VAR 当前月起始 = MIN('月度日历表'[Date]) VAR 当前月结束 = MAX('月度日历表'[Date]) RETURN SUMX( '合同表', VAR 合同起始 = '合同表'[Contract Start Date] VAR 合同结束 = '合同表'[Contract End Date] -- 判断当前日历月是否与合同周期重叠 VAR 合同有效 = NOT(合同结束 < 当前月起始 || 合同起始 > 当前月结束) -- 计算合同存续总月数(含首尾月) VAR 合同存续月数 = DATEDIFF(合同起始, 合同结束, MONTH) + 1 -- 单合同月度MRR VAR 单合同MRR = DIVIDE('合同表'[Total Contract Value], 合同存续月数, 0) RETURN IF(合同有效, 单合同MRR, 0) )
三、编写上年同月MRR度量值
针对当前选中月份,自动匹配上年同月的MRR:
上年同月MRR = VAR 当前年份 = SELECTEDVALUE('月度日历表'[Year]) VAR 当前月份 = SELECTEDVALUE('月度日历表'[Month Number]) RETURN CALCULATE( [月度MRR], FILTER( ALL('月度日历表'), '月度日历表'[Year] = 当前年份 - 1 && '月度日历表'[Month Number] = 当前月份 ) )
四、针对2023年合同的筛选优化
如果仅需统计2023年1-12月启动的合同产生的MRR,可单独编写专属度量值:
2023合同月度MRR = VAR 当前月起始 = MIN('月度日历表'[Date]) VAR 当前月结束 = MAX('月度日历表'[Date]) RETURN SUMX( -- 筛选2023年启动的合同 FILTER('合同表', YEAR('合同表'[Contract Start Date]) = 2023), VAR 合同起始 = '合同表'[Contract Start Date] VAR 合同结束 = '合同表'[Contract End Date] VAR 合同有效 = NOT(合同结束 < 当前月起始 || 合同起始 > 当前月结束) VAR 合同存续月数 = DATEDIFF(合同起始, 合同结束, MONTH) + 1 VAR 单合同MRR = DIVIDE('合同表'[Total Contract Value], 合同存续月数, 0) RETURN IF(合同有效, 单合同MRR, 0) )
对应的2023合同上年同月MRR(注:2023年启动的合同在2022年同月未生效时,结果为0):
2023合同上年同月MRR = VAR 当前年份 = SELECTEDVALUE('月度日历表'[Year]) VAR 当前月份 = SELECTEDVALUE('月度日历表'[Month Number]) RETURN CALCULATE( [2023合同月度MRR], FILTER( ALL('月度日历表'), '月度日历表'[Year] = 当前年份 - 1 && '月度日历表'[Month Number] = 当前月份 ) )
五、可视化配置
- 卡片图展示核心数据:分别添加[月度MRR]、[上年同月MRR],并在页面筛选器中选择
Year-Month为"2022-07"和"2023-07" - 柱形图对比趋势:横轴选择
Year-Month,值字段添加[月度MRR]与[上年同月MRR],同样筛选指定年月 - 聚焦2023合同:若只需看2023年新合同的贡献,将值字段替换为[2023合同月度MRR]与[2023合同上年同月MRR]即可
内容的提问来源于stack exchange,提问作者rmel
相关产品推荐
相关产品推荐

