Power Query PQ_Cumul durée et modification type sur nombre inconnu de colonnes

Cousinhub

XLDnaute Barbatruc
Bonjour,
Grâce à @Hasco , j'ai réussi à additionner des "durées" de travail de personnels en fonction des clients. Maintenant, le nombre de clients pouvant évoluer, je désirerais :
- Modifier le type de toutes les colonnes (sauf la 1ère) en "duration" (fait dans la requête jointe, mais en manuel)
- Ajouter une colonne "Total" par personne tout à droite (pour le total par client, pas de soucis, il suffit d'insérer le total des lignes dans la requête chargée)
Vous remerciant par avance.
Bonne journée et bon W-E
 

Pièces jointes

  • Exemple Cumul durée.xlsx
    15.2 KB · Affichages: 9
Solution
Bonjour bhbh, le forum,

Tu peux essayer ce code :
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="T_Data"]}[Content],
    ModType = Table.TransformColumnTypes(Source, List.Transform(List.RemoveFirstN(Table.ColumnNames(Source),1), each {_, type duration})),
    AjoutColonneTotal = Table.AddColumn(ModType, "Total", each List.Sum(List.RemoveFirstN(Record.ToList(_), 1)), type duration)
in
    AjoutColonneTotal
A+

mromain

XLDnaute Barbatruc
Bonjour bhbh, le forum,

Tu peux essayer ce code :
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="T_Data"]}[Content],
    ModType = Table.TransformColumnTypes(Source, List.Transform(List.RemoveFirstN(Table.ColumnNames(Source),1), each {_, type duration})),
    AjoutColonneTotal = Table.AddColumn(ModType, "Total", each List.Sum(List.RemoveFirstN(Record.ToList(_), 1)), type duration)
in
    AjoutColonneTotal
A+
 

Cousinhub

XLDnaute Barbatruc
Bonjour mromain,
Et merci pour ce code qui fonctionne parfaitement.
Il est bizarre que l'éditeur ne propose pas l'addition des colonnes typées "duration" dans le ruban "Ajouter une colonne", alors que List.Sum permet de le faire...
Le principal, c'est que cela fonctionne, et c'est le cas
Merci encore
 

Hasco

XLDnaute Barbatruc
Repose en paix
Hello @bhbh

Pour le changement de type :
= Table.TransformColumnTypes(Source ,let Colonnes = List.Skip(Table.ColumnNames(Source),1) in List.Zip({Colonnes,List.Transform(Colonnes,each Duration.Type)}))

Et pour la colonne Total de la ligne :
= Table.AddColumn(ModType, "Total", each List.Sum(List.Skip(Record.FieldValues(_),1)),type duration)

Et voilà :)

[Edition] vu le temps écoulé entre nos messages, je me demande pourquoi je n'ai pas vu vos derniers, lorsque j'ai ouvert ce fil la première fois ?! Etrange... [/Edition]
 

Pièces jointes

  • bh² Exemple Cumul durée.xlsx
    19.5 KB · Affichages: 9
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour @mromain

Je ne connais aucune différence entre les deux. Dans le petit monde des développeurs MS il court l'idée que deux développeurs auraient pondu l'une et l'autre sans savoir ce que leur confrère faisait. Faut-il s'y fier ????

Personnellement j'utilise de préférence Record.FieldValues parce que son nom est explicite. Qu'avec Record.ToList on ne sait à quoi s'attendre. Un nom sonne comme une propriété l'autre comme une méthode.

Cordialement
 
Dernière édition:

Amilo

XLDnaute Accro
Bonsoir à tous,

Une autre proposition Power query pour le fun,

VB:
let
    Source = Excel.CurrentWorkbook(){[Name="T_Data"]}[Content],
    #"Type modifié" = Table.TransformColumns(Source,{{"Personnel", Text.From}}, Duration.From),
    Total = Table.AddColumn(#"Type modifié", "Total", each List.Sum(List.Range(Record.ToList(_),1)), type duration)
in
    Total

Sinon, effectivement je ne vois pas de différence non plus entre Record.FielValue et Record.ToList
Ces 2 fonctions sont très similaires.

Cordialement
 

Pièces jointes

  • Exemple Cumul durée.xlsx
    19 KB · Affichages: 4
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 275
Membres
103 170
dernier inscrit
HASSEN@45