DAX 计算列,显示一次交互开始与下一次交互之间的差异

问题描述 投票:0回答:1

这是一个小样本数据集

服务器 开始时间 结束时间 日期
服务器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 分钟。完整的数据集有几千行,并且包含不同的日期,因此考虑日期列很重要,而且还有其他服务器。

所以问题是,如何纠正我的代码以产生正确的结果?

powerbi dax visualization powerbi-desktop calculated-columns
1个回答
0
投票

Result = 
VAR serv = 'Table'[server]
VAR endTime = 'Table'[EndTime]
VAR nextTime = 
MINX(
    FILTER('Table', 'Table'[server] = serv && 'Table'[StartTime]>=endTime ), 'Table'[StartTime]
)

RETURN IF(NOT(ISBLANK(nextTime)), nextTime-endTime)
© www.soinside.com 2019 - 2024. All rights reserved.