Table.FuzzyNestedJoin

Syntax

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

About

根据 table1 (for) 和 key2 (fortable1table2) 选择key1的键列值模糊匹配的行联接与行的行table2。 结果在名为 newColumnName 的新列中返回。

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

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

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

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

示例 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({})
    ]
})