Aller au contenu principal

Table.FuzzyNestedJoin

Effectue une jointure approximative entre des tables selon les colonnes fournies et produit le résultat de la jointure dans une nouvelle colonne.

Syntax

Table.FuzzyNestedJoin(
table1 as table,
key1 as any,
table2 as table,
key2 as any,
newColumnName as text,
optional joinKind as JoinKind.Type,
optional joinOptions as record
) as table

Remarks

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). 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'équité du texte.
La jointure joinKind facultative spécifie le genre de jointure à effectuer. Par défaut, une jointure externe gauche est effectuée si une jointure joinKind n'est pas spécifiée. Parmi les options, citons :

  • JoinKind.Inner
  • JoinKind.LeftOuter
  • JoinKind.RightOuter
  • JoinKind.FullOuter
  • JoinKind.LeftAnti
  • JoinKind.RightAnti

Un ensemble facultatif de joinOptions peut être inclus pour spécifier comment comparer les colonnes clés. Parmi les options, citons :
  • 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 : Permet la mise en correspondance des enregistrements en fonction de règles propres à la culture. Il peut s’agir d’un nom de culture valide. Par exemple, l’option de culture « ja-JP » met en correspondance les enregistrements basés sur la culture japonaise. La valeur par défaut est "", qui met en correspondance en fonction d’une culture anglaise dite indifférente.
  • IgnoreCase : Valeur logique (true/false) qui autorise la correspondance de clés qui ne respectent pas la casse. Par exemple, si 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 la combinaison de parties de texte afin de trouver des correspondances. Par exemple, si la valeur est true, « Rai sins » correspond à « 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, la valeur 1 retourne au plus une ligne correspondante pour chaque ligne d’entrée. Si cette option n’est pas spécifiée, 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, auquel cas aucune nouvelle colonne pour les similitudes n’est 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.Raisins Par exemple, « Raisins » et « Raiins » (« s » manquant) correspondent uniquement si cette option est définie sur une valeur inférieure à 0,90. Un seuil de 1,00 autorise uniquement les correspondances exactes.s (Notez qu’une « correspondance exacte » approximative ignorera peut-être des 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 mettre en correspondance des enregistrements en fonction de mappages de valeurs personnalisés. Elle doit contenir des colonnes « from » et « to ». Par exemple, « Grappes » est mis en correspondance avec « Raisins » si une table de transformation est fournie avec la colonne « from » contenant « Grappes » et la colonne « to » contenant « Raisins ». Notez que la transformation est appliquée à toutes les occurrences du texte dans la table de transformation. Avec la table de transformation ci-dessus, « Les grappes sont sucrées » est également mis en correspondance avec « Les raisins sont sucrés ».

Examples

Example #1

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

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

Result:

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

Category

Table.Transformation