DAX中如何让MyMeasure获取SUMMARIZECOLUMNS筛选后DimDate的最小日期?
解决DAX中获取筛选后全局最小日期的问题
这个问题我之前也碰到过,核心是要搞清楚行上下文和筛选上下文对度量值计算的影响,咱们一步步来解决。
错误原因分析
你之前用的公式:
MyMeasure:=CALCULATE( MIN( DimDate[Actual_Date] ), ALL( DimDate[Actual_Date] ) )
之所以返回每行对应的日期,是因为ALL(DimDate[Actual_Date])只清除了Actual_Date列的筛选,但SUMMARIZECOLUMNS生成的行上下文(当前行的Year和Month_Of_Year)会自动转成筛选上下文传给CALCULATE,所以MIN还是只计算当前年份+月份范围内的最小日期,不是整个2016年的全局最小值。
正确的DAX写法
有两种简洁的方式能实现你的需求:
方式1:精准移除行上下文的Year/Month筛选
直接清除行上下文带来的Year和Month_Of_Year筛选,同时保留外部的2016年全局筛选:
MyMeasure := CALCULATE( MIN(DimDate[Actual_Date]), ALL(DimDate[Year], DimDate[Month_Of_Year]) )
把这个度量值代入你的SUMMARIZECOLUMNS,完整表达式如下:
EVALUATE SUMMARIZECOLUMNS( 'DimDate'[Year], 'DimDate'[Month_Of_Year], FILTER('DimDate', 'DimDate'[Year] = 2016 ), "MyMeasure", CALCULATE( MIN(DimDate[Actual_Date]), ALL(DimDate[Year], DimDate[Month_Of_Year]) ) )
方式2:用ALLSELECTED保留外部筛选
ALLSELECTED会自动保留外部应用的筛选(也就是你加的2016年筛选),同时清除行上下文的所有筛选,写法更简洁:
MyMeasure := CALCULATE( MIN(DimDate[Actual_Date]), ALLSELECTED(DimDate) )
代入后的完整表达式:
EVALUATE SUMMARIZECOLUMNS( 'DimDate'[Year], 'DimDate'[Month_Of_Year], FILTER('DimDate', 'DimDate'[Year] = 2016 ), "MyMeasure", CALCULATE( MIN(DimDate[Actual_Date]), ALLSELECTED(DimDate) ) )
效果验证
这两种写法都会让MyMeasure在每一行中返回2016年的最小日期(1-Jan-2016),完全不受当前行的年份和月份限制。
内容的提问来源于stack exchange,提问作者TDP
相关产品推荐
相关产品推荐

