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 指定外部联接,则执行左外部联接。 选项包括:
- JoinKind.Inner
- JoinKind.LeftOuter
- JoinKind.RightOuter
- JoinKind.FullOuter
- JoinKind.LeftAnti
- JoinKind.RightAnti
- JoinKind.LeftSemi
- JoinKind.RightSemi
可以包含一组 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({})
]
})