强大的查询-合并查询返回true或false

时间:2019-03-09 09:55:14

标签: merge powerquery m

我想知道,如果2个查询之间的合并与数据匹配,M语言是否可能仅返回True或False?

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

谢谢

2 个答案:

答案 0 :(得分:1)

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

如果我从两个不同查询的两个表开始(我的查询分别命名为Query1和Query2):

Query1 Query2

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

enter image description here

哪个给我这个:

enter image description here

然后,通过单击列右上方的enter image description here来展开Query2列中的表以获取此信息:

enter image description here

然后,我单击公式栏左侧的enter image description here,然后在公式栏中键入= Table.TransformColumns(#"Expanded Query2", {"Column1.1", each if _ = null then false else true}),然后单击Enter以获取以下信息:

enter image description here

((如果您查看屏幕的右侧,在应用步骤下,您会看到扩展查询2是上一步。每个步骤也恰好是表状态,就像查询结果是表状态一样。您可以将这些表状态用作表,就像将查询结果用作表一样...因为它们基本上是表。此代码可从先前的表状态转换列。没有看到编辑栏,请单击“视图”选项卡并选中“编辑栏”框。)

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

这是使用List.Contains的一种更直接的方法,这可能与您要查找的内容更加一致。

从与上述相同的两个查询中的相同两个表开始,并命名为Query1和Query1和Query2:

Query1 Query2

进入Query1并向其中添加一列-添加列>自定义列-并按如下所示进行设置:

enter image description here

然后单击确定。

您会得到的:

enter image description here

答案 1 :(得分:0)

说我要检查此表("firstTable")中的值:

First table

存在于下表("secondTable")中:

Second table

方法1

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

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

方法2

类似但更冗长的方法可能是:

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

此方法将实际执行合并,然后检查每个合并/联接的表是否包含任何行。我可以想象它会比其他慢(理论上它会尝试合并/匹配所有行,并且一旦找到一个匹配就不会退出),但是我可能是错的,它取决于{{1} }的内部实现。

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 代码段的前两行仅用于创建一些虚拟表MfirstTable