SSRS。 工作日函数

我试图将下面的Excel公式转换为SSRS,但环顾四周,我似乎无法find一个解决scheme。 我可以计算两个date之间的工作天数,但我想要做的是添加一个工作日到一个date。 基本上我没有第二次约会。 我想这将是沿DATEADD函数的东西?

=WORKDAY($A1,B$1) 

希望有人能帮助很多谢谢

这是一个tsql解决scheme,将X Business Days添加到date。

 declare @calendar as table (theDate date, dayOfWeek varchar (10)); declare @startDate as date = '20170704'; declare @businessDaysToAdd as integer = 10; insert into @calendar select theDate , datename(dw, theDate) dow from dbo.dateTable('20170701', '20170720') ; with temp as ( select theDate , dayOfWeek , rank() over (order by theDate) theRank from @calendar where theDate > @startDate and dayOfWeek not in ('Saturday', 'Sunday') ) select * from temp where theRank = @businessDaysToAdd; 

笔记

dbo.DateTable是一个表值函数,恰好存在于我正在使用的数据库中。 在现实生活中,你可能有一个实际的某种日历表。

这个例子不包括节假日。

这只是发布问题的答案的开始。 它只解决了Essentially I don't have the 2nd date

将其input到文本框的expression式中。 (从SSRS 2008 Datediff的工作日 )

 =(DateDiff(DateInterval.day,Parameters!STARTDATE.Value,Parameters!ENDDATE.Value)+1) -(DateDiff(DateInterval.WeekOfYear,Parameters!STARTDATE.Value,Parameters!ENDDATE.Value)*2) -(iif(Weekday(Parameters!STARTDATE.Value) = 7,1,0) -(iif(Weekday(Parameters!ENDDATE.Value) = 6,1,0))-1) 

好了经过很多的毅力,我设法得到了我想要的TSQL和SSRS。 我的目标是衡量代理人的生产力,所以我不想数周末,这是不公平的。 如果一个周末的时间到了,那么我想让它跳到星期一。 同样,如果将某天的date添加到未来的某个周末,那么我需要递增的date来反映这一点。 对于最终用户(在SSRS),我想要一个领先的优势(像一个颠倒的三angular形),所以如果date+数字工作日在未来,然后设置为NULL,显示零将看起来没有生产力是不正确的。

第一个TSQL – 我的基本查询从下面的SO线程开始,但是在尝试了许多选项时,我发现当date在星期六或星期天下落时,解决scheme对我无效(由于权限,我无法创build函数)。 然而,调整下面让我在那里,我专门处理星期天

在SQL中添加没有循环的工作日

 SELECT ,DATEADD(WEEKDAY, (/*Your Working Days*//5)*7+(/*Your Working Days*/ % 5) + (CASE WHEN DATEPART(WEEKDAY,/*Your Date*/) <>7 AND DATEPART(WEEKDAY,/*Your Date*/) + (/*Your Working Days*/ % 5) >5 THEN 2 WHEN DATEPART(WEEKDAY,/*Your Date*/) = 7 AND DATEPART(WEEKDAY,/*Your Date*/) + (/*Your Working Days*/ % 5) >5 THEN 1 ELSE 0 END), /*Your Date*/) AS [IncrementedDate] FROM /*YourTable*/ 

然后对于SSRS – 这里的两个关键点是,如果源数是一个整数,则TSQL将被划分为一个整数,所以这需要在SSRS中处理;其次,需要将第一周的星期几设置为星期一作为expression式的一部分。 我把这个expression式放入一个matrix中,创builddate是我的行组,联系工作日是我的列组。

 =DATEADD("W",(INT(ReportItems!ContactWorkingDays.Value/5))*7+(ReportItems!ContactWorkingDays.Value MOD 5) + IIF(DATEPART("W",ReportItems!DateCreated.Value,FirstDayOfWeek.Monday) <> 7 AND (DATEPART("W",ReportItems!DateCreated.Value,FirstDayOfWeek.Monday) + (ReportItems!ContactWorkingDays.Value MOD 5) >5),2,IIF(DATEPART("W",ReportItems!DateCreated.Value,FirstDayOfWeek.Monday) = 7 AND (DATEPART("W",ReportItems!DateCreated.Value,FirstDayOfWeek.Monday) + (ReportItems!ContactWorkingDays.Value MOD 5) >5),1,0)),ReportItems!DateCreated.Value) 

这不包括假期 – 在这个阶段,我不是太困扰,那是一个下雨天! 🙂