SSRS。工作日功能

时间:2017-07-28 14:04:06

标签: sql excel reporting-services

我正在尝试将以下Excel公式转换为SSRS,但环顾四周我似乎无法找到解决方案。我可以计算两个日期之间的工作日数,但我想要做的是添加一个工作日来约会。基本上我没有第二次约会。 我想这将是DATEADD函数的一部分吗?

=WORKDAY($A1,B$1)

希望有人可以提供帮助 非常感谢

3 个答案:

答案 0 :(得分:1)

这是一个将X Business Days添加到日期的tsql解决方案。

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

的问题

答案 1 :(得分:0)

将其输入到文本框的表达式中。 (来自SSRS 2008 Datediff for Working Days

=(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)

答案 2 :(得分:0)

好好坚持不懈后,我设法在TSQL和SSRS中获得了我想要的东西。我的目标是衡量代理人的生产力,所以我不想算周末,这是不公平的。如果一个周末的日期下降,我希望它跳到星期一。同样,如果将日期的天数添加到将来的某个周末,那么我需要增加的日期来反映这一点。对于最终用户(在SSRS中),我想要一个前沿(像一个颠倒的三角形),这样如果日期+数字工作日在未来然后设置为NULL,显示零将看起来没有生产力是不正确的。

第一个TSQL - 我的基本查询是从以下SO线程开始的,但在尝试了许多选项后,我发现当日期在星期六或星期日,解决方案对我不起作用(我无法创建函数,因为权限)。然而,调整下面的内容让我在那里,我专门针对星期天

Add business days to date in SQL without loops

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中处理,其次你需要将第一周的一天设置为星期一作为表达方式。 我将这个表达式放入一个矩阵,其中创建日期为我的行组,联系工作日为我的列组。

=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)

这不包括假期 - 在这个阶段我不会太烦恼,那是一个下雨天! :)