如何用DAX仅对Lookup表中存在的匹配值做聚合计算
解决方案
你当前的写法逻辑本身没有问题,未得到预期结果的核心原因是矩阵默认会展示key表所有存在的site行(哪怕对应度量值返回空),可以通过以下两种方式实现需求,全程不需要在筛选面板配置任何硬编码规则:
方案1:不建立表关系(兼容你当前的断开模型)
直接修改度量值,先判断当前行的site是否在lookup表范围内,符合条件再返回聚合结果:
countSiteServiceLookup = // 读取当前上下文的site值 VAR CurrentSite = SELECTEDVALUE('key'[site]) // 判断site是否存在于lookup表 VAR IsValidSite = CurrentSite IN VALUES('Lookup'[site]) RETURN IF( IsValidSite, // 符合条件则计算对应site-service组合的总月数 CALCULATE(COUNT('key'[month]), REMOVEFILTERS('key'[month])), BLANK() )
将该度量值放入矩阵值区域后,矩阵会自动隐藏返回空值的site2行,直接得到你需要的结果。如果你习惯用TREATAS写法,也可以用下面等价的度量值:
countSiteServiceLookup = CALCULATE( CALCULATE(COUNT('key'[month]), REMOVEFILTERS('key'[month])), TREATAS(VALUES('Lookup'[site]), 'key'[site]) )
使用这个写法时只需要在矩阵的**行属性设置中关闭「显示无数据的项」**即可隐藏site2行。
方案2:建立表关系(性能更优)
- 先在模型中建立
Lookup[site]到key[site]的一对多单方向关系(Lookup表为一端,key表为多端) - 直接使用如下度量值即可:
countSiteServiceLookup = CALCULATE( COUNT('key'[month]), REMOVEFILTERS('key'[month]), // 关联lookup表筛选有效site 'Lookup' )
关联后关系会自动过滤不在Lookup表中的site,不需要额外判断逻辑。
内容的提问来源于stack exchange,提问作者smpa01
相关产品推荐
相关产品推荐

