SSRS 仅计算工作日

问题描述 投票:0回答:3

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

1-两个参数日期从 ,日期到

2-由用户手动输入的团队参数数量,以便稍后在某些计算中使用

需求

根据过滤的时间段(起始日期和截止日期)仅计算工作日(每周 6 天),不含周五

代码

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

注意

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

提前致谢

sql reporting-services ssrs-2012 reportbuilder3.0
3个回答
2
投票

试试这个:

=(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)
))

它将在给定范围内返回周一到周五的计数,在上述情况下,它返回 3。对于 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

我很奇怪看到周六和周日是工作日而不是周五。

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


0
投票

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


0
投票

尝试下面的表达。我已经测试了按月计算一个月的工作日,其中排除了日历日中的周六和周日:

DateDiff("d",参数!StartDate.Value,参数!EndDate.Value)) - 圆形的( (((日期差异 (日期间隔.日, DateAdd(DateInterval.Day,7-WeekDay(参数!StartDate.Value),参数!StartDate.Value), DateAdd(DateInterval.Day,7-WeekDay(参数!EndDate.Value),DateAdd("d",-1,Parameters!EndDate.Value).AddDays(1)) + 1)/ 7)*2 ) + iif(工作日(参数!EndDate.Value)=7,1,0) + iif(工作日(参数!StartDate.Value)=1,1,0) -1 , 0 )

© www.soinside.com 2019 - 2024. All rights reserved.