如何在DAX中编写支持切片器筛选、按支出取Top1供应商名称的度量值
DAX 动态取筛选上下文下Spend Top1供应商解决方案
问题原因
现有写法无法响应切片器筛选的核心原因是筛选上下文被错误清除:
- 初始写法中的
ALL(PSL)会移除PSL表上的所有筛选,无论是PSL自身的Category字段筛选,还是关联表Country筛选后透传到PSL的筛选,都会被完全清除,因此切片器选择不会影响计算结果。 - 后续尝试的
ALLEXCEPT(PSL,PSL[Category])仅保留了PSL表自身的Category筛选,依然清除了其他所有筛选传递路径,来自关联表的Country筛选还是会被忽略,因此无法生效。
正确调整方案
将TOPN函数的计算范围替换为ALLSELECTED即可保留所有切片器带来的筛选上下文,仅在当前选中的范围内计算Top1供应商:
Top 1 Vendor = CALCULATE( SELECTEDVALUE(PSL[VName]), TOPN( 1, ALLSELECTED(PSL[VName]), // 保留所有外部筛选,仅取当前可见的供应商列表 [Spend], DESC ) )
并列Top1兼容优化
如果存在多个供应商Spend相同并列第一的场景,SELECTEDVALUE会返回空值,可改用CONCATENATEX拼接并列供应商名称:
Top 1 Vendor = CONCATENATEX( TOPN( 1, ALLSELECTED(PSL[VName]), [Spend], DESC ), PSL[VName], "、" )
内容的提问来源于stack exchange,提问作者coder_bg
相关产品推荐
相关产品推荐

