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

同时阅读这些帖子:

  1. Circular Dependency between Calculated Columns in a Fact Table