DAX如何计算去年同期对应前n天区间的数值总和?
DAX 上一年对应时段求和实现方案
前置依赖
- 已搭建独立的日期维度表,且标记为官方日期表,日期维度表和事实表通过
日期列建立一对多关联 - 可直接配置固定天数n,也可新建动态参数实现n的灵活调整
核心度量值代码
去年同期对应区间求和 = VAR 当前上下文最大日期 = MAX('日期表'[日期]) VAR n = 5 -- 此处可替换为动态参数引用,按需调整数值 VAR 本期区间起始 = 当前上下文最大日期 - n VAR 本期区间结束 = 当前上下文最大日期 - 1 VAR 去年同期起始 = DATE(YEAR(本期区间起始)-1, MONTH(本期区间起始), DAY(本期区间起始)) VAR 去年同期结束 = DATE(YEAR(本期区间结束)-1, MONTH(本期区间结束), DAY(本期区间结束)) RETURN CALCULATE( SUM('事实表'[待求和的数值字段]), REMOVEFILTERS('日期表'), -- 旧版DAX可替换为ALL('日期表') '日期表'[日期] >= 去年同期起始, '日期表'[日期] <= 去年同期结束 )
规则匹配验证
- 当
n=1时:本期区间为单天(当前日期往前推1天),计算结果为去年同一天的数值总和,完全匹配示例中2017.05.30对应2016.05.30的计算要求 - 当
n=5时:本期区间为当前日期往前推5天的范围,计算结果为去年同起止日期区间的总和,完全匹配示例中2017.05.252017.05.30对应2016.05.252016.05.30的计算要求
可选优化
如果需要兼容闰年2月29日的特殊场景,可在日期转换逻辑中新增判断,若去年对应日期不存在则自动调整为2月28日即可。
内容的提问来源于stack exchange,提问作者merkle
相关产品推荐
相关产品推荐

