无需SUMX函数,基于Check Month Wise筛选23 Qty Blank度量值
问题描述
现有DAX度量值Check Month Wise用于判断数量状态:
Check Month Wise = IF(ISBLANK([23 Qty]),"D",IF(ISBLANK([22 Qty]),"N","V"))
尝试编写度量值23 Qty Blank,实现仅在Check Month Wise = "V"时返回[23 Qty],否则返回0:
23 Qty Blank = IF( [Check Month Wise] = "V", [23 Qty], 0 )
但该度量值仅在PAC ITEM CODE明细层级生效,小计/汇总层级无法得到正确结果。已知使用SUMX可实现需求,需不依赖SUMX完成筛选逻辑。
解决方案
核心原因分析
原度量值在汇总层级失效,是因为[Check Month Wise]在汇总上下文里是基于整个组的计算结果(而非逐行判断后汇总)。若组内存在部分行不符合"V"条件,汇总后的Check Month Wise结果会非"V",导致整个组返回0,不符合逐行筛选再汇总的需求。
替代DAX代码
写法一:直接基于条件筛选(推荐)
由于Check Month Wise = "V"等价于[23 Qty]和[22 Qty]均不为空,可直接将该条件整合到筛选逻辑中:
23 Qty Blank = CALCULATE( [23 Qty], KEEPFILTERS( NOT(ISBLANK([23 Qty])) && NOT(ISBLANK([22 Qty])) ) ) + 0
CALCULATE:通过上下文转换,将筛选条件应用到每个明细行层面,再汇总符合条件的[23 Qty]。KEEPFILTERS:保留当前筛选上下文(如页面、切片器的筛选),避免CALCULATE清除原有筛选规则。+ 0:确保无符合条件的行时返回0而非空白值,匹配原需求逻辑。
写法二:复用Check Month Wise逻辑
如果希望直接复用现有Check Month Wise的判断规则,可通过FILTER锁定当前上下文的明细行:
23 Qty Blank = CALCULATE( SUM('YourTable'[23 Qty Column]), -- 替换为存储23 Qty的基础列 FILTER( ALLSELECTED('YourTable'[PAC ITEM CODE]), [Check Month Wise] = "V" ) )
- 需将
'YourTable'[23 Qty Column]替换为实际存储23 Qty数值的基础列(若[23 Qty]是求和度量,直接使用基础列求和更高效)。 ALLSELECTED('YourTable'[PAC ITEM CODE])确保筛选范围是当前上下文可见的所有PAC ITEM CODE明细行。
内容的提问来源于stack exchange,提问作者Pavan
相关产品推荐
相关产品推荐

