Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Sintassi
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
Informazioni
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 sulla base di regole specifiche delle impostazioni culturali. Può essere qualsiasi nome di cultura valido. Ad esempio, un'opzione di cultura "ja-JP" individua i record in base alla cultura giapponese. Il valore predefinito è "", che individua le corrispondenze in base alla cultura inglese invariante. -
IgnoreCase: valore logico (true/false) che consente la corrispondenza di chiavi senza distinzione tra maiuscole e minuscole. Ad esempio, quando è vero, "Uva" corrisponde a "l'uva". Il valore predefinito è true. -
IgnoreSpace: valore logico (true/false) che consente la combinazione di parti di testo per trovare corrispondenze. Ad esempio, quando vero, "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 "Uve" (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".
Esempio 1
Join di tipo fuzzy sinistro tra due tabelle basato su [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
]
})