SSRS仅计算工作日

时间:2016-02-17 06:55:41

标签: sql reporting-services ssrs-2012 reportbuilder3.0

我需要一些帮助,我的案例

1 - 2个参数的日期从日期到

由用户手动输入以供稍后在某些计算中使用的2个团队参数数

rquirement

根据过滤时间(日期和日期)计算没有星期五的工作日(每周6天)

代码

=(COUNT(IIF(Fields!Job_Status.Value="Closed",1,Nothing))) / 
((DateDiff(DateInterval.day,Parameters!DateFrom.Value,Parameters!ToDate.Value
)) * (Parameters!Number_of_teams.Value)) 

注意

此代码工作正常,但它计算所有天数

提前致谢

2 个答案:

答案 0 :(得分:1)

试试这个:

=(DATEDIFF(DateInterval.Day, CDATE("2016-02-14"), CDATE("2016-02-17")) + 1)
-(DATEDIFF(DateInterval.WeekOfYear, CDATE("2016-02-14"), CDATE("2016-02-17")) * 2)
-(IIF(WeekdayName(DatePart(DateInterval.Weekday,CDATE("2016-02-14"),FirstDayOfWeek.System))="sunday",1,0)
-(IIF(WeekdayName(DatePart(DateInterval.Weekday,CDATE("2016-02-17"),FirstDayOfWeek.System))="saturday",1,0)
))

在上述情况下,它将返回给定范围之间的星期一到星期五的计数。对于StartDate = 2016-02-14和EndDate = 2016-02-21,它返回5.

更新:表达式,以排除计数周五。

=(DATEDIFF(DateInterval.Day, Parameters!DateFrom.Value, Parameters!ToDate.Value) + 1)
-(DATEDIFF(DateInterval.WeekOfYear, Parameters!DateFrom.Value, Parameters!ToDate.Value) * 1)
-(IIF(WeekdayName(DatePart(DateInterval.Weekday,Parameters!ToDate.Value,FirstDayOfWeek.System))="friday",1,0))

经过测试:

 DateFrom     ToDate     Result
2016-02-12  2016-02-19     6
2016-02-12  2016-02-18     6
2016-02-12  2016-02-15     3

我觉得星期六和星期天是工作日而不是星期五,这很奇怪。

如果这有助于您,请告诉我。

答案 1 :(得分:0)

从长远来看,针对此类问题的最可持续解决方案是创建“date dimension”又名“日历表”。这样,可以适应不符合某种简洁数学模式的日期分类中的任何怪癖。如果您的政府决定从明年开始将公共假日宣布为公共假期,只需将其添加到您的公共假期列(属性)。如果你想分组说“工作日,周末和公众假期”,不需要重新发明轮子,只需将该分类添加到日历表中,每个人都可以从中受益,而且您不必担心不一致计算/分类。您可能想要该月的第一个或最后一个工作日。很容易,按日历表中的该列进行过滤。