Regroupement de lignes

Accueil – Le CFO masqué Forums Power Query Regroupement de lignes

  • Ce sujet contient 7 réponses, 5 participants et a été mis à jour pour la dernière fois par Stéphane Lorin, le il y a 1 année.
8 sujets de 1 à 8 (sur un total de 8)
  • Auteur
    Articles
  • #126346
    Christophe CARRE
    Participant

    Bonjour,
    Je sais que ma demande est habituelle sur ce forum mais je n’arrive pas à reproduire les différentes étapes qui me permettent de regrouper plusieurs lignes en une seule à partir d’un N° client.
    Est-ce que quelqu’un pourrait me donner le process pour y arriver ? Je vous joins un extrait de mon tableau.
    Merci d’avance,
    Christophe

    Attachments:
    You must be logged in to view attached files.
    #126394
    Maurice Roy
    Participant

    Bonjour Christophe,

    Dans PowerQuery il y a une fonction dans requête et connexion\Accueil\Regrouper par et répondre aux questions.

    Maurice

    #126471
    Christophe CARRE
    Participant

    Bonjour Maurice,
    J’ai groupé mes colonnes et essayé d’autres manipulations mais je n’arrive pas à regrouper mes informations sur une seule ligne par code client.
    Christophe

    #126532
    Éric Ste-Croix
    Participant

    Bonjour Christophe,

    Une piste de solution.
    Ajouter une colonne avec un index a base 0.
    Ajouter une colonne avec un index a base 1.
    Fusionner la table avec elle meme sur la base du code client + index
    Base 0 pour une table
    Base 1 pour l’autre table.
    Repeter la fusion autant de fois que de lignes a fusionner et eliminer les colonnes et les lignes en trop.

    En espérant que cette piste vous aidera.

    Cordialement

    Attachments:
    You must be logged in to view attached files.
    #126548
    Daniel
    Participant

    Bonjour Christophe, Eric, le Forum,

    Une autre piste de solution, je joins un fichier pour visualiser le résultat.
    Requête :
    let
    Source = Excel.CurrentWorkbook(){[Name=”tabDepart”]}[Content],
    ColonnesList = List.Skip(Table.ColumnNames( Source),1),
    ModificationDataTypes = Table.TransformColumnTypes(Source,{{“CodeClient”, type text}, {“NomContact”, type text}, {“TelephoneContact”, type text}, {“EmailContact”, type text}, {“FonctionContact”, type text}}),
    FusionColonnesContacts = Table.CombineColumns(ModificationDataTypes,{“NomContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”},Combiner.CombineTextByDelimiter(“|”, QuoteStyle.None),”InfosClient”),
    GrouperSurCodeClient = Table.Group(FusionColonnesContacts, {“CodeClient”}, {{“AllRows”, each _, type table [Code client=nullable number, NomContact=nullable text, TelephoneContact=nullable text, EmailContact=nullable text, FonctionContact=nullable text]}}),
    TransposeColonnesContact = Table.AddColumn(GrouperSurCodeClient,”TransposeColonnes”, each Table.Transpose(Table.SelectColumns([AllRows],{“InfosClient”}))),
    DevelopperColonnesContacts = Table.ExpandTableColumn(TransposeColonnesContact, “TransposeColonnes”, {“Column1”, “Column2”, “Column3”}, {“Contact 1”, “Contact 2”, “Contact 3”}),
    FractionneColonneContact1 = Table.SplitColumn(DevelopperColonnesContacts, “Contact 1”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), {“NomContact 1”, “TelephoneContact 1”, “EmailContact 1”, “FonctionContact 1”}),
    FractionneColonneContact2 = Table.SplitColumn(FractionneColonneContact1, “Contact 2”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), {“NomContact 2”, “TelephoneContact 2”, “EmailContact 2”, “FonctionContact 2”}),
    FractionneColonneContact3 = Table.SplitColumn(FractionneColonneContact2, “Contact 3”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), {“NomContact 3”, “TelephoneContact 3”, “EmailContact 3”, “FonctionContact 3”}),
    ModificationDataTypes_1 = Table.TransformColumnTypes(FractionneColonneContact3,{{“NomContact 1”, type text}, {“TelephoneContact 1”, type text}, {“EmailContact 1”, type text}, {“FonctionContact 1”, type text},{“NomContact 2”, type text}, {“TelephoneContact 2”, type text}, {“EmailContact 2”, type text}, {“FonctionContact 2”, type text},{“NomContact 3”, type text}, {“TelephoneContact 3”, type text}, {“EmailContact 3”, type text}, {“FonctionContact 3”, type text}}),
    SuppressionColonneAllRows = Table.RemoveColumns(ModificationDataTypes_1,{“AllRows”})
    in
    SuppressionColonneAllRows

    Ce n’est pas parfait sur la fin car le fractionnement des trois colonnes implique qu’il n’y en ait pas plus de trois autrement il faudra adapter la requête afin d’ajouter un ou plusieurs fractionnements.
    Peut-être cela te donnera-t-il des pistes de réflexions tout au moins je l’espère.
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    #126551
    Daniel
    Participant

    Bonjour Christophe, le Forum,

    Autre solution, là encore la fin n’est pas parfaite mais cela répond au besoin exprimé.
    Requête tabDepart (2)
    let
    Source = Excel.CurrentWorkbook(){[Name=”tabDepart”]}[Content],
    ModificationDataTypes = Table.TransformColumnTypes(Source,{{“CodeClient”, Int64.Type}, {“NomContact”, type text}, {“TelephoneContact”, type text}, {“EmailContact”, type text}, {“FonctionContact”, type text}}),
    GrouperSurCodeClient = Table.Group(ModificationDataTypes, {“CodeClient”}, {{“AllRows”, each _, type table [CodeClient=nullable number, NomContact=nullable text, TelephoneContact=nullable text, EmailContact=nullable text, FonctionContact=nullable text]}}),
    TransformColonneAllRows = Table.TransformColumns(GrouperSurCodeClient, {“AllRows”, each
    let
    GrouperNomContacts = Table.AddColumn(GrouperSurCodeClient , “NomContact”, each Text.Combine([AllRows][NomContact],”|”)),
    GrouperTelephoneContacts = Table.AddColumn(GrouperNomContacts , “TelephoneContact”, each Text.Combine([AllRows][TelephoneContact],”|”)),
    GrouperEmailContacts = Table.AddColumn(GrouperTelephoneContacts , “EmailContact”, each Text.Combine([AllRows][EmailContact],”|”)),
    GrouperFonctionContacts = Table.AddColumn(GrouperEmailContacts , “FonctionContact”, each Text.Combine([AllRows][FonctionContact],”|”)),
    NombreOccurenceNom = Table.AddColumn(GrouperFonctionContacts , “NbOccNomContact”, each Text.Length(Text.Select([NomContact] , “|”)) + 1),
    NombreOccurenceTel = Table.AddColumn(NombreOccurenceNom , “NbOccTelContact”, each Text.Length(Text.Select([TelephoneContact] , “|”)) + 1),
    NombreOccurenceEmail = Table.AddColumn(NombreOccurenceTel , “NbOccEmailContact”, each Text.Length(Text.Select([EmailContact] , “|”)) + 1),
    NombreOccurenceFct = Table.AddColumn(NombreOccurenceEmail , “NbOccFctContact”, each Text.Length(Text.Select([FonctionContact] , “|”)) + 1)
    in NombreOccurenceFct
    }),
    DevelopperTableData = Table.ExpandTableColumn(TransformColonneAllRows, “AllRows”, {“CodeClient”, “NomContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”, “NbOccNomContact”, “NbOccTelContact”, “NbOccEmailContact”, “NbOccFctContact”}, {“CodeClient.1”, “NomContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”, “NbOccNomContact”, “NbOccTelContact”, “NbOccEmailContact”, “NbOccFctContact”}),
    FractionnerColonneNomContact = Table.SplitColumn(DevelopperTableData, “NomContact”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), List.Max(DevelopperTableData[NbOccNomContact])),
    FractionnerColonneTelContact = Table.SplitColumn(FractionnerColonneNomContact, “TelephoneContact”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), List.Max(DevelopperTableData[NbOccTelContact])),
    FractionnerColonneEmailContact = Table.SplitColumn(FractionnerColonneTelContact, “EmailContact”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), List.Max(DevelopperTableData[NbOccEmailContact])),
    FractionnerColonneFctContact = Table.SplitColumn(FractionnerColonneEmailContact, “FonctionContact”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), List.Max(DevelopperTableData[NbOccFctContact])),
    AjoutColonneControle = Table.AddColumn(FractionnerColonneFctContact, “Contrôle”, each if [CodeClient] <> [CodeClient.1] then 0 else 1),
    FiltreLigneControleEgalesZero = Table.SelectRows(AjoutColonneControle, each ([Contrôle] = 1)),
    SuppressionColonnes = Table.RemoveColumns(FiltreLigneControleEgalesZero,{“NbOccNomContact”, “NbOccTelContact”, “NbOccEmailContact”, “NbOccFctContact”,”Contrôle”}),
    PermutationdesColonnes = Table.ReorderColumns(SuppressionColonnes,{“CodeClient”, “NomContact.1”, “TelephoneContact.1”, “EmailContact.1”, “FonctionContact.1”, “NomContact.2”, “EmailContact.2”, “FonctionContact.2”, “NomContact.3”, “EmailContact.3”, “FonctionContact.3”})
    in
    PermutationdesColonnes
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    #126590
    Christophe CARRE
    Participant

    Bonjour,
    Je vous remercie pour toutes vos réponses. Je dois pouvoir utiliser une de vos solutions pour résoudre mon problème.
    Merci à tous !
    Christophe

    #126662
    Stéphane Lorin
    Participant

    Bonjour

    Je pense qu’il est plus simple de créer une fonction personnalisée
    Vous appliquez ensuite cette fonction lors du regroupement

    la fonction “Dépivot” :

    (Données as table) as table =>
    let
    Index = Table.AddIndexColumn(Données, “Index”, 1, 1, Int64.Type),
    UnPivot = Table.UnpivotOtherColumns(Index, {“CodeClient”, “Index”}, “Attribut”, “Valeur”),
    Attribut = Table.CombineColumns(Table.TransformColumnTypes(UnPivot, {{“Index”, type text}}, “fr”),{“Attribut”, “Index”},Combiner.CombineTextByDelimiter(” “, QuoteStyle.None),”Attribut.1”),
    Pivot = Table.Pivot(Attribut, List.Distinct(Attribut[Attribut.1]), “Attribut.1”, “Valeur”)
    in
    Pivot

    A appliquer manuellement dans le Group

    Table.Group(Etape-Précédente, {“CodeClient”}, {{“Données”, each Dépivot(_)}})

    il ne reste plus qu’à développer les colonnes

    Stéphane

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