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 *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.