我正在尝试将以下Excel公式转换为SSRS,但环顾四周我似乎无法找到解决方案。我可以计算两个日期之间的工作日数,但我想要做的是添加一个工作日来约会。基本上我没有第二次约会。 我想这将是DATEADD函数的一部分吗?
=WORKDAY($A1,B$1)
希望有人可以提供帮助 非常感谢
答案 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)
这不包括假期 - 在这个阶段我不会太烦恼,那是一个下雨天! :)