首页 > 解决方案 > 如何计算一个简单的累计?

问题描述

这是表:客户

在此处输入图像描述

这是表事务:

在此处输入图像描述

它们以 No 相关。

我想要 Esaldo 的总和:

所以:

Running total =
CALCULATE(
SUM(Transactions[ESaldo]),
FILTER(
ALL(
Transactions),
Transactions[Date] <= MAX(Transactions[Date])
)
)

这是错误的:

在此处输入图像描述

由于外部过滤器(切片器)。

所以,这应该这样做:

Running total 2 =
CALCULATE(
SUM(Transactions[ESaldo]),
FILTER(
ALLEXCEPT(Transactions, Transactions[no]),
Transactions[Date] <= MAX(Transactions[Date])
)
)

如果ALLEXCEPT要理解...它应该从 Transactions 中删除所有过滤器,并将过滤器保留在第 No 列中。

但事实并非如此,因此结果是相同的:

在此处输入图像描述

那么,也许…… ALLSELECTED

Running total 3 =
CALCULATE(
SUM(Transactions[ESaldo]),
ALLSELECTED(Transactions[no])
)

没有:

在此处输入图像描述

编辑:这是 pbix 文件的链接: https ://drive.google.com/drive/folders/1W5cnLtIBD9REYbr3VdhIZqTcCtxz62hp?usp=sharing

标签: powerbidax

解决方案


亲爱的@nuno,如果我没记错的话,您可能已经使用此代码找到了解决方案

Running total 2 =
CALCULATE(
SUM(Transactions[ESaldo]),
FILTER(
ALLEXCEPT(Transactions, Transactions[no]),
Transactions[Date] <= MAX(Transactions[Date])
)
)

如果您仔细观察,您会发现从您的打印结果中,总计 2 实际上通过添加每行的每张发票来正确计算。

但是您最后看到的 166k 实际上并不是上述值的总和。它实际上对整个表(另一个评估上下文)应用相同的度量,这实际上是正确的,并且与没有过滤器的 SUM(Transactions[ESaldo]) 完全相同。

尽管如此,鉴于示例的性质,如果您的目标是呈现为表格,那么这个总数是无用的。您可能希望总数保持一致。

尝试下面的代码,我尝试更改计算内部的评估上下文(抱歉,上面指向 pbix 的链接似乎不起作用)

Running total 2 =
 CALCULATE(
  CALCULATE(
    SUMX(
    VALUES(Transactions[Date]),
      CALCULATE(
       SUM(Transactions[ESaldo])
      )
    )
  )
    
  FILTER(
   ALLEXCEPT(Transactions, Transactions[no]),
   Transactions[Date] <= MAX(Transactions[Date])
  )
 )

它有效吗?它应该更改日期列周围的上下文并在最后更正总数


推荐阅读