我如何使用 DAX 计算同一 ID 的两个不同状态转换之间的天数差异

How can i calculate the days difference between two distinct status transitions for the same id using DAX

首先,我将从示例数据开始,我将根据它解释我想要的结果:

索引 ID 时间戳 状态
1 25730 2020-06-24 07:22:31.297 进行中
2 25730 2020-06-29 06:28:20.193 就绪
3 25730 2020-06-30 07:21:05.147 进行中
4 25730 2020-06-30 09:40:27.670 就绪
5 25730 2020-07-01 07:23:11.277 进行中
6 25730 2020-07-05 11:06:02.413 就绪
110 25735 2020-06-30 09:36:04.050 就绪
141 25738 2020-06-28 11:49:09.557 进行中
142 25738 2020-06-28 11:51:44.503 就绪
143 25738 2020-06-29 05:05:45.777 进行中
144 25738 2020-06-29 05:12:54.617 就绪
145 25738 2020-07-13 12:17:46.873 就绪
146 25738 2020-07-15 16:21:09.667 进行中
147 25738 2020-07-20 16:46:59.840 就绪
148 25738 2020-07-24 16:49:57.003 进行中

基于上述示例,我正在尝试计算状态转换之间的天数差异。更具体地说,id 从“Ready”进行转换需要多长时间 到“进行中”(此转换可以针对同一 ID 应用多次)。其他过渡并不重要。 以下是我期望的结果以及我到目前为止所做的尝试的示例:

Diff = 
     var _ready = calculate(FIRSTNONBLANK(Query1[timestamp_utc],filter(query1,Query1[nextstatus] = "Ready")))
     var _progress = calculate(FIRSTNONBLANK(Query1[timestamp_utc],filter(Query1,Query1[nextstatus]="In Progress")))
    return
    DATEDIFF(_ready,_progress,day)
索引 id 时间戳 状态 天差
1 25730 2020-06-24 07:22:31.297 进行中
2 25730 2020-06-29 06:28:20.193 就绪
3 25730 2020-06-30 07:21:05.147 进行中 1
4 25730 2020-06-30 09:40:27.670 就绪
5 25730 2020-07-01 07:23:11.277 进行中 1
6 25730 2020-07-05 11:06:02.413 就绪
110 25735 2020-06-30 09:36:04.050 就绪
141 25738 2020-06-28 11:49:09.557 进行中
142 25738 2020-06-28 11:51:44.503 就绪
143 25738 2020-06-29 05:05:45.777 进行中 1
144 25738 2020-06-29 05:12:54.617 就绪
145 25738 2020-07-13 12:17:46.873 就绪
146 25738 2020-07-15 16:21:09.667 进行中 2
147 25738 2020-07-20 16:46:59.840 就绪
148 25738 2020-07-24 16:49:57.003 进行中 4

看看这个视频可能会有帮助https://youtu.be/5yq7p2WYFTo 延迟桶分析

整个度量(如果索引是唯一的):

Measure 2 = 
var __currentIndex = SELECTEDVALUE(Sheet1[Index])
var __currentID = SELECTEDVALUE(Sheet1[ID])
var __previousReady = CALCULATE( MAX(Sheet1[timestamp]), FILTER(ALL(Sheet1), Sheet1[ID] = __currentID && Sheet1[Index] < __currentIndex && Sheet1[Status] = "Ready"))

return
CALCULATE( DATEDIFF(__previousReady, SELECTEDVALUE(Sheet1[timestamp]) ,DAY), FILTER(ALL(Sheet1[Status]), Sheet1[Status] = "In Progress"))