2016-02-08 89 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