让我说一下下面的桌子:
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函数获取所需的信息以获取另一个表,但是在安全性方面遇到了其他问题。似乎数据表已正确过滤,但汇总版本却未过滤。
谢谢
答案 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]
)
许多种给猫皮的方法。