2017-07-28 60 views
0

我試圖將下面的Excel公式轉換爲SSRS,但環顧四周,我似乎無法找到解決方案。我可以計算兩個日期之間的工作天數,但是我想要做的是在某個日期添加多個工作日。基本上我沒有第二次約會。 我想這將是沿着DATEADD函數的東西?SSRS。工作日函數

=WORKDAY($A1,B$1) 

希望有人能幫助 非常感謝

回答

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 - 這裏的2個關鍵點是,如果原來的數是整數,所以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) 

這不包括假期 - 我不太在意這個階段的困擾,那是一個下雨天! :)

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) 
+0

不幸的是,這不是我所追求的。這將計算兩個日期之間的工作天數。我正在嘗試將工作日添加到日期以獲得第二次約會。希望有道理 – Baseline9

1

這裏是一個TSQL解決X工作日增加的日期。

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的問題。

+0

布里爾謝謝。我們有一個日曆表,字段「theDate」正是我所需要的。我現在需要弄清楚如何在我的數據表和businessdaystoadd中輸入開始日期,該開始日期是我的數據表中的申請日期。你知道在SSRS中調用這段代碼並傳入這些值的方法,我嘗試了一個新的數據集和函數,但是無法使其工作。請注意我們的環境不允許我們通過SQL管理工作室創建函數和表,因此我試圖在SSRS中構建。 – Baseline9

+0

好吧,做更多的挖掘我不認爲我可以通過SQL /數據這樣。我試圖創建一個分析來監控客戶聯繫速度的成功。這測量了應用程序和我們與客戶交談之間的工作天數。我已經在Excel中完成了這項工作,所以申請日期在左邊,在頂部的工作日數量。我現在想要做的是創建一個領先優勢,以便應用程序日期+天> =今天爲空。我認爲在SSRS中這樣做的唯一方法是將申請日期的工作日添加爲ReportItems!希望這是有道理的,這很難解釋! :) – Baseline9

+0

我沒有SSRS的專業知識。儘管如此,可以使SQL代碼成爲您從SSRS調用的函數或存儲過程。 –