nopassport1
nopassport1

Reputation: 1944

Convert a number column into a time format in Power BI

I'm looking for a way to convert a decimal number into a valid HH:mm:ss format.

I'm importing data from an SQL database.

One of the columns in my database is labelled Actual Start Time.

The values in my database are stored in the following decimal format:

73758    // which translates to 07:27:58
114436   // which translates to 11:44:36

I cannot simply convert this Actual Start Time column into a Time format in my Power BI import as it returns errors for some values, saying it doesn't recognise 73758 as a valid 'time'. It needs to have a leading zero for cases such as 73758.

To combat this, I created a new Text column with the following code to append a leading zero:

Column = FORMAT([Actual Start Time], "000000")

This returns the following results:

073758
114436

-- which is perfect. Exactly what I needed.

I now want to convert these values into a Time.

Simply changing the data type field to Time doesn't do anything, returning:

Cannot convert value '073758' of type Text to type Date.

So I created another column with the following code:

Column 2 = FORMAT(TIME(LEFT([Column], 2), MID([Column], 3, 2), RIGHT([Column], 2)), "HH:mm:ss")

To pass the values 07, 37 and 58 into a TIME format.

This returns the following:

 _______________________________________
| Actual Start Date | Column | Column 2 |
|_______________________________________|
|       73758       | 073758 | 07:37:58 |
|       114436      | 114436 | 11:44:36 |

Which is what I wanted but is there any other way of doing this? I want to ideally do it in one step without creating additional columns.

Upvotes: 1

Views: 9521

Answers (2)

CR7SMS
CR7SMS

Reputation: 2584

You could use a variable as suggested by Aldert or you can replace Column by the format function:

Time Format = FORMAT(
                    TIME(
                        LEFT(FORMAT([Actual Start Time],"000000"),2),
                        MID(FORMAT([Actual Start Time],"000000"),3,2),
                        RIGHT([Actual Start Time],2)),
                "hh:mm:ss")

Edit:

If you want to do this in Power query, you can create a customer column with the following calculation:

Time.FromText(
     if Text.Length([Actual Start Time])=5 then Text.PadStart( [Actual Start Time],6,"0") 
     else [Actual Start Time])

Once this column is created you can drop the old column, so that you only have one time column in the data. Hope this helps.

Upvotes: 1

Aldert
Aldert

Reputation: 4313

I, on purpose show you the concept of variables so you can use this in future with more complex queries.

TimeC = 
var timeStr = FORMAT([Actual Start Time], "000000")
return FORMAT(TIME(LEFT([timeStr], 2), MID([timeStr], 3, 2), RIGHT([timeStr], 2)), "HH:mm:ss")

Upvotes: 1

Related Questions