SSRS 只计算工作日
SSRS count working days only
我需要一些帮助,我的 案例 是
1-两个参数 date from , date to
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)
))
在上述情况下,它会返回给定范围内周一到周五的计数 returns 3. 对于 StartDate = 2016-02-14 和 EndDate = 2016-02-21,它 returns 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
我很奇怪看到周六和周日而不是周五作为工作日。
如果这对你有帮助,请告诉我。
从长远来看,此类问题最可持续的解决方案是创建一个“date dimension”又名 "calendar table"。这样一来,任何不符合某些简洁数学模式的日期分类怪癖都可以得到解决。如果您的政府决定从明年开始宣布日期 X 为 public 假期,只需将其添加到您的 public 假期列(属性)。如果您想按 "work days, weekends, and public holidays" 分组,无需重新发明轮子,只需将该分类添加到日历 table,每个人都可以从中受益,您无需担心 calculation/classification。您可能需要该月的第一个或最后一个工作日。很简单,按日历 table 中的那一列过滤。
我需要一些帮助,我的 案例 是
1-两个参数 date from , date to
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)
))
在上述情况下,它会返回给定范围内周一到周五的计数 returns 3. 对于 StartDate = 2016-02-14 和 EndDate = 2016-02-21,它 returns 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
我很奇怪看到周六和周日而不是周五作为工作日。
如果这对你有帮助,请告诉我。
从长远来看,此类问题最可持续的解决方案是创建一个“date dimension”又名 "calendar table"。这样一来,任何不符合某些简洁数学模式的日期分类怪癖都可以得到解决。如果您的政府决定从明年开始宣布日期 X 为 public 假期,只需将其添加到您的 public 假期列(属性)。如果您想按 "work days, weekends, and public holidays" 分组,无需重新发明轮子,只需将该分类添加到日历 table,每个人都可以从中受益,您无需担心 calculation/classification。您可能需要该月的第一个或最后一个工作日。很简单,按日历 table 中的那一列过滤。