J’ai fait l’exercice d’aller voir si Powerquery permettait de faire la comparaison entre deux listes d’éléments comme dans SQL (Not In, Except..)

Eh oui ça le fait !

-L’idée est de pouvoir fournir dans un onglet Excel « Source » une première liste d’élément (voir capture d’écran)

1

-Fournir une autre liste dans un autre onglet appelé «Target »

2

-En sortie nous souhaitons obtenir le résultat suivant

3

Pour cela, power Query s’avère la solution et nous allons procéder comme suit

-      Dans Excel, onglet « source » --> Power query --> From Table, ceci va directement sélectionner la plage de données et l’importer dans l’éditeur PQ

En langage M , cette action se traduit par la ligne de code suivante : = Excel.CurrentWorkbook(){[Name="Source"]}[Content]

Bouton droit sur le tableau « Use First Row as Header »

4

Le résultat doit ressembler à ça

5

 

-      Reproduite les mêmes opérations pour l’onglet « Target »

6

-      Récupérer le contenu de ces deux tables dans des listes

SourceList = Table.ToList(#"First Row as Header"),

TargetList = Table.ToList(#"First Row as Header1"),

7

-      La fonction M InSourceNotTarget = List.Difference(SourceList, TargetList) permet de lister les éléments disponible dans la liste Source et  pas dans la liste Target

8

-      La fonction M InTargetNotSource = List.Difference(TargetList, SourceList), permet de lister les éléments disponible dans la liste Target et pas dans la liste Source

9

-      La fonction M InTargetAndSource = List.Intersect({SourceList, TargetList}), permet de lister l’intersection des deux listes

10

1-      Créer une fonction qui permet de combiner la liste des éléments et les séparer par une virgule :  CombineWithComma = Combiner.CombineTextByDelimiter(", "),

Cette fonction attend en paramètre une liste d’éléments

Exp : CombineWithComma(InSourceNotTarget)

2-      Le résultat final sera envoyé dans une table de deux colonnes et de 3 lignes

ResultsTable = Table.FromRows(

{

{"In Source but not in Target", CombineWithComma(InSourceNotTarget)},

{"In Target but not in Source", CombineWithComma(InTargetNotSource)},

{"In both Target and Source", CombineWithComma(InTargetAndSource)}

},

{"Comparison Type", "ListResult"}

)

Allez dans fichier à Load afin d’obtenir le résultat final dans un nouvel onglet Excel « Comapare »

11

Il suffit de rafraichir la requête Powerquery et le résultat sera affiché dans l’onglet Compare

Evidement vous pouvez adapter cela à vos cas, mettrez les listes qui vous intéressent

Un point d’attention est à apporter à la plage des données définie dans Formules-->gestionnaire de noms : Source & Target

Enjoy!

 


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *