Power BI动态度量值筛选虚拟表及度量有效性问题咨询
问题解答
一、度量值是否正确?
不正确。
你当前的度量值MinValueSlicer = min(TableB[Date])和MaxValueSlicer = max(TableB[Date]),获取的是切片器筛选后TableB中实际存在的日期的极值。比如当切片器选择2022年6月1日至6月30日时,TableB仅保留了Lot B的6月10日记录,因此两个度量值都会返回10/06/2022,而非你预期的切片器选择范围的边界值(6月1日和6月30日)。
如果要获取切片器选择的日期范围的最小和最大值,需要修改度量值,用ALLSELECTED函数保留切片器的筛选上下文:
MinValueSlicer = MINX(ALLSELECTED(TableB[Date]), TableB[Date]) MaxValueSlicer = MAXX(ALLSELECTED(TableB[Date]), TableB[Date])
二、创建TableC的问题解决
你用SELECTCOLUMNS+FILTER创建的计算表无法正常工作,核心原因是:计算表是模型加载时静态生成的,不会响应切片器的动态筛选上下文,因此无法实时获取切片器的MaxValueSlicer值。
要实现“显示TableA中Date大于切片器最大日期的记录”的需求,推荐以下两种方式:
方式1:使用动态表表达式作为可视化数据源
在Power BI的可视化中,直接将以下DAX表达式作为表的数据源(无需创建计算表):
CALCULATETABLE( TableA, TableA[Date] > MAXX(ALLSELECTED(TableB[Date]), TableB[Date]) )
这个表达式会根据切片器的选择,动态筛选出TableA中日期大于切片器最大日期的记录,最终得到你预期的结果:
| Lot | Date |
|---|---|
| C | 01/12/2022 |
方式2:用度量值标记符合条件的记录
- 创建一个标记度量值:
IsDateAfterMaxSlicer = VAR MaxSliceDate = MAXX(ALLSELECTED(TableB[Date]), TableB[Date]) RETURN IF(SELECTEDVALUE(TableA[Date]) > MaxSliceDate, 1, 0)
- 在TableA的表可视化中,添加筛选条件:
IsDateAfterMaxSlicer = 1,即可动态展示符合条件的记录。
内容的提问来源于stack exchange,提问作者IRed
相关产品推荐
相关产品推荐

