获取所有行的总值

Getting the total value in all the rows

我正在使用下面的计算来计算 accounts >= 200 的金额总和 我遇到的问题是,当我用 excel 可视化帐户和帐户总数时,它会给出所有帐户的总金额。 我该如何解决这个问题?`

Account total:= CALCULATE(SUM('Table'[amount]),'Table'[Type]= "ABC",'Table'[account] >=200)

您应该使用:

CALCULATE (
    SUM ( 'Table'[amount] ),
    FILTER ( 'Table', 'Table'[Type] = "ABC" && 'Table'[account] >= 200 )
)

区别在于您当前的公式等同于:

CALCULATE (
    SUM ( 'Table'[amount] ),
    FILTER ( ALL ( 'Table' ), 'Table'[Type] = "ABC" && 'Table'[account] >= 200 )
)

即与我给出的相同,除了它在过滤之前对 table 应用(在您的情况下是隐含的)ALL 的关键区别。此隐式 ALL 将覆盖您可能在外部应用的任何过滤器。

@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][account].


我提出以下两个几乎等效的解决方案,它们比过滤整个 table 的计算效率更高:

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/