Microsoft 365 Trier sur le deuxième champ dans un TCD

xUpsilon

XLDnaute Accro
Bonjour,

Ca fait un moment que je ne suis pas passé ici, mais là je tombe sur un os et ça m'embête fortement.
La question est "simple", comment faire pour trier un TCD non pas sur les labels du premier champ, mais plutôt sur ceux du second champ ?
Je mets en PJ mon exemple, mais voici ce que j'ai :

1709896537996.png


Je voudrais ici que le tri sur la date me fasse ressortir Thibault en haut de mon TCD, car sa date est la plus grande de la liste. Je veux trier par ordre décroissant au sein des "Nom", mais aussi au global, donc avoir d'abord Thibault (car 04/02/24 est le plus grande), puis Louis et Michel (car 02/02/24 est le deuxième plus grand), puis Pierre (01/02/24 est le troisième plus grand), etc ...

Qui saurait m'expliquer svp ?

Merci d'avance et bonne journée,
 

Pièces jointes

  • TriTCDParSecondChamp.xlsx
    14.8 KB · Affichages: 12
Solution
Bonjours à tous,
un essai par Power Query donnant un ersatz de pivot table sous forme d'une table.

edit: code optimisé
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    ColName= Table.ColumnNames(Source),
    #"Sorted Rows" = Table.Sort(Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Data"]}[Content],{{ColName{1}, type date}}),{{ColName{1}, Order.Descending}}),
    #"Grouped Rows" = Table.AddIndexColumn(Table.TransformColumns(Table.Combine(Table.Group(#"Sorted Rows", ColName{0}, {{"Count", each Table.SelectColumns(_, List.Transform({0,1,3}, each ColName{_}))}})[Count]), {{ColName{1}, each Date.ToText(_, [Format="dd-MMM" , Culture="en-US"] )}}), "Index", 0,1),
    #"Remove Duplicate Name" = Table.SelectColumns(Table.ReplaceValue(#"Grouped Rows", each...

chris

XLDnaute Barbatruc
Bonjour
Il faut mettre le date avant les noms mais en l'état ce TCD ne sert à rien puisque qu'il n'y a qu'un ligne das la source par couple nom date et, par ailleurs, un TCD doit se baser sur un tableau structuré, pas une plage finie...
 

xUpsilon

XLDnaute Accro
Re,

@chris mettre les dates avant les noms ne me convient pas tout à fait car je souhaite conserver mes noms groupés. Je voudrais avoir ceci en résultat final :
1709902375134.png

Je ne comprends pas ton point par rapport à une ligne par couple nom date, c'est précisément ce que je veux comme données donc je ne comprends pas trop ?
Par rapport aux tableaux structurés, ce fichier est un fichier exemple. Bien entendu le fichier réel se base sur un tableau structuré résultat d'une Query sur une DB SQL.

@JHA voir mon premier point adressé à Chris. Mon souci est que je souhaite conserver mes noms groupés, et ta solution me trie en ayant la Date comme élément primaire unique. Je souhaiterais en fait que mon élément primaire reste le nom, mais que le tri de ces noms soit basé sur la date maxi présente parmi les dates possibles pour ce nom (et non pas sur le nom en lui même).

Peut-être que ce n'est simplement pas faisable ainsi ?

Bonne journée,
 

chris

XLDnaute Barbatruc
RE
Les tableaux croisés sont hiérarchisés et le tri est forcément lié à l'ordre des champs.
Je ne comprends pas ton point par rapport à une ligne par couple nom date, c'est précisément ce que je veux comme données donc je ne comprends pas trop ?
Je parlais de la source : si le TCD a une relation de 1 à 1 avec la source ce n'est qu'un pseudo TCD

Pourquoi ne pas synthétiser dans la requête PowerQuery : tu auras le tri voulu
 

xUpsilon

XLDnaute Accro
Re,

Ah mince, ça répond donc à ma question...
Le TCD est utile dans la vraie situation, il ne s'agit ici que d'un exemple illustrant ce à quoi je pensais pouvoir arriver.
Est-ce que je saurais trier de la sorte dans PowerQuery ? J'ai la sensation qu'il me retournerait plutôt une ligne par Couple nom+date, plutôt que de regrouper les noms sur base de la plus grande date existante sur un nom donné. Mais je dois dire que je m'y connais assez peu en DAX, donc toute proposition est la bienvenue.

Bonne journée,
 

chris

XLDnaute Barbatruc
RE
DAX c'est PowerPivot, pas PowerQuery dont le langage est M
1709913289635.png

VB:
let
    Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Nom", type text}, {"Date", type date}, {"Nombre", Int64.Type}}),
    #"Lignes triées" = Table.Sort(#"Type modifié",{{"Date", Order.Descending}}),
    #"Lignes groupées" = Table.Group(#"Lignes triées", {"Nom"}, {{"Nombre", each List.Sum([Nombre]), type nullable number}, {"Tabl", each _, type table [Nom=nullable text, Date=nullable date, Nombre=nullable number]}}),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Lignes groupées", "Date", each List.Sort(Table.Column([Tabl],"Date"),Order.Descending)),
    #"Date développé" = Table.ExpandListColumn(#"Personnalisée ajoutée", "Date"),
    #"Colonnes permutées" = Table.ReorderColumns(#"Date développé",{"Nom", "Date", "Nombre", "Tabl"}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Colonnes permutées",{"Tabl"}),
    #"Type modifié1" = Table.TransformColumnTypes(#"Colonnes supprimées",{{"Date", type date}})
in
    #"Type modifié1"
 

alexga78

XLDnaute Occasionnel
Bonjours à tous,
un essai par Power Query donnant un ersatz de pivot table sous forme d'une table.



PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    ColName= Table.ColumnNames(Source),
    Date_type = Table.TransformColumnTypes(Source,{{ColName{1}, type date}}),
    #"Grouped Rows" = Table.Group(Date_type, ColName{0}, {{"Count", each Table.Sort(Table.SelectColumns(Table.AddColumn(_, "Merged", each  Date.ToText(Record.Field(_,ColName{1}),[Format="dd-MM-yyyy"]) & "@" & Text.From(Record.Field(_,ColName{3}))),"Merged"), {{"Merged", Order.Descending}})}}),
    #"Expanded Count" = Table.Sort(Table.ExpandTableColumn(#"Grouped Rows", "Count", {"Merged"}, {"Merged"}),{{"Merged", Order.Descending}}),
    #"Split by Delimiter" = Table.SplitColumn(#"Expanded Count", "Merged", Splitter.SplitTextByDelimiter("@", QuoteStyle.Csv), List.Transform({1,3}, each ColName{_})),
    #"Changed Type" = Table.TransformColumns(Table.TransformColumnTypes(#"Split by Delimiter",{{ColName{3}, Int64.Type}, { ColName{1}, type date}}), {{ ColName{1},  each Date.ToText(_, [Format="dd-MMM" , Culture="en-US"] )}}),
    #"Changed Name" = Table.RenameColumns(Table.ExpandTableColumn(Table.SelectColumns(Table.Group(#"Changed Type", ColName{0}, {{"Count", each Table.RenameColumns(Table.SelectColumns(Table.AddColumn(Table.AddIndexColumn (_, "Index", 1,1), "Nom2", each if [Index] = 1 then Record.Field(_,ColName{0}) else null), {"Nom2", ColName{1}, ColName{3}}), {"Nom2", ColName{0}})}}), "Count"), "Count" , List.Transform ({0,1,3}, each  ColName{_})),{{ColName{3}, "Sum of Nombre"}}),
    Total = Table.InsertRows(#"Changed Name", Table.RowCount(Source),{Record.FromList({"Grand Total", null, List.Sum(#"Changed Name"[Sum of Nombre])} , Table.ColumnNames(#"Changed Name"))})
in
    Total

1709995155117.png


Bon WE
 

Gégé-45550

XLDnaute Accro
Re,

@chris mettre les dates avant les noms ne me convient pas tout à fait car je souhaite conserver mes noms groupés. Je voudrais avoir ceci en résultat final :
Regarde la pièce jointe 1192456
Je ne comprends pas ton point par rapport à une ligne par couple nom date, c'est précisément ce que je veux comme données donc je ne comprends pas trop ?
Par rapport aux tableaux structurés, ce fichier est un fichier exemple. Bien entendu le fichier réel se base sur un tableau structuré résultat d'une Query sur une DB SQL.

@JHA voir mon premier point adressé à Chris. Mon souci est que je souhaite conserver mes noms groupés, et ta solution me trie en ayant la Date comme élément primaire unique. Je souhaiterais en fait que mon élément primaire reste le nom, mais que le tri de ces noms soit basé sur la date maxi présente parmi les dates possibles pour ce nom (et non pas sur le nom en lui même).

Peut-être que ce n'est simplement pas faisable ainsi ?

Bonne journée,
Bonjour,
Je ne vois pas trop autre chose que le tri manuel pour obtenir ça.
Comme ça ?
Cordialement,
 

Pièces jointes

  • TriTCDParSecondChamp.xlsx
    21.2 KB · Affichages: 2

alexga78

XLDnaute Occasionnel
Bonjours à tous,
un essai par Power Query donnant un ersatz de pivot table sous forme d'une table.

edit: code optimisé
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    ColName= Table.ColumnNames(Source),
    #"Sorted Rows" = Table.Sort(Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Data"]}[Content],{{ColName{1}, type date}}),{{ColName{1}, Order.Descending}}),
    #"Grouped Rows" = Table.AddIndexColumn(Table.TransformColumns(Table.Combine(Table.Group(#"Sorted Rows", ColName{0}, {{"Count", each Table.SelectColumns(_, List.Transform({0,1,3}, each ColName{_}))}})[Count]), {{ColName{1}, each Date.ToText(_, [Format="dd-MMM" , Culture="en-US"] )}}), "Index", 0,1),
    #"Remove Duplicate Name" = Table.SelectColumns(Table.ReplaceValue(#"Grouped Rows", each Record.Field(_,ColName{0}) , each  List.Accumulate(Table.ToColumns(#"Grouped Rows"){0}, {}, (s, c) => s & {if List.Contains(s, c) then null else c}){[Index]} ,Replacer.ReplaceValue, {ColName{0}}), ColName, MissingField.Ignore),
    #"Grand Total" = Table.InsertRows(#"Remove Duplicate Name", Table.RowCount(#"Remove Duplicate Name"),{Record.FromList({"Grand Total", null, List.Sum(Table.ToColumns(#"Remove Duplicate Name"){2})} , Table.ColumnNames(#"Remove Duplicate Name"))})
in
    #"Grand Total"
 
Dernière édition:

xUpsilon

XLDnaute Accro
Bonjour,

@chris ta solution fonctionne très bien, par contre j'ai deux fois la somme des deux lignes en sortie : Thibaut qui avait 33 et 21 se retrouve maintenant avec deux fois 54.
@alexga78 j'ai un problème, voici mon message d'erreur ainsi que l'étape à laquelle ça apparait :
1710853676217.png

A mon avis, le souci pourrait venir du formatage de date, je sais que j'ai déjà eu des problèmes en cherchant à pousser un fr-BE dans le pc de quelqu'un qui n'avait pas les bons paramètres de région.
As-tu une idée ?
@Laurent78 en effet je n'avais pas pensé à faire ainsi, c'est une autre possibilité, merci !

Bonne journée,
 
Dernière édition:

Discussions similaires

Réponses
11
Affichages
748

Membres actuellement en ligne

Statistiques des forums

Discussions
314 708
Messages
2 112 097
Membres
111 416
dernier inscrit
philipperoy83