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

时间:2018-11-07 15:08:39

标签: grouping powerbi dax

让我说一下下面的桌子:

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 个答案:

答案 0 :(得分:2)

您只需要知道如何使用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]
)

许多种给猫皮的方法。