Power Query : regrouper des valeurs de plusieurs colonnes en une

Ceci est un post invité.

Power Query est un outil puissant et pratique permettant de matcher des données de diverses sources de manière rapide. Bref, je l’utilise presque quotidiennement.

Cependant, il ne dispose pas de toutes les fonctions qu’un DBA utilise en SQL, par exemple COALESCE. Cette fonction permet de retourner la première valeur non null de ces arguments.

En Power Query, on peut utiliser une série de « if then else » en M, mais ça devient très fastidieux lorsqu’il y a 15 colonnes à traiter.

Imaginons, le cas suivant :

Soit les colonnes A, B et C, dans une requête Power Query, de type string, et dont une seule à une valeur non null. Le besoin est de créer une nouvelle colonne avec la valeur non null d’entres les 3 valeurs disponibles.

snip_20160205110204

Un des hacks permettant d’éviter de fastidieux « if then else » est le suivant :

  • Créer une liste des valeurs de chaque colonne : List.Distinct( { [A], [B], [C] })
  • Retirer les nulls : List.RemoveNulls( <list>)
  • Retourner la première valeur : List.First( <list>)

Ce qui nous donne la formule M suivante (après ajout d’une colonne custom) :

List.First(List.RemoveNulls(List.Distinct( { [A], [B], [C] } ) ) )

snip_20160205110710

Ce qui nous donne au final, le résultat escompté.

snip_20160205110738

S’il le besoin est de concaténer toutes les valeurs non nulls, alors il suffit de changer List.First par Text.Combine. Cette dernière fonction prend comme 2ième argument le séparateur entre chaque valeur (vide par défaut).

Par exemple, Text.Combine ( {« a », « b », « c »}, « | ») retourne « a|b|c ».

Une réflexion sur “Power Query : regrouper des valeurs de plusieurs colonnes en une

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s