Table.ExpandTableColumn : développer une colonne après une fusion dans Power Query
Récupérer le nom et la ville du client dans une table de factures après une fusion. Avec le piège des lignes qui se multiplient.
Table.ExpandTableColumn développe une colonne qui contient des tables en lignes et en colonnes ordinaires. Vous choisissez les colonnes de la table imbriquée à faire remonter, et éventuellement leur nouveau nom. Si une table imbriquée contient plusieurs lignes, la ligne qui la porte est répétée autant de fois. La fonction accepte aussi des colonnes contenant des listes d’enregistrements.
Son usage le plus courant suit une fusion. Fusionner les requêtes écrit Table.NestedJoin, qui range les lignes correspondantes de la table de droite dans une nouvelle colonne de tables. Il reste à la développer : c’est ce que fait l’icône de développement placée dans l’en-tête de cette colonne, en écrivant Table.ExpandTableColumn.
Le quatrième paramètre évite les conflits de noms
Table.ExpandTableColumn(
table as table,
column as text,
columnNames as list,
optional newColumnNames as nullable list
) as table
| Paramètre | Rôle |
|---|---|
table | La table qui contient la colonne de tables. |
column | Le nom de la colonne à développer. |
columnNames | Les colonnes de la table imbriquée à faire remonter. |
newColumnNames | Facultatif. Les noms à donner aux colonnes développées, dans le même ordre. À préciser pour éviter un conflit avec une colonne existante. |
De la fusion au développement
Une table Factures (Numéro, ClientID, Montant) et une table Clients (ClientID, Nom, Ville), où l’on trouve Bob, Jim, Paul et Ringo.
Fusionner puis développer deux colonnes
let
Fusion = Table.NestedJoin(
Factures, {"ClientID"},
Clients, {"ClientID"},
"Clients", JoinKind.LeftOuter),
Developpe = Table.ExpandTableColumn(
Fusion, "Clients",
{"Nom", "Ville"},
{"Clients.Nom", "Clients.Ville"})
in
Developpe
Chaque facture gagne deux colonnes, Clients.Nom et Clients.Ville. Le préfixe est celui que l’interface ajoute quand la case Utiliser le nom de colonne d’origine comme préfixe est cochée. La jointure externe gauche est le type par défaut de Table.NestedJoin ; une facture dont le ClientID n’existe pas dans Clients est conservée, avec null dans les colonnes développées.
Développer sans renommer
Table.ExpandTableColumn(Fusion, "Clients", {"Nom"})
Sans quatrième argument, la colonne garde son nom d’origine, Nom. Si Factures possédait déjà une colonne Nom, il faudrait passer par newColumnNames pour éviter le conflit.
Les factures qui se multiplient
Le développement crée une ligne par ligne de la table imbriquée. L’exemple de la documentation le montre : une société associée à trois villes devient trois lignes. Après une fusion, cela veut dire qu’un ClientID présent deux fois dans la table Clients, par exemple parce que Jim y figure avec deux adresses, double chacune de ses factures. Le chiffre d’affaires de Jim est alors compté deux fois, et rien ne le signale.
La parade consiste à garantir l’unicité de la clé dans la table de correspondance avant de fusionner :
let
ClientsUniques = Table.Distinct(Clients, {"ClientID"}),
Fusion = Table.NestedJoin(
Factures, {"ClientID"},
ClientsUniques, {"ClientID"},
"Clients", JoinKind.LeftOuter),
Developpe = Table.ExpandTableColumn(Fusion, "Clients", {"Nom", "Ville"})
in
Developpe
Table.Distinct ne garde qu’une ligne par ClientID. C’est une protection, pas une correction : un doublon dans le référentiel client mérite d’être compris à la source. Un contrôle simple consiste à comparer le nombre de lignes de Factures avant et après le développement.
Ce qu’on nous demande sur Table.ExpandTableColumn
Pourquoi une nouvelle colonne de la table Clients n’apparaît-elle pas ?
L’interface inscrit en dur la liste des colonnes cochées au moment du développement. Une colonne ajoutée ensuite à la source n’en fait pas partie : il faut modifier l’étape, ou construire la liste avec List.RemoveItems(Table.ColumnNames(Clients), {« ClientID »}).
Que devient une facture sans client correspondant ?
Avec une jointure externe gauche, elle est conservée et les colonnes développées contiennent null. Avec une jointure interne, elle disparaît dès la fusion.
À quoi sert le paramètre newColumnNames ?
À renommer les colonnes développées, dans l’ordre de columnNames. Il évite les conflits entre les colonnes existantes de la table et celles qui arrivent de la table imbriquée.
Faut-il toujours développer après une fusion ?
Non. L’interface propose aussi d’agréger la colonne, par exemple pour compter ou additionner les lignes correspondantes, ce qui évite justement de multiplier les lignes.
Pour aller plus loin
Table.Unpivot- Fusionner plusieurs tables dans Power BI.
- Définir une clé primaire pour fiabiliser les jointures.
- Les erreurs Power Query les plus courantes.
- La référence complète Power Query et DAX.
Sources. Documentation officielle de l’éditeur, consultée le 13 octobre 2026 : Table.ExpandTableColumn, Table.NestedJoin, Vue d’ensemble des requêtes de fusion, Jointure externe gauche.
Un chiffre d’affaires qui gonfle après chaque fusion ?
Nous vérifions les clés de vos jointures et les étapes de développement pour que chaque facture ne soit comptée qu’une fois.