【问题标题】:Check if value in column B exists in column A检查 B 列中的值是否存在于 A 列中
【发布时间】:2019-10-08 15:16:04
【问题描述】:

在 Power BI 中使用 Power Query,如果 B 列中的值存在于 A 列中,我需要检查 MyTable 的每一行。

如果是,则应在新列上返回该值,然后应在该列上返回一个空字段。

这是我试图以某种方式输入 if 语句的代码:

Table.Contains(MyTable,[B],[A])

这会导致循环引用错误。

【问题讨论】:

    标签: powerbi powerquery


    【解决方案1】:

    一种简单的方法就是将表格合并到自身上

    Home..Merge Queries ... 并将 Table1 合并到 Table1(Current),然后单击顶部的 ColumnB 和底部的 ColumnA。使用新列顶部的箭头展开结果,然后仅选择 [x] ColumnA。

    示例代码

    let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Merged Queries" = Table.NestedJoin(Source,{"Column2"},Source,{"Column1"},"Source",JoinKind.LeftOuter),
    #"Expanded Source" = Table.ExpandTableColumn(#"Merged Queries", "Source", {"Column1"}, {"Column1.1"})
    in #"Expanded Source"
    

    【讨论】:

    • PQ 中的所有连接都使用“NestedJoin”功能。这绝对是一个非常有效和快速的检查,但也可能导致问题,具体取决于 A 列和 B 列中的数据。如果 A 列中有任何重复值,那么它将通过扩展连接操作创建重复行。如果是这种情况,您将希望添加一个自定义列来检查连接结果是否为空表并将值保留在 B 中或返回空白,而不是扩展连接结果。
    【解决方案2】:

    我不知道你想要这些结果在哪里,所以我只是将它作为附加列添加到理论样本表中。

    鉴于此表:

    还有这段代码:

    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Added Custom" = Table.AddColumn(Source, "C", each if List.Contains(Source[A], [B]) then [B] else null)
    in
        #"Added Custom"
    

    给出这个结果:

    【讨论】:

    • 感谢您的帮助,我收到错误消息“无法将值...转换为 List 类型,A 列和 B 列属于文本类型。
    • 此解决方案运行良好。如果你写的是[A] 而不是Source[A],它会给你这个错误。后者是一个列表,而前者是一个单元格值。
    • 这个确切的代码只适用于我在这里展示的示例。我不知道您的数据是什么样的,所以我不能说您需要在那里更改什么,但是“Source [A]”应该是对表中列的引用(您正在检查是否B中的值存在于)。
    猜你喜欢
    • 2015-02-07
    • 2021-10-26
    • 1970-01-01
    • 2019-12-14
    • 2017-09-19
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多