Power BI DAX:根据另一列获取列的总和

Dav*_*lle 2 grouping dax powerbi

假设我有以下表格:

Client    Sales
A         1000
A         100
A         10
B         1000
B         10
C         1
Run Code Online (Sandbox Code Playgroud)

我想在最后添加另一列 Names TotalClient ,新表将如下所示:

Client    Sales   Total
A         1000    1110
A         100     1110
A         10      1110
B         1000    1010
B         10      1010
C         1       1
Run Code Online (Sandbox Code Playgroud)

这可能在 DAX 中还是在查询编辑器中?我尝试了很多方法,但仍然无法弄清楚如何。

我能够使用 SUMMARIZE 函数获取我需要的信息来获取另一个表,但是在安全方面我遇到了其他问题。似乎数据表得到了正确过滤,但不是汇总版本。

谢谢

Ale*_*son 5

您只需要知道如何使用CALCULATE来调整您的过滤器上下文。

Total = CALCULATE( SUM( Table1[Sales] ), ALLEXCEPT( Table1, Table1[Client] ) )
Run Code Online (Sandbox Code Playgroud)

这表示要计算表中所有行的销售额总和,其中我们已经删除了除客户端之外的任何行上下文。因此,您将获得客户端与当前行中的客户端匹配的所有行的总和。


如果你只有这些列,你可以这样做

Total = CALCULATE( SUM( Table1[Sales] ), ALL( Table1[Sales] ) )
Run Code Online (Sandbox Code Playgroud)

这仅删除Sales行上下文并保留Client行上下文。如果您还有其他列,这可能不会按预期工作,因为它们仍然是行上下文的一部分。


您还可以删除所有过滤器上下文,ALL然后显式添加回您想要的过滤器:

Total =
CALCULATE(
    SUM( Table1[Sales] ),
    ALL( Table1 ),
    Table1[Client] = EARLIER( Table1[Client] )
)
Run Code Online (Sandbox Code Playgroud)

或者用类似的方法SUMX代替

Total =
SUMX(
    FILTER(
        Table1,
        Table1[Client] = EARLIER( Table1[Client] )
    ),
    Table1[Sales]
)
Run Code Online (Sandbox Code Playgroud)

给猫剥皮的方法很多。

  • 一开始这有点违反直觉,但您基本上是在指定要保留的内容并删除其他所有内容。 (2认同)