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 de table1 aux lignes de table2 en fonction d’une correspondance approximative des valeurs des colonnes clés sélectionnées par key1 (pour table1) et par key2 (pour table2).

Une 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 un joinKind facultatif peut être inclus pour spécifier le type de jointure. Options disponibles :

Un ensemble facultatif de joinOptions peut être inclus pour spécifier comment comparer les colonnes clés. Options disponibles :

  • 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. Vous pouvez utiliser n’importe quel nom de culture valide. Par exemple, l’option Culture « ja-JP » met en correspondance les enregistrements en fonction de la culture japonaise. La valeur par défaut ("") met en correspondance les enregistrements en fonction de la culture anglaise invariante.
  • IgnoreCase : Valeur logique (true/false) qui autorise la mise en correspondance de clés ne respectant pas la casse. Par exemple, quand la valeur est true, « 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 trouver des correspondances. Par exemple, quand la valeur est true, « Rai sins » est mis en correspondance avec « Raisins ». La valeur par défaut est true.
  • NumberOfMatches : Nombre entier qui spécifie le nombre maximal de lignes correspondantes pouvant être retournées pour chaque ligne d’entrée. Par exemple, la valeur 1 retourne au plus 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 montre la similarité entre une valeur d’entrée et la valeur représentative de cette entrée. La valeur par défaut est null (dans ce cas, une nouvelle colonne pour les similarités n’est pas ajoutée).
  • Threshold : Nombre compris entre 0,00 et 1,00 qui spécifie le score de similarité à partir duquel deux valeurs sont mises en correspondance. Par exemple, « Raisins » et « Risins » (« a » manquant) sont mises en correspondance seulement si cette option est définie avec une valeur inférieure à 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 permettant de mettre en correspondance des enregistrements en fonction de mappages de valeurs personnalisés. Elle doit contenir des colonnes « From » et « To ». Par exemple, « Raisins » correspond à « Grappes » si une table de transformation est fournie avec « Raisins » dans la colonne « From » et « Grappes » dans la colonne « To ». Notez que la transformation sera appliquée à toutes les occurrences du texte de la table de transformation. Avec le tableau de transformation ci-dessus, « Les raisins ont un goût sucré » est aussi mis en correspondance avec « Les grappes ont un goût sucré ».

Exemple 1

Jointure approximative interne gauche de deux tables basée 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]
)

Sortie

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