Table.FuzzyJoin
Table.FuzzyJoin(table1 as table, key1 as any, table2 as table, key2 as any, optional joinKind as nullable number, optional joinOptions as nullable record) as table
根據 table1
(代表 table2
) 和 key1
(代表 table1
) 所選取索引鍵資料行值的模糊比對,聯結 key2
的資料列與 table2
的資料列。
模糊比對的比較是根據文字相似度,而不是文字相等度。
根據預設,會執行內部聯結,但可能會納入選擇性的 joinKind
來指定聯結類型。 這些選項包括:
- JoinKind.Inner
- JoinKind.LeftOuter
- JoinKind.RightOuter
- JoinKind.FullOuter
- JoinKind.LeftAnti
- JoinKind.RightAnti
- JoinKind.LeftSemi
- JoinKind.RightSemi
或可選擇加入一組 joinOptions
以指定索引鍵資料行的比較方式。 這些選項包括:
-
ConcurrentRequests
:介於 1 到 8 之間的數字,指定要用於模糊比對的平行執行緒數目。 預設值是 1。 -
Culture
:允許根據文化特性特定規則來比對記錄。 可以是任何有效的文化特性名稱。 例如,文化特性 (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 之間的數字,指定兩個值相符的相似性分數。 例如,只有在此選項設為 0.90 以下時,"Grapes" 和 "Graes" (缺少 "p") 才會相符。 閾值 1.00 只允許完全相符。 (請注意,模糊的「完全相符」可能會忽略大小寫、文字順序和標點符號等差異。)預設值為 0.80。 -
TransformationTable
:資料表,允許根據自訂值對應來比對記錄。 應該包含 "From" 和 "To" 資料行。 例如,若轉換資料表中提供包含 "Grapes" 的 "From" 資料行及包含 "Raisins" 的 "To" 資料行,則 "Grapes" 會與 "Raisins" 相符。 請注意,轉換會套用至轉換資料表中所有出現的文字。 使用上述的轉換資料表,"Grapes are sweet" 也會視為與 "Raisins are sweet" 相符。
根據 [FirstName] 留下兩個資料表的內部模糊聯結
使用方式
Table.FuzzyJoin(
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"},
JoinKind.LeftOuter,
[IgnoreCase = true, IgnoreSpace = false]
)
輸出
Table.FromRecords({
[
CustomerID = 1,
FirstName1 = "Bob",
Phone = "555-1234",
CustomerStateID = 1,
FirstName2 = "Bob",
State = "TX"
],
[
CustomerID = 1,
FirstName1 = "Bob",
Phone = "555-1234",
CustomerStateID = 2,
FirstName2 = "bOB",
State = "CA"
],
[
CustomerID = 2,
FirstName1 = "Robert",
Phone = "555-4567",
CustomerStateID = null,
FirstName2 = null,
State = null
]
})