Accueil – Le CFO masqué › Forums › Power Query › Récupérer le nombre de lignes par occurrence
- This topic has 5 réponses, 2 participants, and was last updated il y a 5 years et 1 months by thomas.tesson.pro.
-
AuteurArticles
-
16 octobre 2019 à 3 h 41 min #58572thomas.tesson.proParticipant
Bonjour à toutes et tous !
J’ai un petit soucis sur un fichier.
J’ai comme colonne un code produit, un conditionnement et un prix (qui varie selon le conditionnement), j’aimerai ajouter une colonne qui contient un chiffre allant de 1 à X (sachant que X correspond au nombre d’occurrence pour le code produit UNIQUEMENT).
Pour donner une autre vision de la chose :
CODE PROD | CONDITMT | PRIX |
000001 | 1| 20.00 |
000001 | 10| 18.00 |
000001 | 100| 15.00 |
000002 | 1| 25.00 |A ce tableau j’aimerai donc ajouter “1” pour la première ligne, “2” à la seconde, “3” pour la troisième puis “1” à la quatrième, etc… une sorte de compteur en fonction du code produit.
J’ai trouvé un sujet pour l’équivalence de “NB.SI” en query (https://www.lecfomasque.com/sujet/equivalent-de-nb-si-sur-powerquery/), ce qui me semblait super intéressant car je gardais la colonne code produit et je pouvais récupérer le nombre d’occurrence :
CODE PROD | NOMBRE |
000001 | 1|
000001 | 2|
000001 | 3|
000002 | 1|À ce résultat j’aimerai ajouter le restant de mes colonnes, cependant quand je fusionne les requêtes je me retrouve avec un colonne avec des données table, je récupère ensuite les colonnes qui m’intéressent et là mauvaise surprise…
CODE PROD | NOMBRE | CONDITMT | PRIX |
000001 | 1| 1| 20.00 |
000001 | 1| 10| 18.00 |
000001 | 1| 100| 15.00 |
000001 | 2| 1| 20.00 |
000001 | 2| 10| 18.00 |
000001 | 2| 100| 15.00 |
000001 | 3| 1| 20.00 |
000001 | 3| 10| 18.00 |
000001 | 3| 100| 15.00 |
000002 | 1| 1| 25.00 |Sauriez vous comment je peux récupérer un tableau sous la forme :
CODE PROD | NOMBRE | CONDITMT | PRIX |
000001 | 1| 1| 20.00 |
000001 | 2| 10| 18.00 |
000001 | 3| 100| 15.00 |
000002 | 1| 1| 25.00 |En espérant que mon explication soit claire !
Merci par avance pour votre retour 🙂16 octobre 2019 à 3 h 57 min #58574Stéphane LorinParticipantBonjour
Il faut dans un premier temps ajouter un index à votre table (à partir de 1 ou de 0 – j’ai choisi ici 1)
CODE PROD | CONDITMT | PRIX | Index
000001 | 1| 20.00 | 1
000001 | 10| 18.00 | 2
000001 | 100| 15.00 | 3
000002 | 1| 25.00 | 4Puis faire référence à cette table en regroupant par CODE PROD et en retenant le “min” de Index
CODE PROD | MinIndex
000001 |1
000002 |4Puis fusionner les deux tables sur le CODE PROD
CODE PROD | CONDITMT | PRIX | Index |MinIndex
000001 | 1| 20.00 | 1 | 1
000001 | 10| 18.00 | 2 | 1
000001 | 100| 15.00 | 3 | 1
000002 | 1| 25.00 | 4| 4et enfin faire la différence entre Index et MinIndex + 1
CODE PROD | CONDITMT | PRIX | Index |MinIndex | Différence
000001 | 1| 20.00 | 1 | 1 | 1
000001 | 10| 18.00 | 2 | 1 | 2
000001 | 100| 15.00 | 3 | 1 | 3
000002 | 1| 25.00 | 4| 4 | 1Cordialement
Stéphane
16 octobre 2019 à 3 h 59 min #58575Stéphane LorinParticipantPrécision : il faut que les “CODE PROD” soient triés pour que les mêmes n° soient les uns avec les autres et non mélangés
Stéphane16 octobre 2019 à 4 h 13 min #58576thomas.tesson.proParticipantBonjour Stéphane et merci de votre retour !
Je n’ai qu’un mot à dire… MERCI !
ça marche du feu de Dieux !16 octobre 2019 à 6 h 01 min #58577Stéphane LorinParticipantRe-bonjour
En complément, voici une solution si votre colonne de code n’est pas triée :Table intermédiaire avec la liste de n° de lignes de chaque code
– ajouter un Index à la table initiale
– regrouper les lignes par code en choisissant toutes les lignes et en modifiant la formule : “each _, type table” par “each _[Index], type list” pour récupérer la liste des lignes de chaque code et non une table avec toutes les lignes de chacunReprendre votre table initiale
– ajouter le même Index
– fusionner avec la table intermédiaire par code et récupérer la liste des lignes de chacun
– ajouter une colonne avec la fonction “List.PositionOf” qui permet de récupérer la position de la ligne actuelle dans l’ensemble des lignes du code et ajouter 1 pour ne pas commencer de 0 la 1ère occurrence.Je contrôle que j’obtiens le même résultat qu’avec une formule NB.SI partant du l’en-tête jusqu’à la ligne actuelle : =NB.SI(Liste_Code[[#En-têtes];[Code]]:[@Code];[@Code])
il aurait été plus simple de sauvegarder l’ordre initial des lignes avec un Index, de trier les codes, d’exécuter ma première méthode, et de remettre l’ordre initial, mais bon… c’était pour le plaisir de trouver une autre solution un peu plus complexe !
Voir un exemple ci-joint
Stéphane
Attachments:
You must be logged in to view attached files.17 octobre 2019 à 11 h 12 min #58644thomas.tesson.proParticipantBonjour Stéphane
Merci pour votre second retour !
La première méthode donnée fonctionne parfaitement ! La seconde également bien sûr ! -
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.