IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Pierre Fauconnier

Power Query Excel : Les 7 jointures possibles

Noter ce billet
par , 25/11/2020 à 07h00 (9784 Affichages)
Salut.

Les jointures font partie intégrante d'une maîtrise de Power Query. Je rencontre très souvent sur le forum des questions liées à la fusion de 2 requêtes, un peu à la manière d'un RECHERCHEV, d'un RECHERCHEX (XL 365) ou d'un INDEX-EQUIV. Si les jointures interne (inner join) ou gauche (left join ou left outer join) sont probablement choisies dans la majorité des cas, il peut être intéressant de connaître les 7 manières de "joindre" deux tables, c'est-à-dire d'aligner les lignes desdites tables.


Schéma des 7 jointures possibles en SQL avec leur appellation "Power Query"

Nom : 2020-11-24_202735.png
Affichages : 7216
Taille : 134,1 Ko


Rappel sur la création d'une requête de fusion avec Power Query.

Via Accueil > Fusionner les requêtes, on peut fusionner deux requêtes. La requête active est réputée être celle de gauche, et l'on choisira la seconde requête comme étant celle de droite. On choisira la ou les colonnes permettant de créer la clause d'union (1) puis l'on choisira le type de requête.

Dans ce billet, j'explique comment fusionner deux tables sur une clé composée, c'est-à-dire multicolonnes.

Nom : 2020-11-24_203440.png
Affichages : 4603
Taille : 14,2 Ko

La notion Gauche/Droite n'a pas d'importance sur la fusion proprement dite, c'est-à-dire sur l'appairage des lignes, mais elle détermine l'ordre des colonnes de la requête de résultat, les colonnes de la requête gauche étant toutes reprises et celles de droite pouvant être choisies lors de l'étape de développement de la table.


Mise en pratique

Dans la mise en pratique ci-dessous, je mentionne la ligne de commande de l'étape Power Query de fusion, et je reprends le début de l'intitulé de l'option de jointure qui correspond dans la liste déroulante de la boite de dialogue de fusion.


Interne : = Table.NestedJoin(Gauche, {"ID L"}, Droite, {"ID R"}, "Droite", JoinKind.Inner). Seules les lignes 3,4,5, communes aux deux tables, sont reprises dans cette requête

Nom : 2020-11-24_204617.png
Affichages : 4551
Taille : 1,8 Ko


Externe gauche : = Table.NestedJoin(Gauche, {"ID L"}, Droite, {"ID R"}, "Droite", JoinKind.LeftOuter). Toutes les lignes de gauche sont reprises et appairées à celles de droite qui valident la jointure. Les colonnes développées à droite sont Null pour les lignes non appairées.

Nom : 2020-11-24_205104.png
Affichages : 4589
Taille : 2,4 Ko


Externe droite : = Table.NestedJoin(Gauche, {"ID L"}, Droite, {"ID R"}, "Droite", JoinKind.RightOuter). Toutes les lignes de droite sont reprises et appairées à celles de gauche qui valident la jointure. Les colonnes de gauche sont Null pour les lignes non appairées.

Nom : 2020-11-24_205402.png
Affichages : 4480
Taille : 2,2 Ko


Gauche opposée : = Table.NestedJoin(Gauche, {"ID L"}, Droite, {"ID R"}, "Droite", JoinKind.LeftAnti). Seules sont reprises les lignes de gauche qui ne se retrouvent pas à droite. Les colonnes de droite sont Null (elles ne sont dans les faits pas reprises car inutiles).

Nom : 2020-11-24_205635.png
Affichages : 4528
Taille : 1,7 Ko


Droite opposée : = Table.NestedJoin(Gauche, {"ID L"}, Droite, {"ID R"}, "Droite", JoinKind.RightAnti). Seules sont reprises les lignes de droite qui ne se retrouvent pas à gauche. Les colonnes de gauche sont Null (elles ne sont dans les faits pas reprises car inutiles).

Nom : 2020-11-24_205841.png
Affichages : 4490
Taille : 1,4 Ko


Externe entière : = Table.NestedJoin(Gauche, {"ID L"}, Droite, {"ID R"}, "Droite", JoinKind.FullOuter). Toutes les lignes des deux tables sont reprises. Les colonnes des lignes non appairées sont Null dans les colonnes des tables correspondantes.

Nom : 2020-11-24_210044.png
Affichages : 4554
Taille : 2,7 Ko


Externe opposée(2) : = Table.NestedJoin(Gauche, {"ID L"}, Droite, {"ID R"}, "Droite", JoinKind.FullOuter). Seules les lignes qui ne sont pas communes sont reprises.
Pour créer cette jointure, on va utiliser une Externe entière puis on va exclure les lignes pour lesquelles la clé d'union est vide dans l'une ou l'autre table. Cela sera réalisé grâce à l'ajout d'une colonne calculée qui sera filtrée sur le résultat de la condition.

Nom : 2020-11-24_210730.png
Affichages : 4543
Taille : 23,7 Ko

Nom : 2020-11-24_210757.png
Affichages : 4514
Taille : 5,6 Ko


Voilà pour la théorie et la mise en pratique. Dans un prochain billet, nous verrons des exemples d'utilisation de ces jointures.


(1) Dans un prochain billet, je montrerai comment créer une jointure lorsque la clé d'appairage est constituée de plusieurs colonnes.

(2) Je n'ai pas trouvé d'appellation généralement reconnue pour cette jointure particulière.

Envoyer le billet « Power Query Excel : Les 7 jointures possibles » dans le blog Viadeo Envoyer le billet « Power Query Excel : Les 7 jointures possibles » dans le blog Twitter Envoyer le billet « Power Query Excel : Les 7 jointures possibles » dans le blog Google Envoyer le billet « Power Query Excel : Les 7 jointures possibles » dans le blog Facebook Envoyer le billet « Power Query Excel : Les 7 jointures possibles » dans le blog Digg Envoyer le billet « Power Query Excel : Les 7 jointures possibles » dans le blog Delicious Envoyer le billet « Power Query Excel : Les 7 jointures possibles » dans le blog MySpace Envoyer le billet « Power Query Excel : Les 7 jointures possibles » dans le blog Yahoo

Commentaires

  1. Avatar de Malick
    • |
    • permalink
    Bonjour,

    Pierre tu nous régales.
    Un seul mot
  2. Avatar de counterbob
    • |
    • permalink
    Quelle clarté !
    Merci
  3. Avatar de Birdwing91
    • |
    • permalink
    Bonjour,

    merci pour ces explications.
    Pour être cohérent concernant votre dénomination afin que seules les lignes qui ne sont pas communes sont reprises. J'opterai pour "Interne opposée" plutôt que "Externe opposée"

    Bien à vous.