Partager via


Table.FuzzyNestedJoin

Syntaxe

Table.FuzzyNestedJoin(
    table1 as table,
    key1 as any,
    table2 as table,
    key2 as any,
    newColumnName as text,
    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). Les résultats sont retournés dans une nouvelle colonne nommée newColumnName.

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

Le facultatif joinKind spécifie le type de jointure à effectuer. Par défaut, une jointure externe gauche est effectuée si une joinKind jointure n’est pas spécifiée. 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.FuzzyNestedJoin(
    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"},
    "NestedTable",
    JoinKind.LeftOuter,
    [IgnoreCase = true, IgnoreSpace = false]
)

Output

Table.FromRecords({
    [
        CustomerID = 1,
        FirstName1 = "Bob",
        Phone = "555-1234",
        NestedTable = Table.FromRecords({
            [
                CustomerStateID = 1,
                FirstName2 = "Bob",
                State = "TX"
            ],
            [
                CustomerStateID = 2,
                FirstName2 = "bOB",
                State = "CA"
            ]
        })
    ],
    [
        CustomerID = 2,
        FirstName1 = "Robert",
        Phone = "555-4567",
        NestedTable = Table.FromRecords({})
    ]
})