如何计算日历年动态YTD平均值且不受日期筛选器影响
DAX 不受日期筛选影响的YTD动态平均值计算方案
实现逻辑
核心要解决两个问题:一是忽略页面现有日期筛选器的影响,取全局最新有数据的日期作为计算终点;二是动态匹配最新日期所在年份,自动生成当年1月1日到最新日期的计算区间,再求对应字段的平均值。
具体度量值代码
若你是月度粒度数据(直接求字段平均值即可)
Actual Exp YTD 平均
Actual Exp YTD 平均 = VAR 最新数据日期 = CALCULATE(MAX('日期表'[日期]), REMOVEFILTERS('日期表')) VAR 当前统计年份 = YEAR(最新数据日期) VAR YTD区间 = DATESBETWEEN('日期表'[日期], DATE(当前统计年份,1,1), 最新数据日期) RETURN CALCULATE(AVERAGE('业务表'[Actual Exp]), REMOVEFILTERS('日期表'), YTD区间)
Actual Min YTD 平均
Actual Min YTD 平均 = VAR 最新数据日期 = CALCULATE(MAX('日期表'[日期]), REMOVEFILTERS('日期表')) VAR 当前统计年份 = YEAR(最新数据日期) VAR YTD区间 = DATESBETWEEN('日期表'[日期], DATE(当前统计年份,1,1), 最新数据日期) RETURN CALCULATE(AVERAGE('业务表'[Actual Min]), REMOVEFILTERS('日期表'), YTD区间)
若你是日粒度数据(需要先按月求和再算月度平均)
Actual Exp YTD 月度平均
Actual Exp YTD 月度平均 = VAR 最新数据日期 = CALCULATE(MAX('日期表'[日期]), REMOVEFILTERS('日期表')) VAR 当前统计年份 = YEAR(最新数据日期) VAR YTD区间 = DATESBETWEEN('日期表'[日期], DATE(当前统计年份,1,1), 最新数据日期) RETURN CALCULATE( AVERAGEX(VALUES('日期表'[年月]), SUM('业务表'[Actual Exp])), REMOVEFILTERS('日期表'), YTD区间 )
Actual Min的版本只需要替换求和的字段名即可。
注意事项
- 将代码中的
'日期表'替换为你自己的日期维度表名称,无单独日期表则替换为业务表中日期字段所属的表名 - 将
'业务表'替换为你存储Actual Exp、Actual Min字段的表名 - 若使用的Excel版本不支持
REMOVEFILTERS函数,替换为ALL('日期表')即可
原TOTALYTD方案失效原因
TOTALYTD默认继承当前筛选上下文,若页面存在日期筛选器,计算范围会被强制限制在筛选区间内;且未清除筛选的前提下MAX(Date)取到的是筛选后的最大日期,不是全局最新的有数据日期,因此无法满足需求。
内容的提问来源于stack exchange,提问作者user8078111
相关产品推荐
相关产品推荐

