Forum Discussion
jcastr02
2 years agoPost Prodigy
Turn Around Time - remove afterhours
I have two columns - Created Date and Resolved Date. I'm trying to do a turn around (difference Resolved-Created) but I'd like to exclude any hours after 4:30PM M-F; and all hours of Saturday to Sun...
- 2 years ago
let // this is your table. Replace #table with a ref to your query name tbl = #table( type table [created = datetime, resolved = datetime], {{#datetime(2024, 5, 7, 8, 0, 0), #datetime(2024, 5, 14, 16, 50, 0)}, {#datetime(2024, 5, 8, 7, 0, 0), #datetime(2024, 5, 12, 7, 30, 0)}, {#datetime(2024, 5, 4, 10, 0, 0), #datetime(2024, 5, 6, 16, 50, 0)}} ), // this function calculates duration on-hours // created = Created Date as datetime // resolved = Resolved Date as datetime // open = opening time as time (say, 8:00) // close = closing time as time (say 16:30) on_time = (created as datetime, resolved as datetime, open as time, close as time) => [ // days of week correction to get next working day corr_open = {1, 1, 1, 1, 3, 2, 1}, gen = List.Generate( () => [start = if Time.From(created) >= close or Date.DayOfWeek(created, Day.Monday) > 4 then Date.From(Date.AddDays(created, corr_open{Date.DayOfWeek(created, Day.Monday)})) & open else if Time.From(created) < open then Date.From(created) & open else created, end = List.Min({resolved, Date.From(start) & close})], (x) => x[start] <= resolved, (x) => [start = Date.From(Date.AddDays(x[end], corr_open{Date.DayOfWeek(x[end], Day.Monday)})) & open, end = List.Min({resolved, Date.From(start) & close})], (x) => x[end] - x[start] ), out = Duration.TotalHours(List.Sum(gen))][out], // here we add column with total hours total_hours = Table.AddColumn( tbl, "Turn Around Time", (x) => on_time(x[created], x[resolved], #time(8, 0, 0), #time(16, 30, 0))) in total_hours
AlienSx
2 years agoSuper User
let
// this is your table. Replace #table with a ref to your query name
tbl = #table(
type table [created = datetime, resolved = datetime],
{{#datetime(2024, 5, 7, 8, 0, 0), #datetime(2024, 5, 14, 16, 50, 0)},
{#datetime(2024, 5, 8, 7, 0, 0), #datetime(2024, 5, 12, 7, 30, 0)},
{#datetime(2024, 5, 4, 10, 0, 0), #datetime(2024, 5, 6, 16, 50, 0)}}
),
// this function calculates duration on-hours
// created = Created Date as datetime
// resolved = Resolved Date as datetime
// open = opening time as time (say, 8:00)
// close = closing time as time (say 16:30)
on_time = (created as datetime, resolved as datetime, open as time, close as time) =>
[
// days of week correction to get next working day
corr_open = {1, 1, 1, 1, 3, 2, 1},
gen = List.Generate(
() =>
[start =
if Time.From(created) >= close
or Date.DayOfWeek(created, Day.Monday) > 4
then Date.From(Date.AddDays(created, corr_open{Date.DayOfWeek(created, Day.Monday)})) & open
else if Time.From(created) < open
then Date.From(created) & open
else created,
end = List.Min({resolved, Date.From(start) & close})],
(x) => x[start] <= resolved,
(x) =>
[start = Date.From(Date.AddDays(x[end], corr_open{Date.DayOfWeek(x[end], Day.Monday)})) & open,
end = List.Min({resolved, Date.From(start) & close})],
(x) => x[end] - x[start]
),
out = Duration.TotalHours(List.Sum(gen))][out],
// here we add column with total hours
total_hours = Table.AddColumn(
tbl,
"Turn Around Time",
(x) => on_time(x[created], x[resolved], #time(8, 0, 0), #time(16, 30, 0)))
in
total_hours