我如何使用 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"))
首先,我将从示例数据开始,我将根据它解释我想要的结果:
索引 | 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"))