使用 TOPN 和过滤器的 DAX 查找值
DAX Lookupvalue with TOPN and filter
我正在尝试使用过滤器和 TOPN 从另一个 table 中查找值。
我有两个这样的table:
表 1
ID Latest
X-1
X-2
Table2(Key 是 ID 和 Start 的串联)
ID Start Key Status
X-1 1 X-1 - 1 Done
X-1 2 X-1 - 2 Done
X-1 3 X-1 - 3 Open
X-1 4 X-1 - 4 Open
X-2 1 X-2 - 1 Done
X-2 2 X-2 - 2 Open
X-2 3 X-2 - 3 Open
X-2 4 X-2 - 4 Open
我想做的是,对于 Table1[Latest]
中的空值,根据 Table2[Start]
中的最高数字并且仅 Table2[Key]
中的值找到 Table2[Key]
中的值=17=] 和 "Open"
分别对应 Table1
.
中的每个 ID
因此表 1 的结尾为:
ID Latest
X-1 X-1 - 2
X-2 X-2 - 1
我的想法类似于
Latest = LOOKUPVALUE(ggTwo[Key], ggTwo[ID], TOPN(1, ggTwo, CALCULATE(ALL(ggTwo[ID]), FILTER(ggTwo, ggTwo[ID] = ggOne))))
但这是指多列。我不确定如何解决这个问题。
我会使用 MAXX
而不是 TOPN
。例如,
Latest = MAXX(
FILTER(Table2,
Table2[Status] = "Done" &&
Table2[ID] = EARLIER(Table1[ID])),
Table2[Key])
如果您有基于 ID
列的关系,则不需要第二个条件:
Latest = MAXX(FILTER(RELATEDTABLE(Table2), Table2[Status] = "Done"), Table2[Key])
为了在状态打开时获得最佳起点,我在 table 二上创建了一个计算列。
LastOpenStart =
CALCULATE (
MAX ( ggTwo[Start] ),
ggTwo[Status] = "open",
FILTER ( ggTwo, ggTwo[ID] = EARLIER ( ggTwo[ID] ) )
//Query
EVALUATE
SELECTCOLUMNS(
NATURALINNERJOIN (
FILTER ( ggTwo, ggTwo[LastOpenStart] = ggTwo[Start] ),
FILTER ( ggOne, ggOne[Latest] = BLANK () )
),
"ID",ggTwo[ID],
"Key",ggTwo[Key]
)
我正在尝试使用过滤器和 TOPN 从另一个 table 中查找值。
我有两个这样的table:
表 1
ID Latest
X-1
X-2
Table2(Key 是 ID 和 Start 的串联)
ID Start Key Status
X-1 1 X-1 - 1 Done
X-1 2 X-1 - 2 Done
X-1 3 X-1 - 3 Open
X-1 4 X-1 - 4 Open
X-2 1 X-2 - 1 Done
X-2 2 X-2 - 2 Open
X-2 3 X-2 - 3 Open
X-2 4 X-2 - 4 Open
我想做的是,对于 Table1[Latest]
中的空值,根据 Table2[Start]
中的最高数字并且仅 Table2[Key]
中的值找到 Table2[Key]
中的值=17=] 和 "Open"
分别对应 Table1
.
ID
因此表 1 的结尾为:
ID Latest
X-1 X-1 - 2
X-2 X-2 - 1
我的想法类似于
Latest = LOOKUPVALUE(ggTwo[Key], ggTwo[ID], TOPN(1, ggTwo, CALCULATE(ALL(ggTwo[ID]), FILTER(ggTwo, ggTwo[ID] = ggOne))))
但这是指多列。我不确定如何解决这个问题。
我会使用 MAXX
而不是 TOPN
。例如,
Latest = MAXX(
FILTER(Table2,
Table2[Status] = "Done" &&
Table2[ID] = EARLIER(Table1[ID])),
Table2[Key])
如果您有基于 ID
列的关系,则不需要第二个条件:
Latest = MAXX(FILTER(RELATEDTABLE(Table2), Table2[Status] = "Done"), Table2[Key])
为了在状态打开时获得最佳起点,我在 table 二上创建了一个计算列。
LastOpenStart =
CALCULATE (
MAX ( ggTwo[Start] ),
ggTwo[Status] = "open",
FILTER ( ggTwo, ggTwo[ID] = EARLIER ( ggTwo[ID] ) )
//Query
EVALUATE
SELECTCOLUMNS(
NATURALINNERJOIN (
FILTER ( ggTwo, ggTwo[LastOpenStart] = ggTwo[Start] ),
FILTER ( ggOne, ggOne[Latest] = BLANK () )
),
"ID",ggTwo[ID],
"Key",ggTwo[Key]
)