我有一个 PowerPivot 表,我需要能够确定某个项目处于错误状态的时间。我的数据集看起来像这样:
我需要做的是查看 ID 和 State 列中的值,并查看 State 列中前一行的值是否为 ERROR,以及 ID 列中的值是否相同。如果是,那么我需要计算这两行中的更改日期值之间的差异。
例如,当我到达第 4 行时,我会看到第 3 行(前一行)的 State 列中的值是 ERROR,并且前一行的 ID 列中的值是与当前行相同,因此我将计算第 3 行和第 4 行中的更改日期值之间的差异(对于此特定要求,我不关心任何其他列中的值)。
有没有办法在 PowerPivot 中执行此操作?我已经进行了大量的互联网搜索,看起来如果可以做到的话,它将使用早期或最早的 DAX 函数,但我找不到任何东西告诉我如何,或者即使,这可以完成。
谢谢。
最佳答案
克里斯,
我曾经有过很多次类似的需求,经过很长一段时间的反复试验,我终于明白了 EARLIER作品。它可能非常强大,但也非常慢,因此请务必检查计算的性能。
要回答您的问题,您需要创建 4 个计算列:
1) 项目排名 - 用于对具有相同项目 ID 的问题进行排名
=COUNTROWS(FILTER('ID', EARLIER([Item ID]) = [Item ID] && EARLIER([Date]) >= [Date]))
2) 跟随错误 - 轻松查找错误问题之后的问题
=IF([State] = "EROR",[Item Rank]+1)
3) 后续问题的时间 - 简单查找,以便您可以计算不同的
=IF([Follows Error]>0,
LOOKUPVALUE([Date], [User], [User], [Item Rank], [Follows Error]),
BLANK()
)
4) 时间差异 - 计算特定问题的时间差异
=IF([State]="EROR",
DAY([Time of Following Issue])-DAY([Date]),
BLANK()
)
使用这些计算列,您可以轻松创建 powerpivot 表,将“State”和“Item Id”拖到“ROWS” Pane 上,然后简单地将时间差异添加到值。您将获得包含字符串“EROR”问题的问题概述以及解决这些问题所需的时间。
这就是 PowerPivot 窗口中的样子:
以及生成的数据透视表:
您可以下载我的Excel file here (2013)。
正如我所提到的,请注意性能,因为具有嵌套 EARLIER 和 IF 条件的计算列可能对性能要求过高。如果有更聪明的方法,我会很高兴看到它,但目前这对我来说很好。
此外,请记住,所有计算列都可以嵌套到 1 中,但我将它们分开以便更容易理解公式。
希望这有帮助:-)
关于dax - 我可以在 PowerPivot 中比较相邻行中同一列中的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111109/