【问题标题】:PowerBi DAX equivalent for SUMIFS with current row value as filterSUMIFS 的 PowerBi DAX 等效项,当前行值作为过滤器
【发布时间】:2016-02-08 08:05:18
【问题描述】:

如果我在一个名为“销售”的表中,我可以在 Excel 中使用,该表有四列

销售

Month, CustomerId, ProductId, TotalQuantity
Jan,1, CAR,
Feb,1, CAR,

我可以添加一个公式:

=SUMIFS(Sales[Quantity],Sales[CustomerId],[@[CustomerId]])

这将转到 Sales 表,并对由输入公式的当前行的 CustomerID 过滤的 CustomerID 列求和。

我试图在 PowerBI 计算行中复制它,但我无法让 @ 为行引用工作。它遇到像

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

知道如何让等效的@ 工作吗?

【问题讨论】:

  • 这被标记为powerquery,但查询语言不是 M。您要扩展您的问题还是更改标签?
  • 我对你的例子有点困惑——你所有的引用都指向一个“销售”表?数量列在哪里?
  • @CarlWalsh 我想我很困惑,因为我来自 PowerBI 中的查询编辑器(它也在 PowerQuery 中使用,所以相同),但是在报告中使用 AddColumn 然后从 M 跳到达克斯。如果我错了,请纠正我。

标签: dax powerbi


【解决方案1】:

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

因此,您的 New Column 函数可能如下所示:

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 是 EARLIER 上的官方文档:

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

【讨论】:

  • 太棒了。当您编辑答案时,我实际上正要评论使用 FILTER。我从 PowerPivotPro 链接中获取的。 TotalQuantity = CALCULATE(SUM([Quantity]),FILTER(Sales,Sales[CustomerId]=EARLIER(Sales[CustomerI‌​d]))) 工作!谢谢!
  • 是的,抱歉,我应该将CustomerId 列命名为Quantity,但我很匆忙。我不会更改任何内容,因为这意味着需要编辑答案。该解决方案仍然有效。再次感谢。
  • ALLEXCEPT() 比 FILTER() 更干净:CALCULATE( , ALLEXCEPT( 'Sales', 'Sales'[CustomerId] ) ) 并且在大表中表现更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2021-08-30
相关资源
最近更新 更多