@Jos 大部分是正确的,但也有一些小错误。
这段代码
CALCULATE (
SUM ( 'Table'[amount] ),
'Table'[Type] = "ABC",
'Table'[account] >= 200
)
is equivalent to
CALCULATE (
SUM ( 'Table'[amount] ),
FILTER ( ALL ( 'Table'[Type] ), 'Table'[Type] = "ABC" ),
FILTER ( ALL ( 'Table'[account] ), 'Table'[account] >= 200 )
)
不是
CALCULATE (
SUM ( 'Table'[amount] ),
FILTER ( ALL ( 'Table' ), 'Table'[Type] = "ABC" && 'Table'[account] >= 200 )
)
特别是,如果您在 'Table'[Category] 上设置了过滤器,这将保留在前者中,但不会保留在后者中,因为 ALL ( 'Table' ) 会删除所有列上的过滤器,而不仅仅是 [Type] 和 @ 987654329@.
我提出了以下两个几乎等效的解决方案,它们的计算效率比过滤整个表的效率略高:
CALCULATE (
SUM ( 'Table'[amount] ),
FILTER ( VALUES ( 'Table'[Type] ), 'Table'[Type] = "ABC" ),
FILTER ( VALUES ( 'Table'[account] ), 'Table'[account] >= 200 )
)
或
CALCULATE (
SUM ( 'Table'[amount] ),
KEEPFILTERS ( 'Table'[Type] = "ABC" ),
KEEPFILTERS ( 'Table'[account] >= 200 )
)
有关 KEEPFILTERS 的更多信息:https://www.sqlbi.com/articles/using-keepfilters-in-dax/