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