PowerBI - DAX(在筛选区域中查找以前的时间和其他列中的 return 值)

PowerBI - DAX (Find previous time in filtered area and return value from other column)

我正在努力处理 DAX 中的一项任务。

实现(黄色栏):
在筛选范围内查找以前的日期时间值,并从其他列中查找 return 值。我想要一个 ID (MOVE_ID),而不是上一次移动的时间,它工作正常,如下所示。

已经实现(绿色列 - 工作正常):
我能够 return 值本身(如下所示的 MAX 函数)。我试图从昨天开始改变以满足我的要求,但没有成功。我认为这很微不足道,但缺少技巧:)

    CALCULATE(
        MAX(TABLE1[Move_TIME]),
        FILTER(
            ALL(TABLE1),
            TABLE1[Move_EQ] = EARLIER(TABLE1[Move_EQ])  
            && TABLE1[Move_EQ] <> BLANK()
            && [TABLE1Move_TIME] < EARLIER(TABLE1[Move_TIME])
        )
    )
Move_ID Move_EQ Move_TIME Move_TIME_OF_PREVIOUS_MOVE Move_ID_OF_PREVIOUS_MOVE
1 EQ1 2021-12-13 11:02:14 null
2 EQ1 2021-12-13 11:03:01 2021-12-13 11:02:14 1
3 EQ2 2021-12-13 11:15:33 null
4 EQ1 2021-12-13 13:12:00 2021-12-13 11:03:01 2
5 EQ2 2021-12-13 14:00:00 2021-12-13 11:15:33 3
6 EQ2 2021-12-13 14:01:00 2021-12-13 14:00:00 5
7 EQ1 2021-12-13 14:32:11 2021-12-13 13:12:00 4
8 EQ1 2021-12-13 14:44:54 2021-12-13 14:32:11 7
9 EQ1 2021-12-13 14:45:01 2021-12-13 14:44:54 8
10 EQ1 2021-12-13 15:01:09 2021-12-13 14:45:01 9

提前谢谢您!

你可以这样写一个度量

Measure =
VAR _current =
    MAX ( 'transaction'[Move_Time] )
VAR _eq =
    MAX ( 'transaction'[Move_EQ] )
VAR _immediatelyPrecedingDate =
    CALCULATE (
        MAX ( 'transaction'[Move_Time] ),
        FILTER ( ALL ( 'transaction' ), 'transaction'[Move_Time] < _current ),
        'transaction'[Move_EQ] = _eq
    )
VAR _id =
    CALCULATE (
        MAX ( 'transaction'[Move_ID] ),
        FILTER (
            ALL ( 'transaction' ),
            'transaction'[Move_Time] = _immediatelyPrecedingDate
                && 'transaction'[Move_EQ] = _eq
        )
    )
RETURN
    _id

或者,如果您更喜欢计算列,则可以利用已创建的列来创建新列

Move_ID_OF_PREVIOUS_MOVE =
CALCULATE (
    MAX ( 'transaction'[Move_ID] ),
    FILTER (
        ALL ( 'transaction' ),
        'transaction'[Move_EQ] = EARLIER ( 'transaction'[Move_EQ] )
            && 'transaction'[Move_EQ] <> BLANK ()
            && 'transaction'[Move_Time] = EARLIER ( 'transaction'[Move_TIME_OF_PREVIOUS_MOVE] )
    )
)