Power Query - Moyenne de Durées

Bonjour,

je veux faire un Group.By avec Power Query sur des durées avec fonction d'agrégation "moyenne", le problème est que les durées excèdent parfois 24h.
Elles sont au format hh:mm:ss mais je ne sais pas quel type Excel choisir pour que ça fonctionne dans Power Query,
J'ai essayé "Duration" mais ça ne fonctionne pas, j'ai essayé des types personnalisés (par exemple hh:mm:ss) mais ça me change mes valeur (ça me change mon 39:00:00 en 15:00:00).

J'ai fait un fichier d'exemples,
le premier onglet contient mon tableau d'entrée ainsi que les résultats souhaités (calculés à la main donc peut-être avec quelques erreurs),
le second onglet contient mes tests (non concluants).

Merci pour votre aide !
A bientôt

Bonsoir,

Tu y étais presque...

Dans ta deuxième requête, tu calcules la moyenne, en décimal.

Transforme le type en "Durée"

image

puis, dans la requête insérée dans l'onglet, tu mets au format :

image

Bonne soirée

Oups grillé par CousinHub

Même solution donc je ne la poste pas

Hello Chris

@Slash07, finalement, même pas besoin de typer en "Duration", le simple fait de mettre au format [h]:mm:ss suffit....

Bonjour,

Merci beaucoup pour vos réponses ! (quelle réactivité de votre part )

J'ai une autre question pour essayer d'automatiser le process :
J'observe que même en précisant dans mon tableau source le type [h]:mm:ss, en sortie après Power Query il ressort des types "number" et j'ai l'impression que le type [h]:mm:ss n'existe pas dans Power Query :

capture

Y a-t-il un moyen de faire en sorte que le type de sortie soit automatiquement [h]:mm:ss ?
Merci

Bonjour,

Il n'existe pas dans PQ de format [hh]....

Les seuls formats traitant les heures sont "Time" (valeur max 23:59:59) ou Duration (sous la forme j.hh.mm.ss - 1.01.20.30 pour 25:20:30)

Il faut donc modifier le format dans le tableau restitué, comme proposé supra.

Bon dimanche

D'accord merci,

J'ai fait un second essai :
Je travaille avec des données d'entrée de type Texte et je fais les manipulations sur les minutes, secondes dans Power Query pour obtenir le format souhaité en sortie, cela fonctionne sauf que si dans une moyenne le nombre de minutes est strictement plus petit que 10 par exemple 5 alors j'obtiens un résultat sous la forme : "20:5:50" (Même souci avec les secondes).

capture2

Avez-vous une solution pour imposer le format dans Power Query à 2 chiffres pour les minutes et 2 chiffres pour les secondes ?

let
    Source = Excel.CurrentWorkbook(){[Name="Tableau8"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Duration", type text}}),
    #"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Type modifié", "Duration", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Hours", "Minutes", "Seconds"}),
    #"Type modifié1" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur",{{"Hours", Int64.Type}, {"Minutes", Int64.Type}, {"Seconds", Int64.Type}}),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Type modifié1", "Personnalisé", each 3600*[Hours]+60*[Minutes]+[Seconds]),
    #"Colonnes renommées" = Table.RenameColumns(#"Personnalisée ajoutée",{{"Personnalisé", "Total_seconds"}}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Colonnes renommées",{"Hours", "Minutes", "Seconds"}),
    #"Lignes groupées" = Table.Group(#"Colonnes supprimées", {"Name"}, {{"Mean", each List.Average([Total_seconds]), type number}}),
    #"Personnalisée ajoutée1" = Table.AddColumn(#"Lignes groupées", "Hours", each Number.RoundDown([Mean]/3600)),
    #"Personnalisée ajoutée2" = Table.AddColumn(#"Personnalisée ajoutée1", "Minutes", each Number.RoundDown(([Mean]-3600*[Hours])/60)),
    #"Personnalisée ajoutée3" = Table.AddColumn(#"Personnalisée ajoutée2", "Seconds", each Number.RoundDown([Mean]-3600*[Hours]-60*[Minutes])),
    #"Colonnes supprimées1" = Table.RemoveColumns(#"Personnalisée ajoutée3",{"Mean"}),
    #"Colonnes fusionnées" = Table.CombineColumns(Table.TransformColumnTypes(#"Colonnes supprimées1", {{"Hours", type text}, {"Minutes", type text}, {"Seconds", type text}}, "fr-FR"),{"Hours", "Minutes", "Seconds"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"Mean")
in
    #"Colonnes fusionnées"

Tout se passe dans le 3ème onglet :

Merci de votre aide.

Re-,

Peut-être ainsi :

let
    Source = Excel.CurrentWorkbook(){[Name="Tableau8"]}[Content],
    TypageD = Table.TransformColumns(Source, {"Duration", each  try let x = List.Transform(Text.Split(_,":"), Number.From) in #duration(0,x{0},x{1},x{2}) otherwise Duration.From(_)}),
    GroupBy = Table.Group(TypageD, {"Name"}, {{"Mean", each List.Average([Duration]), type duration}})
in
    GroupBy

Puis appliquer le format kivabien dans la requête restituée

Rechercher des sujets similaires à "power query moyenne durees"