Supprimer doublons en conservant les plus récents (PowerQuery + Buffer)

L’objectif ici est de supprimer les doublons d’une liste mais en faisant attention de ne garder que la ligne la plus récente. Pour voir comment faire, nous allons partir d’un exemple simple. Ensuite, nous verrons comment faire dans EXCEL et dans POWERQUERY.

Voici le tableau exemple:

SupprDoublonsRecents 01

L’idée est de supprimer les codes produit en doublon afin de ne garder qu’un libellé produit, celui qui a été mis à jour le plus récemment. Pour P4, nous préférons donc garder “Enceinte” plutôt que “Haut-Parleur” car la date est plus récente.

Le résultat final devrait donc ressembler à ceci:

SupprDoublonsRecents 02

Supprimer doublons dans Excel

Dans Excel, cette manipulation est assez simple et en deux clics nous pouvons avoir un résultat probant.

  • RUBAN: Données > Trier et filtrer > Trier > Choisir Date, Valeurs, Du plus récent au plus ancien > OK
  • RUBAN: Données > Outils de données > Supprimer les doublons > Sélectionner uniquement Code Produit > OK

Mais dans PowerQuery, les choses se compliquent car la suppression de doublons ne s’applique qu’à la source et non à la table triée comme nous allons le voir.

Importer dans Power Query

Import du tableau

  • Se positionner sur n’importe qu’elle cellule du tableau.
  • 2016: Données > Récupérer et Transformer > A partir d’un tableau
  • 2010/2013: Power Query > Données Excel > A partir du tableau

Trier

L’étape suivante est donc de faire comme dans Excel, à savoir trier le tableau du plus récent au plus ancien.

  • Clic-droit sur colonne Date > Tri décroissant

SupprDoublonsRecents 03

Supprimer les doublons

Si nous reprenons ce que nous avons fait dans Excel, nous devons donc supprimer les doublons.

  • Sélectionnez la colonne Code Produits
  • Accueil > Réduire les lignes > Supprimer les doublons

SupprDoublonsRecents 04

Malgré le tri, nous n’avons pas supprimer les bonnes lignes:

SupprDoublonsRecents 05

En effet, les lignes ont été supprimées en se basant sur la table de départ (Source) et en ne gardant que la première occurrence du Code Produit.

Utilisation du Buffer

Nous allons devoir modifier le code réalisé en langage M.

  • Accueil > Requête > Editeur avancé

Vous devriez lire le code suivant:

let
    Source = Excel.CurrentWorkbook(){[Name="T_Pdts"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Date", type datetime}, {"Code Produit", type text}, {"Libelle", type text}}),
    TriDate = Table.Sort(#"Type modifié",{{"Date", Order.Descending}}),
    #"Doublons supprimés" = Table.Distinct(TriDate, {"Code Produit"})
in
    #"Doublons supprimés"

Nous allons à présent modifier ce code.

let
    Source = Excel.CurrentWorkbook(){[Name="T_Pdts"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Date", type datetime}, {"Code Produit", type text}, {"Libelle", type text}}),
    TriDate = Table.Sort(#"Type modifié",{{"Date", Order.Descending}}),
    Buffered = Table.Buffer(TriDate),
    #"Doublons supprimés"= Table.Distinct(Buffered, {"Code Produit"})
in
    #"Doublons supprimés"

Nous avons insérer une ligne et avons modifié la suivante pour que l’enchaînement séquentiel perdure.

La ligne ajoutée est: Buffered = Table.Buffer(TriDate),

En fait, nous avons mis en mémoire vive (Buffer) la table résultante de l’étape précédente, à savoir TriDate. Et nous avons ensuite supprimé les doublons de cette nouvelle table.

De cette façon, la suppression de doublons ne se fait pas depuis la source de la requête mais depuis une autre table enregistrée en mémoire vive.

  • Cliquez sur OK et observez le résultat.
  • Pour une meilleure lisibilité, changez le nom de la dernière étape: SupprDoublons.

Et vous aurez:

SupprDoublonsRecents 06

Et pour finir

  • Accueil > Fermer et charger

Conclusion

Vous imaginez bien que j’ai testé pas mal d’autres choses, comme utiliser la requête triée en référence d’une autre requête mais le problème n’était pas réglé.

La fonction BUFFER est donc très utile ici mais attention, elle a essentiellement deux inconvénient:

  • Elle brise le Query Folder
  • Si le nombre d’éléments de la requête est conséquent, cela peut poser de lourds problèmes de performances.

Dans mon cas, j’ai eu besoin d’utiliser cette fonction avec Power Query pour Importer des fichiers d’incidents que des collègues m’avaient extraits. Toutefois, il y avait des doublons entre les différents fichiers envoyés. J’ai donc dû les supprimer. Les statuts des incidents ont évolués et je ne voulais que le dernier statut, d’où ce besoin. J’ai traité quelques milliers de lignes sans aucun problème avec cette fonction BUFFER.

Laisser un commentaire

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