在SSRS 2016中计算两个日期之间的工作日

时间:2019-05-29 15:23:22

标签: reporting-services ssrs-2016

我正在使用下面的代码,该代码位于本网站上。它以某种方式起作用,但是当FromDate在星期五降落时,因为它又增加了另一天,所以无法正常工作。

请参见屏幕截图以进行演示。
代码本身有什么问题?

= (DateDiff(DateInterval.day,Fields!FromDate.Value,Fields!UntilDate.Value)+1)
- (DateDiff(DateInterval.WeekOfYear,Fields!FromDate.Value,Fields!UntilDate.Value)*2)
- IIF(Weekday(Fields!FromDate.Value,1) = 1,1,0)
- IIF(Weekday(Fields!FromDate.Value,1) = 7,1,0)
- IIF(Weekday(Fields!UntilDate.Value,1) = 1,1,0)
- IIF(Weekday(Fields!UntilDate.Value,1) = 7,1,0)

enter image description here

2 个答案:

答案 0 :(得分:1)

代码正常。问题在于,您的计算机在“地区”和“语言”设置中使用的一周的第一天可能不同于在其(或我的)代码上创建的计算机。

enter image description here

要进行测试,请将文本框设置为=WEEKDAY(TODAY)。使用此代码的计算机的星期日为1,今天(星期三)为 4 。我的猜测是您得到3。

如果一周的第一天是星期一,则需要将工作日更改为6和7,而不是当前使用的1和7。

= (DateDiff(DateInterval.day,Parameters!START.Value,Parameters!END.Value)+1)
- (DateDiff(DateInterval.WeekOfYear,Parameters!START.Value,Parameters!END.Value)*2)
- IIF(Weekday(Parameters!START.Value,1) = 6,1,0)
- IIF(Weekday(Parameters!START.Value,1) = 7,1,0)
- IIF(Weekday(Parameters!END.Value,1) = 6,1,0)
- IIF(Weekday(Parameters!END.Value,1) = 7,1,0)

如果是星期六,则需要在周末使用1和2。

答案 1 :(得分:0)

解决方案

在我的情况下,我必须引入CDate(format(Fields!FromDate.Value,"MM-dd-yyyy"))才能正确计算天数

I had to use the CDATE() in the code:
=(DateDiff(DateInterval.day,CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")), 
CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")))+1)
-(DateDiff(DateInterval.WeekOfYear,CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")), 
CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")))*2) 
- IIF(Weekday( CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")),1) = 1,1,0)
- IIF(Weekday( CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")),1) = 7,1,0)
- IIF(Weekday( CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")),1) = 1,1,0)
- IIF(Weekday( CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")),1) = 7,1,0)