Accueil – Le CFO masqué › Forums › Power Query › regrouper puis étendre en colonnes
Mots-clés : Table.Group Colonnes multiples
- This topic has 9 réponses, 5 participants, and was last updated il y a 1 years et 4 months by robin.parveaux.
-
AuteurArticles
-
2 avril 2021 à 13 h 24 min #89036ChristianParticipant
Bonjour,
Je m’arrache les cheveux sur PowerQuery pour quelque chose qui a l’air tout simple.
J’ai une liste d’adresses emails de différentes entreprises.
Je voudrais toutes les regrouper en ayant une seule ligne par entreprise, et une adresse email par colonne.J’ai regroupé, pivoté, dépivoté dans tous les sens, impossible d’obtenir le résultat voulu.
Please help 🙂
Merci beaucoup !
Attachments:
You must be logged in to view attached files.2 avril 2021 à 14 h 15 min #89039Kim LeblancParticipantBonjour,
Il faut utiliser pivoté, mais avant il faut être en mesure d’ajouter une colonne avec une numérotation de courriel (ex le premier client a 3 courriels donc 3 lignes avec les numérotations 1 à 3) qui servira par la suite pour les en-têtes de colonne.
Un peu difficile à expliquer en mot alors voici un exemple dans le fichier ci-joint.
Kim
Attachments:
You must be logged in to view attached files.2 avril 2021 à 16 h 40 min #89045ChristianParticipantMerci beaucoup !
Cela fonctionne très bien !
Bon weekend,
Christian
4 avril 2021 à 16 h 33 min #89053Stéphane LorinParticipantBonjour
Votre phrase “J’ai regroupé, pivoté, dépivoté dans tous les sens, impossible d’obtenir le résultat voulu.” m’amène à la réflexion suivante : la fenêtre d’aide pour la création de regroupement dans PowerQuery est très limitée par rapport aux possibilités immenses de la fonction Table.GroupDans votre cas, comme votre colonne “email” est du texte vous ne pouvez que “compter les lignes” ou récupérer “toutes les données”. Faire la somme, la moyenne, le max ou le min n’est pas intéressant.
Si vous choisissez “Faire la somme” de votre colonne “Email”, each List.Sum([email]) vous renverra une erreur. Normal puisque qu’il n’est pas possible de faire la somme de texte.
Alors que de nombreuses fonctions “List” ou “Text” sont possibles.
Par exemple vous pouvez concaténer toutes vos adresses en utilisant Text.Combine
each Text.Combine([email],”;”) vous retourne “email1;email2;email3”
et ainsi il ne vous reste plus qu’à fractionner la colonne suivant le “;” pour obtenir le résultat attendu en 2 étapes seulement (un Table.Group puis un Table.SplitColumn)Autre exemple pour simplifier la solution proposée par Kim
Lorsque vous indiquez dans l’agrégation “Toutes les données” each _, type table vous obtenez une table.
Ce “_” indique votre table initiale filtrée avec les lignes correspondant à votre regroupement
il suffit d’ajouter un Table.AddIndexColumn devant pour récupérer directement le n° de la ligne
each Table.AddIndexColumn(_,”Index”), type table. il ne reste plus qu’à développer les colonnes et à pivoter la colonne “Index”.Cette fonction Table.Group possède également 2 arguments optionnels : GroupKind (Local ou Global) et Comparer (n’importe quelle fonction pour spécifier les regroupements). Ces arguments ne sont pas disponibles directement et nécessitent d’entrer dans le code M. Mais les possibilités de regroupement sont décuplés.
Cordialement
Stéphane6 avril 2021 à 9 h 24 min #89091Kim LeblancParticipantBonjour,
Merci Stéphane pour ce complément.
J’ai appliqué les 2 options mentionnées dans votre message dans mon fichier et effectivement, c’est peut-être plus simple/rapide de cette façon si on est à l’aise de travailler directement avec le code M.
Ci-joint mon fichier avec 2 nouvelles requêtes (option1_SL et option2_SL) pour illustrer le tout.
Bonne journée!
Kim
Attachments:
You must be logged in to view attached files.6 avril 2021 à 9 h 33 min #89094ChristianParticipantMerci à tous les deux !
28 juillet 2023 à 12 h 05 min #130613robin.parveauxParticipantBonjour,
je relance le sujet car mon objectif est sensiblement le même à la différence près que je dois appliquer l’étape “Personnalisé1” de la requête Option1_SL si une condition est remplie.
En l’occurrence je dois regrouper les lignes comportant 11 données identiques (généralement 2 lignes comportent ces même 11 données) en colonnes:
– Source.Name.1
– Source.Name.2
– BDD ID PTECH
– X
– Y
– NOM PTECH
– NON-CONFORMITE
– OBSERVATION NON-CONFORMITE
– STATUT NON-CONFORMITE
– DATE DU CONSTAT
– OBSERVATION DU CONSTATLa condition serait:
– SI une des deux lignes comportant ces 11 mêmes données, comporte “OK” dans la colonne “AVIS SYANE”.Les données (des colonnes restantes citées ci-après) seraient à concaténer avec en séparateur “;” comme dans le poste originel.
Colonnes restante à concaténer:
– INCIDENCE
– OBJET DU CONTROLE.3
– TYPE LEVEE
– SCHEMA LDR
– LIEN CELLS
– DATE LDR AI
– DATE AVIS SYANE
– AVIS SYANE
– BDD_ID_CONSTAT’A défaut d’avoir assez de temps pour apprendre en profondeur le language M, j’ai esquissé les codes suivants qui mènent à une erreur:
= Table.Group(#”Colonnes supprimées”, {“Source.Name.1”, “Source.Name.2”, “BDD_ID_PTECH”, “X”, “Y”, “NOM PTECH”, “NON-CONFORMITE”, “OBSERVATION NON-CONFORMITE”, “STATUT NON-CONFORMITE”, “DATE DU CONSTAT”, “OBSERVATION DU CONSTAT”},
{{“INCIDENCE”, each Text.Combine([INCIDENCE.1])},{“OBJET DU CONTROLE.3”, each Text.Combine([OBJET DU CONTROLE.3.1])}, {“TYPE LEVEE”, each Text.Combine([TYPE LEVEE.1])}, {“SCHEMA LDR”, each Text.Combine([SCHEMA LDR.1])}, {“LIEN CELLS”, each Text.Combine([LIEN CELLS.1])},
{“DATE LDR AI”, each Text.Combine([DATE LDR AI.1])}, {“DATE AVIS SYANE”, each Text.Combine([DATE AVIS SYANE.1])}, {“AVIS SYANE”, each Text.Combine([AVIS SYANE.1])}, {“BDD_ID_CONSTAT'”, each Text.Combine([BDD_ID_CONSTAT’.1])}}——————————————————-
= Table.Group(#”Colonne conditionnelle ajoutée”, {“Source.Name.1”, “Source.Name.2”, “BDD ID PTECH”, “X”, “Y”, “NOM PTECH”, “NON-CONFORMITE”, “OBSERVATION NON-CONFORMITE”, “STATUT NON-CONFORMITE”, “DATE DU CONSTAT”, “OBSERVATION DU CONSTAT”},
{{“INCIDENCE”, “OBJET DU CONTROLE.3”, “TYPE DE LEVEE”, “SCHEMA LDR”, “LIEN CELLS”, “DATE LDR AI”, “DATE AVIS SYANE”, “AVIS SYANE”, “BDD_ID_CONSTAT'” each Text.Combine([INCIDENCE.1], [OBJET DU CONTROLE.3.1], [TYPE DE LEVEE.1], [SCHEMA LDR.1], [LIEN CELLS.1], [DATE LDR AI.1],
[DATE AVIS SYANE.1], [AVIS SYANE.1], [BDD_ID_CONSTAT’.1]”; “), type text}}).Pouvez-vous éclairer ma lanterne s’il vous plait ?
Attachments:
You must be logged in to view attached files.31 juillet 2023 à 3 h 22 min #130640robin.parveauxParticipantNota: les colonnes OBJET DU CONTROLE1 et OBJET DU CONTROLE2 seraient supprimés à travers la requête avant le regroupement des lignes.
31 juillet 2023 à 4 h 02 min #130641robin.parveauxParticipantPetite rectification désolé ! Le champs STATUT NON-CONFORMITE n’est pas identique entre les lignes que je doit regrouper. Et doit sortir égal à “CLOTURE”.
1 août 2023 à 7 h 31 min #130657Kim LeblancKeymasterBonjour Robin,
Je vous suggère de poser une nouvelle question sur le forum. De cette façon, tout le monde pourra y contribuer. Sinon seulement les gens qui sont abonnés à cette question ont reçu la question par courriel (fort probablement seulement Stéphane, Christian et moi-même).
Vous aurez alors plus de chance de trouver une solution.
Au plaisir,
Kim
1 août 2023 à 13 h 31 min #130664robin.parveauxParticipantBonjour Kim,
OK merci, ca me permettra de reformuler correctement.
Robin
-
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.