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] )
)
)
我正在努力处理 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] )
)
)