处理报告以确定员工利用率(利用率定义为给定报告期间的可计费小时数与非可计费小时数。)
问题是我需要从我的等式中排除假期。虽然已经写了许多关于识别假期的文章,但我需要一些额外的帮助。
我无法访问后端MS。 SQL数据库为了创建假日表,所以我需要在报表中过滤日期。
我需要排除的假期是
新年(1月1日)
阵亡将士纪念日(5月的最后一个星期一)
独立日(7月4日)
劳动节(9月的第一个星期一)
感恩节(11月的第四个星期四)
平安夜(12月24日)半天
圣诞节(12月25日)
新年前夜(12月31日)
以下是我需要遵循的规则:
周六将在周六观看周六公认的假期。
将在下周一观察周日即将到来的假期。
目前我通过计算总可用分钟(每个工作日= 480分钟)来处理报告,因此对于正常假期,我需要将其从工作总时数和可用总时数中删除。对于半天假期,我需要从总可用时间中移除240分钟,并丢弃240以上的任何工作时间。 我希望这是有道理的。
答案 0 :(得分:2)
使用以下文本创建名为'Observance'的自定义函数:
//Correct date to match business rules
Function (Datevar value)
Select DayOfWeek(value)
//Sunday; add a day
Case 1: Date(DateAdd("d", 1, value))
//Saturday
Case 7: Date(DateAdd("d", -1, value))
//no change
Default: value
;
使用以下文本创建名为“FullHolidays”的自定义函数:
//create a list of full-day holidays, calculated dynamically
Function (Numbervar yyyy)
Datevar Array holidays;
Datevar holiday;
//New Year's day
holiday:=Date(yyyy, 1, 1);
Redim Preserve holidays[Ubound(holidays)+1];
holidays[Ubound(holidays)]:=Observance(holiday);
//Memorial Day (last Monday in May)
//TODO
//Independence day
holiday:=Date(yyyy, 7, 4);
Redim Preserve holidays[Ubound(holidays)+1];
holidays[Ubound(holidays)]:=Observance(holiday);
//Labor Day (first Monday in September)
//TODO
//Thanksgiving (fourth Thursday in November)
//TODO
//xmas day
holiday:=Date(yyyy, 12, 25);
Redim Preserve holidays[Ubound(holidays)+1];
holidays[Ubound(holidays)]:=Observance(holiday);
holidays;
使用以下文本创建名为“HalfHolidays”的自定义函数:
//create a list of half-day holidays, calculated dynamically
Function (Numbervar yyyy)
Datevar Array holidays;
Datevar holiday;
//xmas eve
holiday:=Date(yyyy, 12, 24);
Redim Preserve holidays[Ubound(holidays)+1];
holidays[Ubound(holidays)]:=Observance(holiday);
//new year's eve
holiday:=Date(yyyy, 12, 31);
Redim Preserve holidays[Ubound(holidays)+1];
holidays[Ubound(holidays)]:=Observance(holiday);
holidays;
在如下公式中使用:
If {Table.DateField} IN FullHolidays(Year({Table.DateField})) Then
0
Else If {Table.DateField} IN HalfHolidays(Year({Table.DateField})) Then
240
Else
480
我会把感恩节(和其他这样的假期)计算留在你干练的手中(我太忙于看着House)。