Accueil – Le CFO masqué › Forums › Power Pivot › Problème de temps
- This topic has 4 réponses, 2 participants, and was last updated il y a 3 years et 4 months by Stéphane Lorin.
-
AuteurArticles
-
23 juillet 2021 à 9 h 42 min #93252JMAINParticipant
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
24 juillet 2021 à 13 h 15 min #93262Stéphane LorinParticipantBonjour
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.25 juillet 2021 à 3 h 05 min #93265Stéphane LorinParticipantBonjour
j’ai une autre propositionvous 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.26 juillet 2021 à 3 h 26 min #93272JMAINParticipantBonjour 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.
26 juillet 2021 à 5 h 00 min #93273Stéphane LorinParticipantBonjour
Merci du retourContrairement à 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 -
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.