Power BI DAX - 使用过滤器计算延迟并避免循环依赖
Power BI DAX - Calculate a delay with filter and avoid circular dependency
我正在使用 Power BI (DAX),但遇到无法解决的问题。
您可以在下面找到我的问题的示例。
一个ID就是一个工作流。每次有状态的行和没有状态的最旧行之间的状态时,我需要找到延迟,考虑到延迟再次开始到下一行
ID
Time
Status
Result I want
ABC
01/07/2020 04:07:00
ABC
03/07/2020 04:14:00
ABC
06/07/2020 06:27:00
Done
4,0917
XYZ
11/06/2020 04:03:00
XYZ
12/06/2020 04:02:00
To check
0,9993
XYZ
15/06/2020 04:02:00
XYZ
16/06/2020 04:04:00
Transfered
1,0014
XYZ
17/06/2020 04:14:00
XYZ
21/06/2020 04:34:00
XYZ
30/06/2020 04:14:00
Done
13,0000
MON
07/09/2020 09:49:00
Cancelled
0,0000
我所做的是创建另一列 Filter 1 和 Filter 2 以创建如下所示的索引
ID
Time
Status
Filter1
Filter2
ABC
01/07/2020 04:07:00
0
1
ABC
03/07/2020 04:14:00
0
1
ABC
06/07/2020 06:27:00
Done
1
1
XYZ
11/06/2020 04:03:00
0
3
XYZ
12/06/2020 04:02:00
To check
1
3
XYZ
15/06/2020 04:02:00
0
2
XYZ
16/06/2020 04:04:00
Transfered
1
2
XYZ
17/06/2020 04:14:00
0
1
XYZ
21/06/2020 04:34:00
0
1
XYZ
30/06/2020 04:14:00
Done
1
1
MON
07/09/2020 09:49:00
Cancelled
1
1
过滤器 1 的公式为:IF('test communauté'[Filter0]="YES",IF('test communauté'[Status]=BLANK(),0,1),0)
过滤器 2 是:
VAR currentid = 'test communauté'[ID]
VAR maxtime = VALUE(CALCULATE(MAX('test communauté'[Time]),'test communauté'[ID]=currentid))
VAR test = SUMX(
FILTER ( 'test communauté',
'test communauté'[Time] >= maxtime
&& 'test communauté'[ID] = currentid
&& 'test communauté'[Filter0] = "YES"
),
'test communauté'[Filter1])
return test
当我尝试使用此列 filter2 为我的延迟创建公式时,我有一个循环依赖。我不知道如何避免这个错误。请记住,我最终需要列中的延迟而不是作为衡量标准,因为我将需要它来计算其他 KPI。
感谢您的帮助,
此致,
亚历克斯
您可以在 maxtime 中使用 REMOVEFILTERS 来移除 Filter2 对 Filter1 的依赖
Filter 2 =
VAR currentid = 'test communauté'[ID]
VAR maxtime =
VALUE (
CALCULATE (
MAX ( 'test communauté'[Time] ),
'test communauté'[ID] = currentid,
REMOVEFILTERS ( 'test communauté'[Filter1] )
)
)
VAR test =
SUMX (
FILTER (
'test communauté',
'test communauté'[Time] >= maxtime
&& 'test communauté'[ID] = currentid
&& 'test communauté'[Filter0] = "YES"
),
'test communauté'[Filter1]
)
RETURN
test
同时阅读这些帖子:
我正在使用 Power BI (DAX),但遇到无法解决的问题。
您可以在下面找到我的问题的示例。
一个ID就是一个工作流。每次有状态的行和没有状态的最旧行之间的状态时,我需要找到延迟,考虑到延迟再次开始到下一行
ID | Time | Status | Result I want |
---|---|---|---|
ABC | 01/07/2020 04:07:00 | ||
ABC | 03/07/2020 04:14:00 | ||
ABC | 06/07/2020 06:27:00 | Done | 4,0917 |
XYZ | 11/06/2020 04:03:00 | ||
XYZ | 12/06/2020 04:02:00 | To check | 0,9993 |
XYZ | 15/06/2020 04:02:00 | ||
XYZ | 16/06/2020 04:04:00 | Transfered | 1,0014 |
XYZ | 17/06/2020 04:14:00 | ||
XYZ | 21/06/2020 04:34:00 | ||
XYZ | 30/06/2020 04:14:00 | Done | 13,0000 |
MON | 07/09/2020 09:49:00 | Cancelled | 0,0000 |
我所做的是创建另一列 Filter 1 和 Filter 2 以创建如下所示的索引
ID | Time | Status | Filter1 | Filter2 |
---|---|---|---|---|
ABC | 01/07/2020 04:07:00 | 0 | 1 | |
ABC | 03/07/2020 04:14:00 | 0 | 1 | |
ABC | 06/07/2020 06:27:00 | Done | 1 | 1 |
XYZ | 11/06/2020 04:03:00 | 0 | 3 | |
XYZ | 12/06/2020 04:02:00 | To check | 1 | 3 |
XYZ | 15/06/2020 04:02:00 | 0 | 2 | |
XYZ | 16/06/2020 04:04:00 | Transfered | 1 | 2 |
XYZ | 17/06/2020 04:14:00 | 0 | 1 | |
XYZ | 21/06/2020 04:34:00 | 0 | 1 | |
XYZ | 30/06/2020 04:14:00 | Done | 1 | 1 |
MON | 07/09/2020 09:49:00 | Cancelled | 1 | 1 |
过滤器 1 的公式为:IF('test communauté'[Filter0]="YES",IF('test communauté'[Status]=BLANK(),0,1),0)
过滤器 2 是:
VAR currentid = 'test communauté'[ID]
VAR maxtime = VALUE(CALCULATE(MAX('test communauté'[Time]),'test communauté'[ID]=currentid))
VAR test = SUMX(
FILTER ( 'test communauté',
'test communauté'[Time] >= maxtime
&& 'test communauté'[ID] = currentid
&& 'test communauté'[Filter0] = "YES"
),
'test communauté'[Filter1])
return test
当我尝试使用此列 filter2 为我的延迟创建公式时,我有一个循环依赖。我不知道如何避免这个错误。请记住,我最终需要列中的延迟而不是作为衡量标准,因为我将需要它来计算其他 KPI。
感谢您的帮助,
此致, 亚历克斯
您可以在 maxtime 中使用 REMOVEFILTERS 来移除 Filter2 对 Filter1 的依赖
Filter 2 =
VAR currentid = 'test communauté'[ID]
VAR maxtime =
VALUE (
CALCULATE (
MAX ( 'test communauté'[Time] ),
'test communauté'[ID] = currentid,
REMOVEFILTERS ( 'test communauté'[Filter1] )
)
)
VAR test =
SUMX (
FILTER (
'test communauté',
'test communauté'[Time] >= maxtime
&& 'test communauté'[ID] = currentid
&& 'test communauté'[Filter0] = "YES"
),
'test communauté'[Filter1]
)
RETURN
test
同时阅读这些帖子: