Condividi tramite


Table.FuzzyJoin

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:

È 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
    ]
})