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

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Selded
Helper III
Helper III

Derive 24 hour shift date. Overlapping calendar date

 

I need a query to derive shift date from my data table. The expected Shift date is what i have highlighted in yellow, column shift date.

Selded_1-1749205106522.png

 

8 REPLIES 8
ronrsnfld
Super User
Super User

Can't you just subtract six hours from your datetime?

= Table.AddColumn(#"Changed Type", "Shift Date", each Date.From(([Date] & [Time]) -#duration(0,6,0,0)), type date)

 

If you use the Add Custom Column dialog:

 

ronrsnfld_0-1749207894099.png

 

 

No, i only need to subtract for the time between 12 mindnight to 6 am of next morning 

Using your other data set, and merely subtracting six hours from each datetime:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bdA7DoRADAPQq6CpkRjng3bS7QGQtkfc/xrLlGC3T4mc+DwbNmyWbW1RhuV7tGt9YJjCJMzqLtB4/caPwiHQ1brE6Ar5o6zk9F0dP8pDoCgEvSA1OR8o7EpTqBXG8nvrDGN0MFp1HrVZNWM4oc8G3hjz0onXHw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Time = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Time", type time}}),
    #"Add Shift Date" = Table.AddColumn(#"Changed Type","Shift Date", 
        each Date.From(([Date] & [Time]) - #duration(0,6,0,0)), type date)
in
    #"Add Shift Date"

 

Please note that the date format is mm/dd/yyyy since I am in the US.

 

ronrsnfld_0-1749329519552.png

 

 

If you subtract from all the datetimes, the results will be the same, and the equation is simpler.

eg. 4/6/2025 6AM - 6hrs => 4/6/2025

      5/6/2025 5:59AM - 6hr => 4/6/2025

Cookistador
Solution Sage
Solution Sage

Hi @Selded 

 

The following dax code for a calculated column shoudl work

 

ShiftDate =
VAR EventDateTime = [Date] + [Time]
VAR ShiftStartTime = TIME(6, 0, 0) 
VAR ShiftEndTime = TIME(17, 59, 59) 
VAR TimeOnly = TIME(HOUR(EventDateTime), MINUTE(EventDateTime), SECOND(EventDateTime))
RETURN
IF (
TimeOnly >= ShiftStartTime && TimeOnly <= ShiftEndTime,
[Date], 
[Date] - 1 
)

@Cookistador thank you, I will try this. I wanted this done in power qury because i will need the shiftdate column for a future merge. Any tips how to achieve this in power query

I'm very sorry, You are a right, we are on Power query board 🙂

You can achieve that with the following M code for a custom culomn

 

let
timeValue = [Time],
dateValue = [Date],
shiftStart = #time(6, 0, 0),
shiftEnd = #time(17, 59, 59),
shiftDate = if timeValue >= shiftStart and timeValue <= shiftEnd then
dateValue 
else
Date.AddDays(dateValue, -1) 
in
shiftDate

It returned an error. some dates came through. Example for the first error shiftdste should be 31st december 2024

Selded_0-1749211496903.png

 

Helpful resources

Announcements
May PBI 25 Carousel

Power BI Monthly Update - May 2025

Check out the May 2025 Power BI update to learn about new features.

May 2025 Monthly Update

Fabric Community Update - May 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors