2
votes

Comment trouver la durée totale du temps en power bi?

J'ai le format de l'heure dans le texte sous forme de tableau dans Power bi.

Table

Je veux trouver la durée totale du temps en additionnant tous les temps ensemble en jours, heures, minutes, secondes Quelque chose comme ceci: -

Résultat

Comment puis-je écrire Dax pour cela?

Merci d'avance!!


2 commentaires

Votre format d'heure est-il> hr: mm: ss?


oui .. le format est supérieur à 24 heures


3 Réponses :


0
votes

Si vos valeurs d'entrée représentent le format "HH: mm: ss", vous pouvez effectuer les étapes suivantes pour obtenir la sortie requise.

Étape 1 : Après avoir chargé vos données, dupliquez votre colonne "heure", puis divisez la colonne comme indiqué dans l'image ci-dessous en utilisant le délimiteur ":"

entrez la description de l'image ici

La sortie de l'action ci-dessus sera comme ci-dessous. Veuillez renommer les noms de colonne en heure, minute et seconde. Modifiez également le type de données de ces colonnes en nombre / nombre entier.

entrez la description de l'image ici

Étape 2 : Ajouter une colonne personnalisée avec script-

custom_second_to_day = 

var DayCount = INT(total_time[m_total_second]/(24*60*60))
var HoursCount = MOD(INT(total_time[m_total_second]/(60*60)),24)
var MinCount   = MOD(INT(total_time[m_total_second]/60),60)
var SecCount   = MOD(total_time[m_total_second],60)

RETURN DayCount & " Days & " & HoursCount & " Hours & " & MinCount & " Minutes & " & SecCount & " Seconds"

La sortie sera comme ci-dessous avec le nombre total de secondes par ligne-

entrez la description de l'image ici

Étape 3 : Revenez au rapport en appliquant les modifications.

Étape 4 : Créez une mesure comme ci-dessous -

total_second = 
([Hour] * 60 * 60)
+ ([Minute] *60)
+ ([Second])

Le résultat final de la mesure sera - " 2 jours et 21 heures et 56 minutes et 51 secondes "


0 commentaires

1
votes

Bien que vous ayez déjà exclu ma première réponse, je souhaite vous faire part d'une autre option. Je la poste en tant que réponse distincte car je ne veux pas gâcher entre deux réponses.

Vous pouvez également tout faire en utilisant DAX sans les étapes que j'ai expliquées dans ma réponse précédente. Vous pouvez le faire directement à partir de la liste de valeurs comme-

entrez la description de l'image ici

La requête DAX est (un peu grande mais vous pouvez faire un essai) -

total_seconds_dax = 

var total_second = 
SUMX(
    total_time,
    INT(
        MID(
            total_time[Time],
            1,
            SEARCH(":",total_time[Time],1,0) - 1
        )
    )
) * 60 * 60
+
SUMX(
    total_time,
    INT(
        MID(
            total_time[Time],
            SEARCH(":",total_time[Time],1,0) + 1,
            SEARCH(
                ":",
                total_time[Time],
                SEARCH(":",total_time[Time],1,0) + 1
               ,0
            ) 
            - 
            (SEARCH(":",total_time[Time],1,0) + 1)
        )
    )
) * 60
+
SUMX(
    total_time,
    INT(
        MID(
            total_time[Time],
            SEARCH(
                ":",
                total_time[Time],
                SEARCH(":",total_time[Time],1,0) + 1
                ,0
            ) + 1 
            ,
            LEN(total_time[Time]) - 
            SEARCH(
                ":",
                total_time[Time],
                SEARCH(":",total_time[Time],1,0) + 1
                ,0
            )
        )
    )
)

var DayCount = INT(total_second/(24*60*60))
var HoursCount = MOD(INT(total_second/(60*60)),24)
var MinCount   = MOD(INT(total_second/60),60)
var SecCount   = MOD(total_second,60)

RETURN DayCount & " Days & " & HoursCount & " Hours & " & MinCount & " Minutes & " & SecCount & " Seconds"


2 commentaires

Hey @mkRabbani J'ai modifié votre deuxième solution que vous avez donnée. J'ai réduit la taille de Dax en utilisant certaines fonctions de texte. Regarde juste


J'ai vu ça. Mais pour cela, vous devez vous assurer que la valeur contient toujours 2 caractères pour l'heure, 2 caractères pour min et 2 caractères pour la seconde. Autre cas, cela ne fonctionnera pas. En y réfléchissant, je suis allé chercher une solution longue mais dynamique.



2
votes
total_duration_dax_2 = 

var total_second = 
SUMX(
    TIME2,
    INT(
        VALUE(LEFT(TIME2[Table2],2))
        
    )
) * 60 * 60
+
SUMX(
    TIME2,
    INT(
        VALUE(MID(TIME2[Table2],4,2))
    )
) * 60
+
SUMX(
    TIME2,
    INT(
        VALUE(RIGHT(TIME2[Table2],2))
        
    )
)

var DayCount = INT(total_second/(24*60*60))
var HoursCount = MOD(INT(total_second/(60*60)),24)
var MinCount   = MOD(INT(total_second/60),60)
var SecCount   = MOD(total_second,60)

RETURN DayCount & " Days & " & HoursCount & " Hours & " & MinCount & " Minutes & " & SecCount & " Seconds"
The result is same

0 commentaires