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
Unisce le righe di table1
alle righe di table2
in base a una corrispondenza fuzzy dei valori delle colonne chiave selezionate da key1
(per table1
) e key2
(per table2
).
La corrispondenza fuzzy è un confronto basato sulla somiglianza del testo anziché sull'uguaglianza del testo.
Per impostazione predefinita viene eseguito un inner join, ma è possibile includere il parametro joinKind
facoltativo per specificare il tipo di join. Le opzioni includono:
- JoinKind.Inner
- JoinKind.LeftOuter
- JoinKind.RightOuter
- JoinKind.FullOuter
- JoinKind.LeftAnti
- JoinKind.RightAnti
- JoinKind.LeftSemi
- JoinKind.RightSemi
È possibile includere un set facoltativo di joinOptions
per specificare la modalità di confronto delle colonne chiave. Le opzioni includono:
-
ConcurrentRequests
: numero compreso tra 1 e 8 che specifica il numero di thread paralleli da usare per la corrispondenza fuzzy. Il valore predefinito è 1. -
Culture
: consente la corrispondenza dei record in base a regole specifiche delle impostazioni cultura. Può essere qualsiasi nome di impostazioni cultura valido. Ad esempio, con l'opzione Culture "ja-JP" vengono individuati i record in base alle impostazioni cultura Giapponese. Il valore predefinito è "", che individua le corrispondenze in base alle impostazioni cultura Inglese invariante. -
IgnoreCase
: valore logico (true/false) che consente la corrispondenza di chiavi senza distinzione tra maiuscole e minuscole. Ad esempio, se true, "Uva" corrisponde a "uva". Il valore predefinito è true. -
IgnoreSpace
: valore logico (true/false) che consente la combinazione di parti di testo per trovare corrispondenze. Ad esempio, se true, "U va" corrisponde a "Uva". Il valore predefinito è true. -
NumberOfMatches
: numero intero che specifica il numero massimo di righe corrispondenti che possono essere restituite per ogni riga di input. Ad esempio, il valore 1 restituirà al massimo una riga corrispondente per ogni riga di input. Se questa opzione non viene specificata, vengono restituite tutte le righe corrispondenti. -
SimilarityColumnName
: nome della colonna che mostra la somiglianza tra un valore di input e il valore rappresentativo per tale input. Il valore predefinito è Null, nel qual caso non verrà aggiunta una nuova colonna per le somiglianze. -
Threshold
: numero compreso tra 0,00 e 1,00 che specifica il punteggio di somiglianza al cui raggiungimento verranno fatti corrispondere due valori. Ad esempio, "Uva" e "Uv" (senza "a") vengono fatti corrispondere solo se questa opzione è impostata su meno di 0,90. Una soglia di 1,00 consente solo corrispondenze esatte. Si noti che una "corrispondenza esatta" fuzzy potrebbe ignorare le differenze, ad esempio maiuscole e minuscole, ordine delle parole e punteggiatura. Il valore predefinito è 0,80. -
TransformationTable
: tabella che consente la corrispondenza dei record in base ai mapping di valori personalizzati. Deve contenere le colonne "From" e "To". Ad esempio, "Uva" viene abbinato a "Uva passa" se si specifica una tabella di trasformazione in cui la colonna "From" contiene "Uva" e la colonna "To" contiene "Uva passa". Si noti che la trasformazione verrà applicata a tutte le occorrenze del testo nella tabella di trasformazione. Con la tabella di trasformazione precedente, "Uva è dolce" sarà abbinato anche a "Uva passa è dolce".
Inner join fuzzy a sinistra di due tabelle in base a [FirstName]
Utilizzo
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]
)
Output
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
]
})