Partager via


Table.FuzzyJoin

Syntaxe

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

À propos

Joint les lignes des lignes des table1 lignes basées table2 sur une correspondance approximative des valeurs des colonnes clés sélectionnées par key1 (pour table1) et key2 (pour table2).

La correspondance approximative est une comparaison basée sur la similarité du texte plutôt que sur l’égalité du texte.

Par défaut, une jointure interne est effectuée, mais une option peut joinKind être incluse pour spécifier le type de jointure. Les options sont les suivantes :

Un ensemble facultatif de joinOptions colonnes peut être inclus pour spécifier comment comparer les colonnes clés. Les options sont les suivantes :

  • ConcurrentRequests: nombre compris entre 1 et 8 qui spécifie le nombre de threads parallèles à utiliser pour la correspondance approximative. La valeur par défaut est 1.
  • Culture: autorise la mise en correspondance d’enregistrements en fonction de règles spécifiques à la culture. Il peut s’agir de n’importe quel nom de culture valide. Par exemple, une option Culture de «ja-JP» correspond aux enregistrements basés sur la culture japonaise. La valeur par défaut est « », qui correspond à la culture anglaise invariante.
  • IgnoreCase: valeur logique (true/false) qui autorise la correspondance de clé non sensible à la casse. Par exemple, lorsqu’il est vrai, « Raisins » est mis en correspondance avec « raisins ». La valeur par défaut est true.
  • IgnoreSpace: valeur logique (true/false) qui permet de combiner des parties de texte afin de rechercher des correspondances. Par exemple, quand la valeur est true, « Gra pes » est mise en correspondance avec « Raisins ». La valeur par défaut est true.
  • NumberOfMatches: nombre entier qui spécifie le nombre maximal de lignes correspondantes qui peuvent être retournées pour chaque ligne d’entrée. Par exemple, une valeur de 1 retourne au maximum une ligne correspondante pour chaque ligne d’entrée. Si cette option n’est pas fournie, toutes les lignes correspondantes sont retournées.
  • SimilarityColumnName: nom de la colonne qui affiche la similarité entre une valeur d’entrée et la valeur représentative de cette entrée. La valeur par défaut est Null, auquel cas une nouvelle colonne pour les similitudes n’est pas ajoutée.
  • Threshold: nombre compris entre 0,00 et 1,00 qui spécifie le score de similarité auquel deux valeurs seront mises en correspondance. Par exemple, « Raisins » et « Graes » (manquant le « p ») sont mis en correspondance uniquement si cette option est définie sur moins de 0,90. Un seuil de 1,00 autorise uniquement les correspondances exactes. (Notez qu’une « correspondance exacte » approximative peut ignorer les différences telles que la casse, l’ordre des mots et la ponctuation.) La valeur par défaut est 0,80.
  • TransformationTable: table qui permet de faire correspondre des enregistrements basés sur des mappages de valeurs personnalisés. Il doit contenir des colonnes « From » et « To ». Par exemple, « Raisins » est mis en correspondance avec « Raisins » si une table de transformation est fournie avec la colonne « From » contenant « Raisins » et la colonne « To » contenant « Raisins ». Notez que la transformation sera appliquée à toutes les occurrences du texte dans la table de transformation. Avec le tableau de transformation ci-dessus, « Les raisins sont sucrés » seront également mis en correspondance avec « Raisins sont sucrés ».

Exemple 1

Jointure approximative gauche de deux tables basées sur [FirstName]

Utilisation

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