列中的 PowerPivot 滚动总计
PowerPivot Rolling Total in Column
我被要求调查事件的响应和解决时间。不幸的是,我们现有的工具在这方面没有帮助。以下是 2 张票的数据摘录:
Incident_Id | Status |Begin_Time |End_Time | RowTotal
------------|------------------|------------------|------------------|--------
IM3415346 | Open | 10/03/2017 11:20 | 10/03/2017 11:33 | 787
IM3415346 | Work In Progress | 10/03/2017 11:33 | 10/03/2017 11:55 | 1325
IM3415346 | Work In Progress | 10/03/2017 11:55 | 10/03/2017 13:20 | 5099
IM3415346 | Work In Progress | 10/03/2017 13:20 | 10/03/2017 13:56 | 2133
IM3415346 | Closed | 10/03/2017 13:56 | 10/03/2017 13:56 | 0
IM3415483 | Open | 10/03/2017 12:30 | 10/03/2017 12:39 | 530
IM3415483 | Work In Progress | 10/03/2017 12:39 | 10/03/2017 12:53 | 848
IM3415483 | Work In Progress | 10/03/2017 12:53 | 10/03/2017 14:10 | 4579
IM3415483 | Work In Progress | 10/03/2017 14:10 | 10/03/2017 14:30 | 1199
IM3415483 | Work In Progress | 10/03/2017 14:30 | 10/03/2017 16:55 | 8700
IM3415483 | Closed | 10/03/2017 16:55 | 10/03/2017 16:55 | 0
该工具仅表示工单不符合 SLA,这归因于团队关闭工单,即使他们不是造成延迟的责任人。
理想情况下,我试图为 RowTotal 旁边的每个事件获取一个 运行 总计列:
RowTotal | RunningTotal |
---------|--------------|
787 | 786 |
1325 | 2111 |
5099 | 7210 |
2133 | 9343 |
0 | 9343 |
530 | 530 |
848 | 1377 |
4579 | 5956 |
1199 | 7155 |
8700 | 15855 |
0 | 15855 |
我已经看到了如何将每个事件的所有时间依次累加...
=CALCULATE(SUM(Query[TotalSeconds]),Query[Incident_Id]=EARLIER(Query[Incident_Id]),Query[TotalSeconds]>0)
但我真的很难接受这种 运行 整体方法。有没有人以前可能遇到过这个问题?
我在提供的数据中看不到 TotalSeconds
,所以我将只使用 RowTotal
来说明。请随意更改它以适应您的具体用例。
RunningTotal =
CALCULATE(
SUM(Query[RowTotal]),
FILTER(
Query,
Query[Incident_Id] = EARLIER(Query[Incident_Id]) &&
Query[Begin_Time] <= EARLIER(Query[Begin_Time])
)
)
您缺少使行上下文正常工作的 FILTER
函数。您还需要在 Begin_Time
上添加过滤器,这样它只会添加上次记录的时间,而不是事件中的所有行。
取决于业务逻辑,您可能需要在 Status
或 End_Time
上添加过滤器,但这不在讨论范围内。
结果:
我被要求调查事件的响应和解决时间。不幸的是,我们现有的工具在这方面没有帮助。以下是 2 张票的数据摘录:
Incident_Id | Status |Begin_Time |End_Time | RowTotal
------------|------------------|------------------|------------------|--------
IM3415346 | Open | 10/03/2017 11:20 | 10/03/2017 11:33 | 787
IM3415346 | Work In Progress | 10/03/2017 11:33 | 10/03/2017 11:55 | 1325
IM3415346 | Work In Progress | 10/03/2017 11:55 | 10/03/2017 13:20 | 5099
IM3415346 | Work In Progress | 10/03/2017 13:20 | 10/03/2017 13:56 | 2133
IM3415346 | Closed | 10/03/2017 13:56 | 10/03/2017 13:56 | 0
IM3415483 | Open | 10/03/2017 12:30 | 10/03/2017 12:39 | 530
IM3415483 | Work In Progress | 10/03/2017 12:39 | 10/03/2017 12:53 | 848
IM3415483 | Work In Progress | 10/03/2017 12:53 | 10/03/2017 14:10 | 4579
IM3415483 | Work In Progress | 10/03/2017 14:10 | 10/03/2017 14:30 | 1199
IM3415483 | Work In Progress | 10/03/2017 14:30 | 10/03/2017 16:55 | 8700
IM3415483 | Closed | 10/03/2017 16:55 | 10/03/2017 16:55 | 0
该工具仅表示工单不符合 SLA,这归因于团队关闭工单,即使他们不是造成延迟的责任人。
理想情况下,我试图为 RowTotal 旁边的每个事件获取一个 运行 总计列:
RowTotal | RunningTotal |
---------|--------------|
787 | 786 |
1325 | 2111 |
5099 | 7210 |
2133 | 9343 |
0 | 9343 |
530 | 530 |
848 | 1377 |
4579 | 5956 |
1199 | 7155 |
8700 | 15855 |
0 | 15855 |
我已经看到了如何将每个事件的所有时间依次累加...
=CALCULATE(SUM(Query[TotalSeconds]),Query[Incident_Id]=EARLIER(Query[Incident_Id]),Query[TotalSeconds]>0)
但我真的很难接受这种 运行 整体方法。有没有人以前可能遇到过这个问题?
我在提供的数据中看不到 TotalSeconds
,所以我将只使用 RowTotal
来说明。请随意更改它以适应您的具体用例。
RunningTotal =
CALCULATE(
SUM(Query[RowTotal]),
FILTER(
Query,
Query[Incident_Id] = EARLIER(Query[Incident_Id]) &&
Query[Begin_Time] <= EARLIER(Query[Begin_Time])
)
)
您缺少使行上下文正常工作的 FILTER
函数。您还需要在 Begin_Time
上添加过滤器,这样它只会添加上次记录的时间,而不是事件中的所有行。
取决于业务逻辑,您可能需要在 Status
或 End_Time
上添加过滤器,但这不在讨论范围内。
结果: