regrouper puis étendre en colonnes

Accueil – Le CFO masqué Forums Power Query regrouper puis étendre en colonnes

11 sujets de 1 à 11 (sur un total de 11)
  • Auteur
    Articles
  • #89036
    Christian
    Participant

    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.
    #89039
    Kim Leblanc
    Participant

    Bonjour,

    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.
    #89045
    Christian
    Participant

    Merci beaucoup !

    Cela fonctionne très bien !

    Bon weekend,

    Christian

    #89053
    Stéphane Lorin
    Participant

    Bonjour
    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.Group

    Dans 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éphane

    #89091
    Kim Leblanc
    Participant

    Bonjour,

    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.
    #89094
    Christian
    Participant

    Merci à tous les deux !

    #130613
    robin.parveaux
    Participant

    Bonjour,

    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 CONSTAT

    La 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.
    #130640
    robin.parveaux
    Participant

    Nota: les colonnes OBJET DU CONTROLE1 et OBJET DU CONTROLE2 seraient supprimés à travers la requête avant le regroupement des lignes.

    #130641
    robin.parveaux
    Participant

    Petite rectification désolé ! Le champs STATUT NON-CONFORMITE n’est pas identique entre les lignes que je doit regrouper. Et doit sortir égal à “CLOTURE”.

    #130657
    Kim Leblanc
    Keymaster

    Bonjour 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

    #130664
    robin.parveaux
    Participant

    Bonjour Kim,

    OK merci, ca me permettra de reformuler correctement.

    Robin

11 sujets de 1 à 11 (sur un total de 11)
  • Vous devez être connecté pour répondre à ce sujet.