我是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
。有什么建议可以解决这个问题吗?
答案 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
正在做什么,但我认为这是某种迭代过程。