Forum Discussion
Intellar
2 years agoFrequent Visitor
Create a table with a 5 day range without weekend days
Hi, So i am trying to calculate the following but im stuck. I want to create a table that always shows 5 dates. The dates should change depending on the current day and it should always be the ...
- 2 years ago
Hello, Intellar,
do it in power query like this.
New query -> Blank Query -> go to Advanced Editor and paste this:
let today = Date.From(DateTime.FixedLocalNow()), start = today - #duration(8,0,0,0), end = today + #duration(8,0,0,0), listDates = List.Dates(start, Number.From(end-start)+1, #duration(1,0,0,0) ), removeWeekends = List.Select(listDates, each not List.Contains({"Sunday", "Saturday"}, Date.DayOfWeekName( Date.From(_), "en"))), positionOfToday = if List.PositionOf(removeWeekends, today) = -1 then List.PositionOf(removeWeekends, List.Max(List.Select(removeWeekends, each Date.From(_) < today ))) else List.PositionOf(removeWeekends, today), correctPositions = {positionOfToday-2..positionOfToday+2}, finalList = List.Transform(correctPositions, each removeWeekends{_} ), #"Converted to Table" = Table.FromList(finalList, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type date}}), #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1", "Date"}}) in #"Renamed Columns"EDIT:
If today is weekend, it's gonna take Friday as today.
vojtechsima
Super User
2 years agoHello, Intellar,
do it in power query like this.
New query -> Blank Query -> go to Advanced Editor and paste this:
let
today = Date.From(DateTime.FixedLocalNow()),
start = today - #duration(8,0,0,0),
end = today + #duration(8,0,0,0),
listDates = List.Dates(start, Number.From(end-start)+1, #duration(1,0,0,0) ),
removeWeekends = List.Select(listDates, each not List.Contains({"Sunday", "Saturday"}, Date.DayOfWeekName( Date.From(_), "en"))),
positionOfToday = if List.PositionOf(removeWeekends, today) = -1 then List.PositionOf(removeWeekends, List.Max(List.Select(removeWeekends, each Date.From(_) < today ))) else List.PositionOf(removeWeekends, today),
correctPositions = {positionOfToday-2..positionOfToday+2},
finalList = List.Transform(correctPositions, each removeWeekends{_} ),
#"Converted to Table" = Table.FromList(finalList, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type date}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1", "Date"}})
in
#"Renamed Columns"
EDIT:
If today is weekend, it's gonna take Friday as today.
- Ahmedx2 years ago
Super User
look what happens if today is today = #date(2023, 10, 22) or today = #date(2023, 10, 21)
- vojtechsima2 years ago
Super User
Ahmedx Very good point, I didn't check for weekened, thanks, I edited the solution.
- Intellar2 years agoFrequent Visitor
vojtechsima this seems to be the solution thanks for the help!
- vojtechsima2 years ago
Super User
Thanks for the feedback, appreciate the kudos.
- vojtechsima2 years ago
Super User
I edited the query, there was bug in case of weekends, thanks Ahmedx for pointing out.