2016-02-08 53 views
1

在Excel中我可以,如果我是在一个名为“销售”表有四列PowerBi DAX等效SUMIFS与当前行值过滤器

销售

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

我可以添加一个公式:

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

这将转到Sales表并将当前行的CustomerID所过滤的CustomerID列相加,其中公式h已输入。

我试图复制PowerBI计算行中的这个,但我无法得到@工作的行参考。它碰到像

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

任何想法如何获得等效@工作?

+0

它被标记为“powerquery”,但查询语言不是M.是否要扩展您的问题或更改标记? –

+0

你的榜样让我有点困惑 - 你所有的引用都是针对单一的“销售”表?数量列在哪里? –

+0

@CarlWalsh我觉得我很困惑,因为我来自PowerBI中的查询编辑器(它也用于PowerQuery,所以同样使用),但是使用报表中的AddColumn,然后跳出M到DAX。纠正我,如果我错了。 –

回答

1

我认为你缺少的关键功能是EARLIER。这并不奇怪,因为它有一个令人误解的名字 - 它的确意味着“当前行”。您还需要在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这里是EARLIER的官方DOCO:

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

+0

太棒了。当我编辑答案时,我实际上正要对使用FILTER进行评论。我从PowerPivotPro链接中选取的。 TotalQuantity = CALCULATE(SUM([Quantity]),FILTER(Sales,Sales [CustomerId] = EARLIER(Sales [CustomerI d])))工作!谢谢! –

+0

对不起,我应该有'CustomerId'列名为'Quantity'但是正在冲。我不会改变任何事情,因为这意味着需要对答案进行编辑。该解决方案仍然有效。再次感谢。 –

+3

ALLEXCEPT()比这里的FILTER()更清晰:计算(,ALLEXCEPT('Sales','Sales'[CustomerId]))并且在大表中执行得更好。 – greggyb