4

In Power Bi, I have a table that contains Name and TimeSpent by user in seconds. I want to convert total seconds spent by all users into duration format (hh:mm)

When I am getting seconds in hh:mm format for each user from database query, the values are coming up like these 12:63 etc. After importing these values into power bi, I tried to set its datatype to DateTime format but power bi shows an error saying that it is not a valid value. If I set the datatype of the column as string then strings dont add up.

What can be the ideal way to do it?

Fabien
  • 4,614
  • 2
  • 16
  • 33
Sonali
  • 2,135
  • 6
  • 30
  • 63

6 Answers6

5

you can solve this in one line:

measure = FORMAT(TIME(0;0;tableNAME[your_column]);"HH:mm:ss")
Alex Myers
  • 5,068
  • 7
  • 21
  • 35
Jonas Correa
  • 51
  • 1
  • 2
4

You can try the following DAX:

HHMMSS = 
INT(Table[TimeSpent] / 3600) & ":" &
RIGHT("0" & INT((Table[TimeSpent] - INT(Table[TimeSpent] / 3600) * 3600) / 60), 2) & ":" &
RIGHT("0" & MOD(Table[TimeSpent], 3600), 2)

Source

Foxan Ng
  • 6,468
  • 4
  • 28
  • 39
  • 1
    suppose my total seconds are 1625038 which are `151 hours` and `23 minutes`. Using this formula, the hours are coming `51:23`, `1` is getting truncated. – Sonali Aug 10 '17 at 05:46
  • @Sonali I have updated the DAX. Please check if it works. – Foxan Ng Aug 10 '17 at 07:51
  • Hi @Sonali Does this help solving the issue after all? If so, you can [accept this answer](https://meta.stackexchange.com/a/5235/313506) to positively close the question. – Foxan Ng Aug 25 '17 at 15:47
  • 1
    I changed it a little `IF(INT(Query1[Total Time] / 3600) = 0,"00",INT(Query1[Total Time] / 3600)) & ":" & RIGHT("0" & INT((Query1[Total Time] - INT(Query1[Total Time] / 3600) * 3600) / 60), 2)` – Sonali Aug 29 '17 at 10:27
  • can anyone help in adding datepart as well in above query! – Ankit Nov 27 '17 at 11:48
1

Had a similar question but for D:HH:MM:SS, code below if it's of use.

DurTime (meas) = 
VAR vDur = <<<duration in CALCULATE(SUM(seconds)) >>>
  RETURN INT(vDur/86400) & ":" &                     //Days
    RIGHT("0" & INT(MOD(vDur/3600,24)),2) & ":" &    //Hours 
    RIGHT("0" & INT(MOD(vDur/60,60)),2) & ":" &      //Minutes
    RIGHT("0" & INT(MOD(vDur,60)),2)                 //Seconds
timo
  • 11
  • 1
1

DAX code:

 = TIME(0,0,SUM('Table'[Timespent]))

Then click the modelling tab and choose Format - Date Time and choose the appropriate format.

RET
  • 851
  • 6
  • 15
0

That's a better formula, which I'm using in PBI: HHMMSS = FORMAT(TIME(int(Table[TimeSpent] / 3600); int(mod(Table[TimeSpent]; 3600) / 60);int(mod(mod(Table[TimeSpent]; 3600); 60))); "HH:mm:ss")

0

I wanted a Power BI Measure wich is easy to read for this problem, code below if it's of use.

HH:MM = 
VAR TotalDuration = SUM(tableNAME[your_column] ) //if you use a measure just leave the SUM part out
VAR TotalHours = TRUNC (TotalDuration/3600)
VAR Min_ =  FORMAT(TRUNC(TotalDuration - TotalHours * 3600),"00")
RETURN
    TotalHours & ":" & Min_

The solution is adopted from the top answer of this question PowerBi Duration calculation in hh:mm:ss