使用 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]
)