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 et 10 mois.
-
AuteurMessages
-
8 mars 2023 à 5 h 06 min #126346ChristopheParticipant
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,
ChristopheAttachments:
You must be logged in to view attached files.8 mars 2023 à 21 h 11 min #126394Maurice RoyParticipantBonjour Christophe,
Dans PowerQuery il y a une fonction dans requête et connexion\Accueil\Regrouper par et répondre aux questions.
Maurice
10 mars 2023 à 3 h 06 min #126471ChristopheParticipantBonjour 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.
Christophe10 mars 2023 à 19 h 09 min #126532Éric Ste-CroixParticipantBonjour 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.11 mars 2023 à 12 h 17 min #126548DanielParticipantBonjour 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
SuppressionColonneAllRowsCe 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
DanielAttachments:
You must be logged in to view attached files.11 mars 2023 à 14 h 57 min #126551DanielParticipantBonjour 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
DanielAttachments:
You must be logged in to view attached files.14 mars 2023 à 3 h 30 min #126590ChristopheParticipantBonjour,
Je vous remercie pour toutes vos réponses. Je dois pouvoir utiliser une de vos solutions pour résoudre mon problème.
Merci à tous !
Christophe15 mars 2023 à 7 h 48 min #126662Stéphane LorinParticipantBonjour
Je pense qu’il est plus simple de créer une fonction personnalisée
Vous appliquez ensuite cette fonction lors du regroupementla 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
PivotA 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
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.