Table.RemoveMatchingRows()

Table.RemoveMatchingRows()可以抽象地概括为function(table, rows as list, optional equationCriteria as any) as table, 意思为该函数的第一个参数为表格,第二参数为串列套记录({[]..[]})形式的复合串列,内嵌的记录用来作匹配的字段的名称需要与第三个参数指定的文本元素(之一)一致,第三个参数可以通过文本元素指定第一个参数用来作匹配的字段。

由于该函数的第二个参数接受结构为串列套记录的复合串列({[]..[]}),与Table.ToReocrds()组合后的功能与左反连接类似。比如说,有两个表格(TableA与TableB)的所有列的名称相同,但是有小部分的行存在差异。

TableA
TableB

如果想从TableA中找到TableB中不存在的行,可以使用左反连接,以下为现实这个思路的代码:

let
    LeftAntiJoin = Table.NestedJoin( TableA, {"Item", "Quantity"}, TableB, {"Item", "Quantity"}, "TableB", JoinKind.LeftAnti ),

    RemoveCol = Table.RemoveColumns( LeftAntiJoin, {"TableB"} )
in
    RemoveCol

Table.RemoveMatchingRows()与Table.ToRecords()的组合,也可以找到不同的行:

= Table.RemoveMatchingRows( TableA, Table.ToRecords( TableB ), { "Item", "Quantity" } )

5 Replies to “Table.RemoveMatchingRows()”

  1. 老师您好,文章中的“ = Table.NestedJoin( TableA, {"Quantity"}, TableB, {"Quantity"}, "TableB", JoinKind.LeftAnti )”代码不严谨,应当改为“= Table.NestedJoin(TableA,{"Item", "Quantity"},TableB,{"Item", "Quantity"},"TableB",JoinKind.LeftAnti)”

  2. 老师您好,文章中的“= Table.RemoveMatchingRows( TableA, Table.ToRecords( TableB ), "Quantity" )"代码不严谨,应当改为“= Table.RemoveMatchingRows( TableA, Table.ToRecords( TableB ),{"Quantity" ,"Item"})"

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注