这是一个小样本数据集
服务器 | 开始时间 | 结束时间 | 日期 |
---|---|---|---|
服务器1 | 8:35:00 | 8:47:00 | 2023年1月8日 |
服务器2 | 8:33:00 | 9:06:00 | 2023年1月8日 |
服务器1 | 8:47:00 | 9:36:00 | 2023年1月8日 |
服务器2 | 9:06:00 | 9:30:00 | 2023年1月8日 |
服务器1 | 9:36:00 | 9:59:00 | 2023年1月8日 |
服务器2 | 9:49:00 | 9:57:00 | 2023年1月8日 |
我需要一个计算列,其中每行都会计算当前行的 EndTime 和大于或等于当前行的 EndTime 且属于同一服务器的最早 StartTime 之间的持续时间。
预期结果: |服务器|开始时间 |结束时间 |日期 |结果 | | -------- | -------------- |-------- | -------------- |-------------- | |服务器1 | 8:35:00 |8:47:00| 2023 年 1 月 8 日 | 00:00:00| |服务器 2 |8:33:00 |9:06:00|2023 年 1 月 8 日 | 00:00:00| |服务器1| 8:47:00| 9:36:00|2023 年 1 月 8 日 | 00:00:00| |服务器2| 9:06:00 |9:30:00|2023 年 1 月 8 日 | 00:19:00| |服务器 1|9:36:00 |9:59:00|2023 年 1 月 8 日 |空白| |服务器 2 |9:49:00| 9:57:00|2023 年 1 月 8 日 |空白|
我已经尝试过这些公式
DurationBetweenInterviews =
VAR CurrentServer = Interviews[Server]
VAR CurrentEndTime = Interviews[EndTime]
VAR NextStartTime =
MINX(
FILTER(
Interviews,
Interviews[Server] = CurrentServer &&
Interviews[StartTime] > CurrentEndTime
),
Interviews[StartTime]
)
RETURN
IF(
ISBLANK(NextStartTime),
BLANK(),
NextStartTime - CurrentEndTime
)
和
DurationBetweenInterviews =
VAR CurrentServer = Interviews[server]
VAR CurrentEndTime = Interviews[EndTime]
VAR NextStartTime =
CALCULATE(
MIN(Interviews[StartTime]),
FILTER(
ALL(Interviews),
Interviews[server] = CurrentServer &&
Interviews[StartTime] > CurrentEndTime
)
)
RETURN
IF(
ISBLANK(NextStartTime),
BLANK(),
NextStartTime - CurrentEndTime
)
但是两者的结果都表明
服务器 | 开始时间 | 结束时间 | 日期 | 结果 |
---|---|---|---|---|
服务器1 | 8:35:00 | 8:47:00 | 2023年1月8日 | 00:00:00 |
服务器2 | 8:33:00 | 9:06:00 | 2023年1月8日 | 00:00:00 |
服务器1 | 8:47:00 | 9:36:00 | 2023年1月8日 | 00:00:00 |
服务器2 | 9:06:00 | 9:30:00 | 2023年1月8日 | 00:06:00 |
服务器1 | 9:36:00 | 9:59:00 | 2023年1月8日 | 空白 |
服务器2 | 9:49:00 | 9:57:00 | 2023年1月8日 | 空白 |
如您所见,服务器 2 显示的持续时间为 6 分钟,而不是 19 分钟。完整的数据集有几千行,并且包含不同的日期,因此考虑日期列很重要,而且还有其他服务器。
所以问题是,如何纠正我的代码以产生正确的结果?