我有一个PowerPivot表,我需要能够确定一个项目处于错误状态的时间。我的数据集看起来像这样:
我需要做的是查看ID和State列中的值,并查看上一行中的值是否为State列中的ERROR,以及ID列中的值是否相同。如果是,我需要计算这两行中更改日期值之间的差异。
所以,例如,当我到第4行时,我会看到第3行(前一行)的State列中的值是ERROR,而前一行中ID列中的值是与当前行相同,因此我将计算第3行和第4行中更改日期值之间的差异(我不关心此特定要求的任何其他列中的值)。
有没有办法在PowerPivot中执行此操作?我已经完成了相当多的互联网搜索,看起来如果能够完成,它会使用EARLIER或EARLIEST DAX功能,但我找不到任何告诉我如何,甚至是,这可以做到。
感谢。
答案 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窗口中的样子:
得到的数据透视表:
您可以下载我的Excel file here(2013)。
正如我所提到的,请注意性能,因为具有嵌套EARLIER和IF条件的计算列可能对性能要求太高。如果有一个更聪明的方式,我会很高兴看到它,但现在这对我很有用。
另外,请记住,所有计算列都可以嵌套到1中,但我将它们分开以便更容易理解公式。
希望这会有所帮助: - )