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

Calculating working days between 2 dates in 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)

代码没问题。问题是您的计算机在区域和语言设置中使用的可能与编写代码的计算机(或我的计算机)不同。

要进行测试,请将文本框设置为 =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 作为周末。

解决方案

在我的例子中,我必须引入 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)