Fabric is Generally Available. Browse Fabric Presentations. Work towards your Fabric certification with the Cloud Skills Challenge.
Chelsie Eiden is my new favorite human being on the face of the planet. I don't know her major but, even if she is majoring in math, it still wouldn't change my mind on this one. That's how much I like this individual. The reason she is my favorite human being on the face of the planet is because she has finally...FINALLY, solved a "problem" with Power BI that is, ohhhh, say at least 4 or 5 years old. Since the dawn of Power BI there has been this problem with aggregating duration in HH : MM : SS format. You could convert it to seconds to aggregate it but you couldn't display it in the hours, minutes, seconds format in a visual that properly aggregated it in column charts because the minute you did a concatenation or a format on it, "POOF" it became text. Maddening!! I have been harping on this issue for, well, forever, such as in this post I did with @konstantinos ages ago.
So, Chelsie, thank-you, thank-you, thank-you from the bottom of my heart! I have named this new Quick Measure just for you.
Chelsie Eiden's Duration = // Duration formatting // * @konstatinos 1/25/2016 // * Given a number of seconds, returns a format of "hh:mm:ss" // // We start with a duration in number of seconds VAR Duration = SUM([Duration]) // There are 3,600 seconds in an hour VAR Hours = INT ( Duration / 3600) // There are 60 seconds in a minute VAR Minutes = INT ( MOD( Duration - ( Hours * 3600 ),3600 ) / 60) // Remaining seconds are the remainder of the seconds divided by 60 after subtracting out the hours VAR Seconds = ROUNDUP(MOD ( MOD( Duration - ( Hours * 3600 ),3600 ), 60 ),0) // We round up here to get a whole number RETURN // We put the hours, minutes and seconds into the proper "place" Hours * 10000 + Minutes * 100 + Seconds
All but the last line is the code from that article that @konstantinos and I wrote years and years ago. The only difference is the last line. Once you have this measure, then all you have to do is implement Chelsie Eiden's Custom Format String with a value of "00:00:00" (no double quotes). Boom!!
eyJrIjoiYjE5ZDZkN2EtODdlNy00ZmUxLWIyOGItOWRhYjU0NDY2Y2VhIiwidCI6IjRhMDQyNzQzLTM3M2EtNDNkMi04MjdiLTAwM2Y0YzdiYTFlNSIsImMiOjN9
@Greg_Deckler This is great, super helpful, thank you for sharing. I've found one issue though - if you use a legend in the colomn chart, the total values are not accurate. The Total becomes a sum of each part of the time calc and you can get minutes and seconds greater than 60 (ex from the provided file, the total becomes "114:77:61" instead of "115:18:01") . Is there a way to structure this meausre so it displays correctly when a legend is added to the visualization? Screenshot below and pbix file attached. Thanks!
@bgriff135 I am going to guess that what is going on is that you essentially have kind of a measures totals problem going on but may have to take a closer look. So, I'm wondering if you need to do this essentially: Quick Measure, Measure Totals, The Final Word:
https://community.powerbi.com/t5/Quick-Measures-Gallery/Measure-Totals-The-Final-Word/m-p/547907
Hi Greg!
Formatting the value works properly, but I think we cannot visualize it
because the 1:00:00 bar shouldn't be ~40% larger than the 00:59:50 bar, since the difference is only 10 seconds (<1%), right?
Since May you can solve this problem by using measure calculating only minutes in y-axis and original measure on custom data label.
Take hours out of the original measure:
It would be great if you could show how this is now being done with an example please? Thank you!!
@strifler Well, the underlying numbers are 10000 and 6000 so, yes, that is an issue.
@Greg_Deckler Hi Greg. I cannot get this to work. It shows the values as billions (or millions if I narrow the scope down). Note: I only need it to show hours and minutes.
I have thoroughly examined Chelsie's file and can find no issue. Can you help?
@Anonymous So this happened in another thread dealing with this. I believe the fix was to go into the Values area of the visual and turn off auto display format and change it to None and then the custom format string worked as designed.
@Greg_Deckler I have a similar issue as mentioned by @Anonymous .
But in my case I have succeded in turning off auto display format and changing it to None. The custom format string 00:00:00 worked as designed.
I will like to display only hours and minutes eg. 12:34 and not 12:34:56.
How do I go about this? Using 00:00 displays 1234:57
@Greg_Deckler I have similar requirements
In my case I have also setup proper formating and successfully shown on Graphs with Auto off with HH:MM and MM:SS - I am really glad for your post!! 🙂
In addition user wants to view it in DD:HH:MM, Any idea how can I get to show in this format?
Thanks so much
@VizKid I am thinking this:
// We start with a duration in number of seconds
VAR Duration = SUM([Duration])
// There are 86,400 seconds in an day
VAR Days = INT ( Duration / 86400)
// There are 3600 seconds in a hour
VAR Hours = INT ( MOD( Duration - ( Hours * 86400 ),86400 ) / 3600)
// Remaining seconds are the remainder of the seconds divided by 60 after subtracting out the hours
VAR Minutes = INT (MOD ( MOD( Duration - ( Hours * 86400 ),86400 ), 3600 ) / 60)
RETURN
// We put the hours, minutes and seconds into the proper "place"
Days * 10000 + Hours * 100 + Minutes
Awesome - thanks so much @Greg_Deckler for your valueable help/feedback 🙂
I think I got it (Made one minor change). wanted to loop you back in... When I try to use DAX above, there was a typo maybe...
VAR Hours = INT ( MOD( Duration - ( Hours * 86400 ),86400 ) / 3600)
So I updated to resolve - Thoughts?
// We start with a duration in number of seconds
VAR Duration = SUM([Duration])
// There are 86,400 seconds in an day
VAR Days = INT ( Duration / 86400)
// There are 3600 seconds in a hour
VAR Hours = INT ( MOD( Duration - ( Days * 86400 ),86400 ) / 3600)
// Remaining seconds are the remainder of the seconds divided by 60 after subtracting out the hours
VAR Minutes = INT (MOD ( MOD( Duration - ( Days * 86400 ),86400 ), 3600 ) / 60)
RETURN
// We put the hours, minutes and seconds into the proper "place"
Days * 10000 + Hours * 100 + Minutes
Thank you so much for the addition of days to the formula. This is exactly what I was looking for and it worked.
@VizKid Yep, you got it, good catch.
Awesome - Thanks so much @Greg_Deckler . You are amazing, really appreciate your help!! 🙂
@Patrick_AW Try changing the last line to:
Hours * 100 + Minutes
Then try a custom format string like 0000:00 or 00:00
Thanks Greg.
Custom format of 00:00 works with the above.
Thanks Greg.
It's working as expected and it resolved the issues in my report.
Thank you so much for your help.
Regards,
Umasankar
Hi all
Not going to suggest I 100% understand this, been working blind on Power Bi and came across this whilst lookingn to sum time to be more than 24:00:00.
This issue I have with this is that I want to use this to calculate the number of working hours based on a number of days, i.e 07:00:00 * 7 should be 49:00:00.
Due to the data, I have had to create a column called Working Hours, this figure is repeated against each action so I am having to use the average of that column against the number of days....with me so far? Not sure I am.
Anywho, when changing the Sum([Duration]) to Average([Working Hours])*{Days]
The rest remains the same however I get results such as 08:45:00 * 5 = 7.00 rather than 43:45:00
Anyone able to point me in the right direction here? Much appreciated.