在 PowerPivot 中比较前一个日期和前两个日期的值

Compare values previous date and second previous date in PowerPivot

我是 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 最近日期和第二个最近日期之间的差异 (Profit/Loss)。对于上面的数据,它将是以下内容:

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,第二最近的日期是 2。之后,我为每一行检索最近第二天的 Value 。最后,我计算了 Value 的当前行与 Value 与该行的日期相比最近第二天的差异。

为了对日期进行排名,我使用了以下内容:

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

解释我认为 DAX 公式的作用。 RANKX 通过采用 table 然后对 table 中列中的值进行排名来工作。上面我使用了过滤后的 table 作为 table。过滤后的 table 为每一行创建一个新的 table,其中仅包含与该特定行的工具相同的工具。对于第一行,过滤后的 table 如下所示。

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

过滤后的 table 中的日期然后进行排名。

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