我可以比较PowerPivot中相邻行的同一列中的值吗?

时间:2014-09-30 00:55:05

标签: dax powerpivot

我有一个PowerPivot表,我需要能够确定一个项目处于错误状态的时间。我的数据集看起来像这样:

enter image description here

我需要做的是查看ID和State列中的值,并查看上一行中的值是否为State列中的ERROR,以及ID列中的值是否相同。如果是,我需要计算这两行中更改日期值之间的差异。

所以,例如,当我到第4行时,我会看到第3行(前一行)的State列中的值是ERROR,而前一行中ID列中的值是与当前行相同,因此我将计算第3行和第4行中更改日期值之间的差异(我不关心此特定要求的任何其他列中的值)。

有没有办法在PowerPivot中执行此操作?我已经完成了相当多的互联网搜索,看起来如果能够完成,它会使用EARLIER或EARLIEST DAX功能,但我找不到任何告诉我如何,甚至是,这可以做到。

感谢。

1 个答案:

答案 0 :(得分:3)

Chris

我有很多次类似的要求,经过长时间的反复试验后,我终于明白了EARLIER的工作原理。它可能非常强大,但也非常慢,因此请始终检查计算的性能。

要回答您的问题,您需要创建4个计算列:

1)项目排名 - 用于对具有相同项目ID的问题进行排名

=COUNTROWS(FILTER('ID', EARLIER([Item ID]) = [Item ID] && EARLIER([Date]) >= [Date]))

2)关注错误 - 轻松找到 EROR 问题

之后的问题
=IF([State] = "EROR",[Item Rank]+1)

3)以下问题的时间 - 简单查找,以便您可以计算出不同的

=IF([Follows Error]>0, 
  LOOKUPVALUE([Date], [User], [User], [Item Rank], [Follows Error]), 
  BLANK()
)

4) Time Diff - 计算特定问题的时间不同

=IF([State]="EROR",
  DAY([Time of Following Issue])-DAY([Date]),
  BLANK()
)

使用这些计算列,您可以轻松创建powerpivot表,将 State Item Id 拖到 ROWS 窗格中,然后简单地将 Time Diff 添加到。您将全面了解包含字符串“EROR”问题的问题以及解决问题所需的时间。

这就是PowerPivot窗口中的样子:

enter image description here

得到的数据透视表:

enter image description here

您可以下载我的Excel file here(2013)。

正如我所提到的,请注意性能,因为具有嵌套EARLIER和IF条件的计算列可能对性能要求太高。如果有一个更聪明的方式,我会很高兴看到它,但现在这对我很有用。

另外,请记住,所有计算列都可以嵌套到1中,但我将它们分开以便更容易理解公式。

希望这会有所帮助: - )