Power BI DAX:基于另一列获取某一列的总和

4
假设我有以下表格:
Client    Sales
A         1000
A         100
A         10
B         1000
B         10
C         1

我想在末尾添加一个名为TotalClient的列,这样新表格会像这样:
Client    Sales   Total
A         1000    1110
A         100     1110
A         10      1110
B         1000    1010
B         10      1010
C         1       1

在DAX或查询编辑器中是否可以实现这个功能?我尝试了很多次,但仍然无法弄清楚如何实现。

使用SUMMARIZE函数获取另一个表格可以获得所需的信息,但在安全性方面遇到了其他问题。似乎数据表被正确过滤,但是摘要版本没有被过滤。

谢谢

1个回答

9

你只需要知道如何使用 CALCULATE 调整你的筛选上下文。

Total = CALCULATE( SUM( Table1[Sales] ), ALLEXCEPT( Table1, Table1[Client] ) )

这段话的意思是计算表格中除客户以外的所有行的销售总额。因此,您可以获得与当前行中的客户匹配的所有行的总和。


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

Total = CALCULATE( SUM( Table1[Sales] ), ALL( Table1[Sales] ) )

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


您也可以使用 ALL 删除所有筛选上下文,然后显式地添加您想要的过滤器:

Total =
CALCULATE(
    SUM( Table1[Sales] ),
    ALL( Table1 ),
    Table1[Client] = EARLIER( Table1[Client] )
)

或者同样地使用SUMX代替。
Total =
SUMX(
    FILTER(
        Table1,
        Table1[Client] = EARLIER( Table1[Client] )
    ),
    Table1[Sales]
)

有很多种方法可以解决问题。

第一个有效了。我得说,“ALLEXCEPT”让我很困惑。在我看来,它似乎会做相反的事情。 - David Brunelle
2
起初可能有点违反直觉,但基本上你是在指定你想要保留的内容,然后删除其他所有内容。 - Alexis Olson
非常好的答案,谢谢Alexis。 - zkilnbqi
@AlexisOlson:FYI,每次我需要使用计算时,我仍然会参考这篇文章。对于ALLEXCEPT,我仍然感到困惑 :) - David Brunelle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接