如何基于日期筛选返回列并计算日平均Value(DAX)
按日期计算Value平均值的DAX实现方案
针对你需要按日期筛选对应Value并计算平均值的需求,以下是两种常用的DAX实现方式,分别适用于计算列和度量值场景:
一、计算列(Calculated Column)
如果需要在表中新增一列,固定显示每行日期对应的Value平均值,推荐用以下两种写法:
写法1:用FILTER+EARLIER(新手友好,逻辑直观)
AvgValueForThisDate = CALCULATE( AVERAGE('YourTable'[Value]), FILTER( 'YourTable', 'YourTable'[Date] = EARLIER('YourTable'[Date]) ) )
- 逻辑说明:
FILTER遍历整个表,只保留与当前行日期相同的记录;EARLIER用来获取当前行的日期值,避免筛选上下文覆盖;最后AVERAGE计算这些记录的Value平均值。
写法2:用ALLEXCEPT(性能更优,适合大数据量)
AvgValueForThisDate = CALCULATE( AVERAGE('YourTable'[Value]), ALLEXCEPT('YourTable', 'YourTable'[Date]) )
- 逻辑说明:
ALLEXCEPT会移除除了Date列之外的所有筛选条件,让CALCULATE直接计算当前日期对应的所有Value的平均值,比FILTER的逐行扫描效率更高。
以你的示例数据为例,2000/02/05对应的Value为0.1和0.2,以上两种写法都会返回(0.1+0.2)/2=0.15,符合需求。
二、度量值(Measure)
如果是在Power BI报表中需要动态计算(比如通过切片器选择日期后显示对应平均值),直接写简单的度量值即可:
AvgValueForSelectedDate = AVERAGE('YourTable'[Value])
- 逻辑说明:度量值会自动响应报表的筛选上下文,当你选中某个日期时,它会自动计算该日期下所有Value的平均值,无需额外筛选逻辑。
注意事项
- 替换代码中的
'YourTable'为你实际使用的表名; - 确保
Date列是日期/时间类型,Value列是数值类型,否则函数会报错。
内容的提问来源于stack exchange,提问作者Stephen Nguyen
相关产品推荐
相关产品推荐

