我需要一些帮助,我的案例是
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))
注意
此代码工作正常,但它会计算所有天
提前致谢
试试这个:
=(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
我很奇怪看到周六和周日是工作日而不是周五。
如果这对您有帮助,请告诉我。
从长远来看,此类问题最可持续的解决方案是创建一个“日期维度”,又名“日历表”。这样,日期分类中任何不符合某种简洁数学模式的怪癖都可以得到满足。如果您的政府决定从明年开始宣布日期 X 为公共假期,只需将其添加到您的公共假期列(属性)即可。如果您想按“工作日、周末和公共假期”进行分组,则无需重新发明轮子,只需将该分类添加到日历表中,每个人都可以从中受益,并且您无需担心不一致计算/分类。您可能需要该月的第一个或最后一个工作日。很简单,按日历表中的该列进行过滤。
尝试下面的表达。我已经测试了按月计算一个月的工作日,其中排除了日历日中的周六和周日:
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 )