Power Query - 合并查询 returns true or false

Power Query - Merge queries returns true or false

我想知道如果 2 个查询之间的合并是否匹配数据,M 语言是否可以 return 仅判断真或假?

或多或少,类似于Excel中ISNA函数的函数VLOOKUP

谢谢

认为这可能会提供你想要的,特别是使用合并:

如果我从来自两个不同查询的两个 table 开始(我的查询名为 Query1 和 Query2):

如果我想查看 Query2 中的哪些不在 Query1 中,我单击“主页”>“合并查询”>,然后像这样设置对话框并单击“确定”:

这给了我这个:

然后我通过单击列右上角的 展开 Query2 列中的 tables 以获取此内容:

然后我点击公式栏左侧的,在公式栏中输入= Table.TransformColumns(#"Expanded Query2", {"Column1.1", each if _ = null then false else true}),然后点击回车得到这个:

(如果您查看屏幕右侧,在 Applied Steps 下,您会看到 Expanded Query2 是上一步。每个步骤也恰好是 table 状态,就像查询结果是 table 状态。您可以将这些 table 状态用作 tables,就像您将查询结果用作 tables...因为它们基本上是 tables。此代码从之前的 table 状态转换列。此外,如果您没有看到公式栏,请单击“查看”选项卡并选中公式栏框。)

*****在@Frederic Le Guen 的评论后添加*****

这里有一个更直接的方法List.Contains,可能更符合您的要求。

从与上面相同的两个查询中的相同两个 table 开始,查询名为 Query1 和 Query1 和 Query2:

进入 Query1 并向其添加一列 - 添加列 > 自定义列 - 并像这样设置它:

然后单击“确定”。

你会得到这个:

假设我想检查此 table ("firstTable") 中的值:

存在于此table下方("secondTable"):

方法一

如果您只想检查是否存在(而不是实际执行合并),那么这可能是一种方法:

let
    firstTable = Table.FromColumns({List.Numbers(1,10,1)}, type table [column A=Int64.Type]),
    secondTable = Table.FromColumns({List.Numbers(1,10,2)}, type table [column B=Int64.Type]),
    check = Table.AddColumn(firstTable, "Is column A in column B?", each Table.Contains(secondTable, [column B = [column A]]), type logical)
in
    check

方法二

类似但更详细的方法可能是:

let
    firstTable = Table.FromColumns({List.Numbers(1,10,1)}, type table [column A=Int64.Type]),
    secondTable = Table.FromColumns({List.Numbers(1,10,2)}, type table [column B=Int64.Type]),
    check = Table.AddColumn(firstTable, "Is column A in column B?", each let colA = [column A], lookup = Table.MatchesAnyRows(secondTable, each [column B] = colA) in lookup, type logical)
in
    check

方法 3

此方法将实际执行合并,然后检查每个 merged/joined table 是否包含任何行。我想它会比其他的慢(理论上它会尝试 merge/match 所有行并且不会在找到一个匹配项后立即退出),但我可能是错的,这取决于 Table.Join的内部实现。

let
    firstTable = Table.FromColumns({List.Numbers(1,10,1)}, type table [column A=Int64.Type]),
    secondTable = Table.FromColumns({List.Numbers(1,10,2)}, type table [column B=Int64.Type]),
    merged = Table.NestedJoin(firstTable, {"column A"}, secondTable, {"column B"}, "Is column A in the second table?", JoinKind.LeftOuter),
    isEmpty = Table.TransformColumns(merged, {{"Is column A in the second table?", Table.IsEmpty, type logical}})
in
    isEmpty 

我已经给出了三种方法,因为你没有展示你的 data/example。很难建议什么会奏效。但希望您可以尝试使用它们,其中之一将是 useful/performant 适合您的数据大小。

请注意,前两行(每个 M 片段的)只是为了创建一些虚拟 tables firstTablesecondTable.