在PowerPivot

时间:2016-07-28 09:24:22

标签: excel powerpivot dax

我是PowerPivot和DAX的新手。我已经关注了一些在线教程。现在我遇到了一个我无法解决的小问题。我有以下数据:

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。有什么建议可以解决这个问题吗?

1 个答案:

答案 0 :(得分: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

使用排名I,然后根据当前行Value为每行提取第二个最近日期Rank-1

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正在做什么,但我认为这是某种迭代过程。