首页 > 解决方案 > 如何使用 DAX 计算同一 id 的两个不同状态转换之间的天数差异

问题描述

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

指数 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 ”转换为“ In Progress ”(这种转换可以多次应用于同一个 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

标签: powerbidax

解决方案


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

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"))

在此处输入图像描述


推荐阅读