Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
misunika95
Frequent Visitor

Duration conversion issues

Hi Everyone!

 

I have some data that reflects how long a person took to resolve a dispute. The format is hh:mm (for example 1328:45) and when I try to change the data type to duration the following error appears in Power Query:

 

Expression.Error: We couldn't parse the Duration literal.
Details:
1328:45

 

Does anyone know how to fix this problem? Thanks in advance guys 🙂

1 ACCEPTED SOLUTION
artemus
Microsoft Employee
Microsoft Employee

You can use the following custom step:

= Table.TransformColumns(PreviousStep,{{"ColumnName", each let parsed = Text.Split(_, ":") in #duration(0, 0, Int64.From(parsed{0}), Int8.From(parsed{1})), type duration}})

Just change PreviousStep and "ColumnName" to appropiate values.

View solution in original post

12 REPLIES 12
artemus
Microsoft Employee
Microsoft Employee

You can use the following custom step:

= Table.TransformColumns(PreviousStep,{{"ColumnName", each let parsed = Text.Split(_, ":") in #duration(0, 0, Int64.From(parsed{0}), Int8.From(parsed{1})), type duration}})

Just change PreviousStep and "ColumnName" to appropiate values.

Anonymous
Not applicable

Hello @artemus 

I wanted to convert the column (tot_loggedhours) from text to duration to total seconds, in order to get the total duration.

do you know how to fix the below errors?


Please help me thanks.

 

--

Paul

Conversion.PNGExpression Error.PNG

The number of hours is over 24, meaning it expects a day parameter like 1.2:30:45.

 

Just split the column by :, then convert each part to number, multiply the minutes and hours, and finallly add them all up

Just to clarify to other PBI users. I insert this code as a custom step where I would have changed the data type to Duration. And it worked perfectly for me. Thank you.

Anonymous
Not applicable

Hi @artemus ,

 

Thank you for the solution, it helped fix a similar issue i had with my numbers. I do have a quick question about the logic.

 

So, using your formula, i see a cell which was previously text(hh:mm:ss) 1594:44:28 changes to a duration of 1.02:34:44 (ddd.hh:mm:ss) post applying this logic. I am a bit confused, i was expecting to see around 66 days instead of the 1.02 like above.

 

It'd greatly help if you can explain the logic of the custom step. 

 

Thanks for your time.

 

-K

The formula I gave only works for mm:ss, not hh:mm:ss. It treated your 1594:44:28 as 1594:44

 

If you had that format you could use:

#duration(0, Int64.From(parsed{0}), Int8.From(parsed{1}, Int8.From(parsed{2})

 

This would only work if you always had the hour component (event if it was 0). If you wanted to support both formats would you need to:

 

if parsed{2}? = null then #duration(0, 0, Int64.From(parsed{0}), Int8.From(parsed{2})) else #duration(0, Int64.From(parsed{0}), Int8.From(parsed{1}), Int8.From(parsed{2}))

 

 

Anonymous
Not applicable

Thanks for taking the time to reply. I am running into this error at the else part of your code. 

 

I am pretty new to M code, can you please help correct any syntax issues i might have overlooked?

 

= Table.TransformColumns(#"Reordered Columns",{{"Time to Accept", each let parsed = Text.Split(_, ":") in if parsed{2}? = null then #duration(0, 0, Int64.From(parsed{0}), Int8.From(parsed{2}) else #duration(0, Int64.From(parsed{0}), Int8.From(parsed{1}, Int8.From(parsed{2}), type duration}})

 

Error -

 

Thaks again for your time.

 
 

pbi_pquery_delete.png

I have the same SyntaxError. Did you have the solution?

The formula has been corrected.

Thank you for the information. Is there any way to have the Duration data type to diaplay the format as hh:nn:ss rather than d.hh:nn:ss?

It worked, thanks a lot! Do you happen to know how can I display the data? At the visualization level I get very low number values.

Thank you!!


@artemus wrote:

You can use the following custom step:

= Table.TransformColumns(PreviousStep,{{"ColumnName", each let parsed = Text.Split(_, ":") in #duration(0, 0, Int64.From(parsed{0}), Int8.From(parsed{1})), type duration}})

Just change PreviousStep and "ColumnName" to appropiate values.


 

As part of your final step you can change the column type back to text. Note that if you do this, it will display it in [dd.][hh:][mm:]ss format (as seen in the previewer.

 

However, if you do this it will not sort correctly in the visualizer. To get around this, duplicate the duration column and then change the one you want to display to text. After loading it into the report view, select the text field, then select Modeling from the top ribbon and Sort by Column and choose the duration column that wasn't changed to text.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.