Table.FuzzyNestedJoin

语法

Table.FuzzyNestedJoin(table1 as table, key1 as any, table2 as table, key2 as any, newColumnName as text, optional joinKind as nullable number, optional joinOptions as nullable record) as table

关于

基于 key1(对于 table1)和 key2(对于 table2)所选择的键列的值的模糊匹配,联接 table1 的行与 table2 的行。 结果在名为 newColumnName 的新列中返回。

模糊匹配是基于文本相似性而不是文本相等性的比较。

可选的 joinKind 指定要执行的联接类型。 默认情况下,如果未指定 joinKind,则执行左外部联接。 选项包括:

可能包含一组可选的 joinOptions 以指定如何比较键列。 选项包括:

  • ConcurrentRequests:一个介于 1 至 8 之间的数字,它指定用于模糊匹配的并行线程数。 默认值为 1。
  • Culture:允许根据区域性特定规则来匹配记录。 它可以是任何有效的区域性名称。 例如,区域性选项“ja-JP”基于日文区域性来匹配记录。 默认值为 "",它基于固定英文区域性进行匹配。
  • IgnoreCase:一个逻辑值 (true/false),它允许不区分大小写的键匹配。 例如,当为 true 时,“Grapes”与“grapes”匹配。 默认值为 true。
  • IgnoreSpace:一个逻辑值 (true/false),它允许组合文本部分来查找匹配项。 例如,当为 true 时,“Gra pes”与“Grapes”匹配。 默认值为 true。
  • NumberOfMatches:一个整数,它指定可为每个输入行返回的最大匹配行数。 例如,值 1 将为每个输入行返回最多一个匹配行。 如果未提供此选项,则返回所有匹配的行。
  • SimilarityColumnName:列的名称,该名称显示输入值与该输入的代表值之间的相似性。 默认值为 null,在这种情况下,将不会添加针对相似性的新列。
  • Threshold:一个介于 0.00 至 1.00 之间的数字,它指定两个值将按其进行匹配的相似性分数。 例如,“Grapes”和“Graes”(缺少“p”)仅在该选项设置为小于 0.90 时匹配。 阈值 1.00 仅允许完全匹配。 (请注意,模糊的“精确匹配”可能会忽略大小写、词序和标点符号等差异。)默认值为 0.80。
  • TransformationTable:一个允许根据自定义值映射来匹配记录的表。 它应包含“From”和“To”列。 例如,如果转换表的“From”列包含“Grapes”,而“To”列包含“Raisins”,则“Grapes”与“Raisins”匹配。 请注意,转换表中重复出现的所有文本都将应用转换。 在上面的转换表中,“Grapes are sweet”也将与“Raisins are sweet”匹配。

示例 1

基于 [FirstName] 的两个表的左侧内部模糊联接

使用情况

Table.FuzzyNestedJoin(
    Table.FromRecords(
        {
            [CustomerID = 1, FirstName1 = "Bob", Phone = "555-1234"],
            [CustomerID = 2, FirstName1 = "Robert", Phone = "555-4567"]
        },
        type table [CustomerID = nullable number, FirstName1 = nullable text, Phone = nullable text]
    ),
    {"FirstName1"},
    Table.FromRecords(
        {
            [CustomerStateID = 1, FirstName2 = "Bob", State = "TX"],
            [CustomerStateID = 2, FirstName2 = "bOB", State = "CA"]
        },
        type table [CustomerStateID = nullable number, FirstName2 = nullable text, State = nullable text]
    ),
    {"FirstName2"},
    "NestedTable",
    JoinKind.LeftOuter,
    [IgnoreCase = true, IgnoreSpace = false]
)

输出

Table.FromRecords({
    [
        CustomerID = 1,
        FirstName1 = "Bob",
        Phone = "555-1234",
        NestedTable = Table.FromRecords({
            [
                CustomerStateID = 1,
                FirstName2 = "Bob",
                State = "TX"
            ],
            [
                CustomerStateID = 2,
                FirstName2 = "bOB",
                State = "CA"
            ]
        })
    ],
    [
        CustomerID = 2,
        FirstName1 = "Robert",
        Phone = "555-4567",
        NestedTable = Table.FromRecords({})
    ]
})