关于DAX移动平均表达式MA_12的两处技术疑问
关于DAX移动平均表达式MA_12的疑问解答
问题1:CALCULATE未指定筛选参数,是否继承了DATESBETWEEN的筛选上下文?
是的,完全继承。在DAX中,当CALCULATE函数没有显式传入任何筛选参数时,它会沿用当前所处的筛选上下文。在你的MA_12表达式里,DATESBETWEEN生成了过去12天的日期范围表,AVERAGEX会逐行迭代这个日期表——每一次迭代时,当前上下文就是单个日期(或该日期对应的筛选范围),此时无参数的CALCULATE会直接使用这个上下文来计算后续的SUM(Stock[Close])。
问题2:为何在AVERAGEX中嵌套CALCULATE(SUM(Stock[Close])),先求和再求平均的逻辑该如何理解?
这个写法是为了兼容单日多条收盘价记录的业务场景:
- 首先,
DATESBETWEEN生成的是12个日期的集合(过去12天),AVERAGEX会逐个遍历这些日期。 - 对每个日期,
CALCULATE(SUM(Stock[Close]))会先筛选出该日期下的所有Stock[Close]记录并求和——如果你的Stock表中同一天存在多条Close数据(比如日内不同时段的收盘价、分笔数据),这一步能得到当日的总收盘价(或累计值);如果每天只有一条Close记录,SUM的结果就等于单条记录的Close值,和直接取Stock[Close]效果一致。 - 最后
AVERAGEX会把这12天的每日求和结果取平均,得到过去12天的日均收盘价(或日均收盘总和)。
简单说,先求和是为了确保单日多记录时数据的准确性,再求平均才是移动平均的核心逻辑。
内容的提问来源于stack exchange,提问作者math_enthusiast
相关产品推荐
相关产品推荐

