Forum Discussion
wahidfajar
Oct 12, 2023Copper Contributor
Calculate workhours based on weekdays on range
Hi! I have some problems calculating actual work hours for my employees based on our company regulations. Here is sample data that we need to calculate (attachment). I have been trying to cal...
- Oct 12, 2023
This is similar to a recent request for 'down time' hours. The idea is to create an array from start to finish for a given row with SEQUENCE incrementing by 1 minute. Then it becomes a matter of filtering.
ActualWorkHours(start,finish) =LET( one_minute, 0.000694444444444444, minutes_in_a_day, 1440, WorkHours, LAMBDA(start, finish, LET( minutes, (finish - start) * minutes_in_a_day, time_arr, SEQUENCE(minutes, , start, one_minute), hr_mm, time_arr - INT(time_arr), day_of_week, WEEKDAY(time_arr, 2), total, COUNT( FILTER( time_arr, (day_of_week = 6) * (hr_mm >= 8 / 24) * (hr_mm <= 14 / 24) + (day_of_week <= 5) * (hr_mm >= 8 / 24) * (hr_mm <= 16 / 24), "" ) ) / 60, IF(COUNT(start, finish) = 2, total, "") ) ), MAP(start, finish, WorkHours) )
Patrick2788
Oct 12, 2023Silver Contributor
This is similar to a recent request for 'down time' hours. The idea is to create an array from start to finish for a given row with SEQUENCE incrementing by 1 minute. Then it becomes a matter of filtering.
ActualWorkHours(start,finish)
=LET(
one_minute, 0.000694444444444444,
minutes_in_a_day, 1440,
WorkHours, LAMBDA(start, finish,
LET(
minutes, (finish - start) * minutes_in_a_day,
time_arr, SEQUENCE(minutes, , start, one_minute),
hr_mm, time_arr - INT(time_arr),
day_of_week, WEEKDAY(time_arr, 2),
total, COUNT(
FILTER(
time_arr,
(day_of_week = 6) * (hr_mm >= 8 / 24) * (hr_mm <= 14 / 24) +
(day_of_week <= 5) * (hr_mm >= 8 / 24) * (hr_mm <= 16 / 24),
""
)
) / 60,
IF(COUNT(start, finish) = 2, total, "")
)
),
MAP(start, finish, WorkHours)
)
- wahidfajarOct 13, 2023Copper ContributorThank you, it works sir. It's dynamic too, that's cool. I really appreciate it!
- Patrick2788Oct 13, 2023Silver ContributorYou're welcome!