如何实现条件DAX度量:按Col1值选择SUMX的两种求和逻辑
正确DAX度量实现方案
原代码的核心问题是SWITCH的判断逻辑没放在行迭代上下文里,没法逐行识别Col1的值,导致计算逻辑失效。下面是修正后的实现:
最终可用的度量代码
自定义求和 = CALCULATE ( SUMX ( 'myDF', IF ( 'myDF'[Col1] IN { "B0", "B1" }, 'myDF'[Amount], 'myDF'[Amount] * 'myDF'[Rate] ) ), KEEPFILTERS ( 'myDF'[Col2] = "Bla" ) )
代码逻辑说明
- SUMX逐行计算:遍历
myDF每一行,根据Col1的值决定该行的计算规则:- 当Col1为"B0"或"B1"时,直接取当前行的Amount值
- 其他所有情况,计算当前行Amount与Rate的乘积
- CALCULATE + KEEPFILTERS:一方面强制筛选Col2等于"Bla"的行,另一方面保留外部已有的Col2筛选条件(比如报表切片器选了Col2的其他值,会和这个条件取交集)
用SWITCH替代IF的等价写法
如果习惯用SWITCH,也可以写成:
自定义求和 = CALCULATE ( SUMX ( 'myDF', SWITCH ( TRUE (), 'myDF'[Col1] = "B0" || 'myDF'[Col1] = "B1", 'myDF'[Amount], 'myDF'[Amount] * 'myDF'[Rate] ) ), KEEPFILTERS ( 'myDF'[Col2] = "Bla" ) )
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

