2016-07-28 112 views
0

我是PowerPivot和DAX的新手。我遵循一些在線教程。現在我有一個我無法解決的小問題。我有以下數據:將PowerPivot中的上一個日期和第二個日期進行比較

Date Instrument Value 2016-07-27 A 100 2016-07-27 B 98 2016-07-26 A 102 2016-07-25 B 99

對於每一個我想計算Value最近的日期和第二最近的日期之間的差額(利潤/虧損)的日期。對於它上面的數據會是以下幾點:

Date Instrument Value Profit/Loss 2016-07-27 A 102 2 ([Val. inst. A 2016-07-27]-[Val. inst. A 2016-07-26]) 2016-07-27 B 98 -1 ([Val. inst. B 2016-07-27]-[Val. inst. B 2016-07-25]) 2016-07-26 A 100 2016-07-25 B 99

我與DAX試圖找到使用=EARLIER([Date])第二大的日期,但沒有設法得到它的工作。第二大日期我可能會找到對應於該日期的Value。任何建議如何解決這個問題?

回答

0

最後我想出了三個步驟的解決方案(步驟可以合併爲一個步驟)。首先我排列所有的日期,最近的是1,最近的第二個是2。之後,我會檢索每個行最近第二天的Value。最後,我計算出Value的當前行與Value之間最近第二天與該行日期相比的差異。

爲了評定我用下面的日期:

=RANKX(FILTER(ALL(table);EARLIER([Instrument])=[Instrument]);[Date];;FALSE())

解釋什麼,我覺得DAX公式做。 RANKX通過獲取表格,然後對該表格中列中的值進行排序。以上我使用過濾表格作爲表格。已過濾的表爲每行創建一個新表,其中只包含與該特定行的儀器相同的儀器。對於第一行,過濾的表格如下所示。

Date Instrument Value 2016-07-27 A 100 2016-07-26 A 102

在過濾表中的日期,然後排名。

Date Instrument Value Rank 2016-07-27 A 100 1 2016-07-26 A 102 2

使用排序,然後我根據當前行的Rank-1拉出第二個最近的日期Value每一行。

Value second most recent date = CALCULATE(MAX([Value]);FILTER(table;EARLIER([Instrument])=[Instrument] && [Date Rank]= EARLIER([Date Rank]))

最後我計算差值:

PnL = [Value] - [Value second most recent date]

我不知道什麼EARLIER是做什麼,但我認爲這是某種形式的迭代過程。

相關問題