Power Query - 合并查询返回 true 或 false
Posted
技术标签:
【中文标题】Power Query - 合并查询返回 true 或 false【英文标题】:Power Query - Merge queries returns true or false 【发布时间】:2019-03-09 09:55:13 【问题描述】:我想知道如果 2 个查询之间的合并匹配数据,M 语言是否可以只返回 True 或 False ?
或多或少,类似于 Excel 中用于函数 VLOOKUP 的 ISNA 函数
谢谢
【问题讨论】:
您的更广泛目标是什么?也就是说,你用真假信息做什么? 【参考方案1】:我认为这可能会提供您想要的,特别是使用合并:
如果我从来自两个不同查询的两个表开始(我的查询名为 Query1 和 Query2):
如果我想查看哪些 Query2 不在 Query1 中,我点击 Home > Merge Queries > 然后我设置这样的对话框并点击 OK:
这给了我这个:
然后我通过单击列右上角的来展开 Query2 列中的表以获得以下信息:
然后我点击编辑栏左侧的,在编辑栏中输入= Table.TransformColumns(#"Expanded Query2", "Column1.1", each if _ = null then false else true)
,然后点击回车得到这个:
(如果您查看屏幕右侧的 Applied Steps 下方,您会看到 Expanded Query2 是上一步。每个步骤也恰好是一个表格状态,就像查询结果是表状态一样。您可以将这些表状态用作表,就像将查询结果用作表一样...因为它们基本上是表。此代码将列从先前的表状态转换。此外,如果您没有看到公式栏,请单击“查看”选项卡并选中“公式栏”框。)
*****在@Frederic Le Guen 的评论后添加*****
这是使用 List.Contains 的一种更直接的方式,它可能更符合您的要求。
从我上面所做的两个查询中的相同两个表开始,查询名为 Query1 和 Query1 和 Query2:
进入 Query1 并向其中添加一列 -- 添加列 > 自定义列 -- 并像这样设置它:
然后点击确定。
你会得到这个:
【讨论】:
是的,谢谢,但我认为可以用更少的步骤达到相同的结果。如果不可能,解决方案很有趣 如果您查看 List 函数,您可能会发现更适合您真正最终目标的内容。 我已经尝试过类似List.IsEmpty(List.FindText(myList, "string"))
的函数,但它是一个非常慢的函数。所以我试图找到更好的方法
我在回答的最后添加了另一种可能更符合您的要求的方式。它使用 List.Contains。
我的 List.Contains 示例与@Chillin 的方法 1 基本相同。【参考方案2】:
假设我想检查此表中的哪些值 ("firstTable"
):
存在于下表中("secondTable"
):
方法 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
这种方法实际上会执行合并,然后检查每个合并/连接的表是否包含任何行。我想它会比其他的慢(理论上它会尝试合并/匹配所有行并且一旦找到一个匹配项就不会退出),但我可能错了,这取决于Table.Join
' s 内部实现。
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
我给出了三种方法,因为您没有展示您的数据/示例。很难建议什么会运作良好。但希望您可以尝试它们,其中一种对您的数据大小有用/有效。
注意前两行(每个M
sn-p)只是为了创建一些虚拟表firstTable
和secondTable
。
【讨论】:
以上是关于Power Query - 合并查询返回 true 或 false的主要内容,如果未能解决你的问题,请参考以下文章
为啥power query合并查询中的右反查询出来的结果为空