PowerBi DAX 相当于 SUMIFS,以当前行值作为过滤器

Jay*_*een 3 dax powerbi

在 Excel 中,如果我位于一个名为“销售”且有四列的表中,我可以

销售量

Month, CustomerId, ProductId, TotalQuantity
Jan,1, CAR,
Feb,1, CAR,
Run Code Online (Sandbox Code Playgroud)

我可以添加一个公式:

=SUMIFS(Sales[Quantity],Sales[CustomerId],[@[CustomerId]])
Run Code Online (Sandbox Code Playgroud)

这将转到 Sales 表,并对按已输入公式的当前行的 CustomerID 筛选出的 CustomerID 列求和。

我尝试在 PowerBI 计算行中复制此内容,但无法让 @ 用于行引用。它就像

TotalQuantity = CALCULATE(SUM(Sales[Quantity]),Sales[CustomerId] = Sales[CustomerId]))
Run Code Online (Sandbox Code Playgroud)

知道如何获得同等的@工作吗?

Mik*_*ney 5

我认为您缺少的关键功能是较早的。这并不奇怪,因为它有一个误导性的名称 - 它的真正意思是“当前行”。您还需要 CALCULATE 的 Filter 参数中的 FILTER 函数,以将过滤器上下文重置为整个表。

因此,您的新列函数可能如下所示:

TotalQuantity = CALCULATE(SUM(Sales[Quantity]), FILTER(Sales, Sales[CustomerId] = EARLIER (Sales[CustomerId])))

下面是一个简洁的示例,来自最容易访问的 DAX 公式源站点:

http://www.powerpivotpro.com/2013/07/writing-a-subtotal-calc-column-aka-the-simplest-use-of-the-earlier-function/

FWIW 这是早期的官方文档:

https://msdn.microsoft.com/en-us/library/ee634551.aspx

  • ALLEXCEPT() 比 FILTER() 更干净: CALCULATE( <expression>, ALLEXCEPT( 'Sales', 'Sales'[CustomerId] ) ) ,并且在大型表中表现更好。 (4认同)