PowerQuery comparaison entre deux listes d’éléments (Not In SQL)


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!

 

Commentez cet article