Problème de temps

Accueil – Le CFO masqué Forums Power Pivot Problème de temps

5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Articles
  • #93252
    JMAIN
    Participant

    Bonjour,

    Je rencontre une difficulté avec une base de données que je souhaite utiliser dans Power Query.
    Je m’explique :
    J’ai ce format de temps et je n’arrive pas à le mettre soit en total secondes soit en 00:00:00
    1 heure 23 minutes 32 secondes
    13 secondes
    1 seconde
    1 minute
    2 heures 1 minute
    J’ai essayé de plusieurs façons mais en vain (fractionner/remplacer etc).

    Auriez-vous une solution ?

    Cordialement

    #93262
    Stéphane Lorin
    Participant

    Bonjour

    voir en PJ une proposition de solution.
    l’idée est d’avoir une table de correspondance qui donne le nb de secondes et la durée de chaque “mot” : heures, heure, minutes, minute, secondes, seconde.

    avec vos données à transformer :
    j’ajoute un index et je duplique la colonne
    je fractionne les données suivant la transition espace/chiffre. j’ai donc choisi la transition non chiffre/chiffre et j’ai modifié manuellement la formule pour remplacer la fonction avec “not Text.Contains” par {” “} mais ceci n’est pas obligatoire.
    puis je “dépivote” les colonnes ainsi créées pour avoir en ligne les heures, les minutes, les secondes.
    je fractionne de nouveau cette colonne pour avoir d’un coté le nombre et de l’autre le nom (heure, minute, seconde) et je fusionne avec la table que j’évoquais au début pour récupérer les durées (3600 et 1:00:00 pour les heures)
    il ne me reste plus qu’à multiplier les nombres d’heures, minutes et secondes par ces durées, puis à ajouter l’ensemble suivant l’index avec un regroupement.

    J’espère que ces explications et le fichier joint vous permettront de répondre à votre problème

    Stéphane

    Attachments:
    You must be logged in to view attached files.
    #93265
    Stéphane Lorin
    Participant

    Bonjour
    j’ai une autre proposition

    vous remplacez
    – ” heure” par *3600 avec un espace devant le mot mais sans le “s” final s’il y a plusieurs heures
    – ” minute” par *60
    – ” seconde” par rien “”
    – “s” par rien “” (pour gérer les pluriels)
    – les espaces restants ” ” par “+”

    vous avez ainsi “1 heure 23 minutes 32 secondes” qui est transformé en “1*3600+23*60+32”
    vous évaluez cette chaine de caractère avec Expression.Evaluate(…,#shared) pour obtenir le nombre de secondes (voir un de mes précédents message sur cette fonction peu connue)
    Enfin pour avoir la valeur en hh:mm:ss vous utilisez #duration(0,0,0,nb_secondes)

    C’est plus simple que ma solution précédente avec fractionnement, pivot, fractionnement, fusion et regroupement

    Stéphane

    Attachments:
    You must be logged in to view attached files.
    #93272
    JMAIN
    Participant

    Bonjour Stéphane et merci,

    La deuxième option fonctionne parfaitement (pour l’instant la seule que j’ai testé).
    Je testerais la première qui pourra surement servir à un moment.

    Cordialement.

    #93273
    Stéphane Lorin
    Participant

    Bonjour
    Merci du retour

    Contrairement à ce que j’écrivais hier, il n’y a même pas besoin du #shared :
    Expression.Evaluate(“1*3600+23*60+32”) renverra 5012
    puis #duration(0,0,0,5012) pour obtenir la durée 0.01:23:32 (soit 0 jour, 1 heure, 23 minutes et 32 secondes)
    Stéphane

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