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)
-Fournir une autre liste dans un autre onglet appelé «Target »
-En sortie nous souhaitons obtenir le résultat suivant
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 »
Le résultat doit ressembler à ça
– Reproduite les mêmes opérations pour l’onglet « Target »
– 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″),
– 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
– 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
– La fonction M InTargetAndSource = List.Intersect({SourceList, TargetList}), permet de lister l’intersection des deux listes
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 »
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!
0 commentaires