Table.NestedJoin : joindre deux tables et choisir le type de jointure dans Power Query
Rattacher des factures à une liste de clients, garder seulement ce qui correspond ou isoler ce qui manque, en choisissant le bon JoinKind.
Table.NestedJoin rapproche deux tables à partir de colonnes clés. Pour chaque ligne de la première table, elle range les lignes correspondantes de la seconde dans une nouvelle colonne qui contient une table par ligne. Pour récupérer des champs précis, on développe ensuite cette colonne avec Table.ExpandTableColumn.
Dans l’éditeur, c’est l’étape écrite par la commande Fusionner les requêtes (onglet Accueil, groupe Combiner). La boîte de dialogue Fusionner fait choisir la table de gauche, la table de droite, les colonnes clés et le type de jointure, qui devient le paramètre joinKind.
Deux tables, deux clés, un nom de colonne
Table.NestedJoin(
table1 as table,
key1 as any,
table2 as any,
key2 as any,
newColumnName as text,
optional joinKind as nullable number,
optional keyEqualityComparers as nullable list
) as table
| Paramètre | Rôle |
|---|---|
table1 | La table de gauche, dont les lignes servent de point de départ. |
key1 | La ou les colonnes clés de table1, en liste : {"ClientID"}. |
table2 | La table de droite. |
key2 | Les colonnes clés de table2, dans le même ordre que key1. |
newColumnName | Le nom de la colonne qui reçoit, pour chaque ligne, la table des correspondances. |
joinKind | Facultatif. Le type de jointure. Sans valeur, Power Query effectue une jointure externe gauche. |
keyEqualityComparers | Facultatif. Selon la documentation, ce paramètre est actuellement réservé à un usage interne. |
Les valeurs de JoinKind
| Valeur | Lignes conservées |
|---|---|
JoinKind.LeftOuter (1) | Toutes les lignes de la première table. C’est la valeur par défaut. |
JoinKind.RightOuter (2) | Toutes les lignes de la deuxième table. |
JoinKind.FullOuter (3) | Toutes les lignes des deux tables ; une ligne sans correspondance est complétée par des valeurs null. |
JoinKind.Inner (0) | Seulement les paires de lignes qui correspondent. |
JoinKind.LeftAnti (4) | Les lignes de la première table sans correspondance dans la deuxième. |
JoinKind.RightAnti (5) | Les lignes de la deuxième table sans correspondance dans la première. |
L’énumération compte aussi JoinKind.LeftSemi (6) et JoinKind.RightSemi (7), que la documentation décrit pour Table.Join. La boîte de dialogue Fusionner propose les six types du tableau.
Quatre jointures courantes
Sur une table Factures (FactureID, ClientID, Mois, Montant) et une table Clients (ClientID, Nom) qui contient Bob, Jim, Paul et Ringo.
Jointure par défaut, puis développement
Fusion = Table.NestedJoin(Factures, {"ClientID"}, Clients, {"ClientID"}, "Client"),
#"Client développé" = Table.ExpandTableColumn(Fusion, "Client", {"Nom"}, {"Nom du client"})
Aucun joinKind : la jointure est externe gauche. Toutes les factures restent. Celles dont le ClientID n’existe pas dans Clients reçoivent une table vide, puis null dans Nom du client une fois la colonne développée.
Garder seulement les factures rattachées
Table.NestedJoin(Factures, {"ClientID"}, Clients, {"ClientID"}, "Client", JoinKind.Inner)
Les factures sans client connu disparaissent du résultat, sans message.
Lister les factures orphelines
Table.NestedJoin(Factures, {"ClientID"}, Clients, {"ClientID"}, "Client", JoinKind.LeftAnti)
Il ne reste que les factures dont le client est absent de la table Clients. Tant que ce résultat n’est pas vide, une jointure interne ferait perdre des factures.
Joindre sur deux colonnes
Table.NestedJoin(Factures, {"ClientID", "Mois"}, Objectifs, {"ClientID", "Mois"}, "Objectif")
La première clé de gauche est comparée à la première de droite, la deuxième à la deuxième.
Des clés de types différents, et plus aucune correspondance
La table Factures vient d’un fichier CSV où ClientID est resté en texte ; la table Clients vient d’une base où ClientID est un nombre. La fusion s’exécute sans erreur, mais le texte "1" n’est pas égal au nombre 1 : aucune facture ne trouve son client, et après développement la colonne Nom du client ne contient que des null. La documentation le signale : les colonnes clés doivent être du même type de données, sinon la fusion risque de ne pas produire de résultats corrects.
La parade consiste à aligner les types juste avant la jointure :
#"Factures typées" = Table.TransformColumnTypes(Factures, {{"ClientID", Int64.Type}}),
Fusion = Table.NestedJoin(#"Factures typées", {"ClientID"}, Clients, {"ClientID"}, "Client")
Second contrôle : si Clients contient deux fois le même ClientID, le développement duplique la facture. Une clé unique côté Clients évite des montants comptés deux fois.
Ce qu’on nous demande sur Table.NestedJoin
Quelle différence entre Table.NestedJoin et Table.Join ?
Table.NestedJoin range les correspondances dans une colonne de tables, à développer ensuite, et fait par défaut une jointure externe gauche. Table.Join renvoie directement les colonnes des deux tables côte à côte et fait par défaut une jointure interne.
Quel type de jointure est appliqué si on n’en précise pas ?
Une jointure externe gauche : toutes les lignes de la première table sont conservées, avec une table vide quand aucune ligne de la seconde ne correspond.
Les colonnes clés doivent-elles porter le même nom ?
Non. Les noms peuvent différer d’une table à l’autre. En revanche, les colonnes doivent être du même type de données, et dans le même ordre quand il y en a plusieurs.
Comment trouver les lignes qui n’ont pas de correspondance ?
Avec JoinKind.LeftAnti pour les lignes de la première table absentes de la seconde, ou JoinKind.RightAnti pour l’inverse.
Pour aller plus loin
Table.ExpandTableColumn: développer la colonne de tables produite par la jointure.- Définir une clé primaire sur une table avant de la fusionner.
- Les fonctions de tables en Power Query.
- La référence complète Power Query et DAX.
Sources. Documentation officielle de l’éditeur, consultée le 14 octobre 2026 : Table.NestedJoin, JoinKind.Type, Table.Join, Vue d’ensemble des requêtes de fusion.
Vos fusions de requêtes laissent des colonnes vides ?
Nous relisons vos jointures pour aligner les types des clés et repérer les lignes orphelines avant le chargement.