簡體   English   中英

SSRS。 工作日功能

[英]SSRS. Workday Function

我正在嘗試將下面的 Excel 公式轉換為 SSRS,但環顧四周我似乎找不到解決方案。 我可以計算兩個日期之間的工作日數,但我想做的是將工作日數添加到一個日期。 基本上我沒有第二次約會。 我想這可能與 DATEADD 函數類似?

=WORKDAY($A1,B$1)

希望有人能幫忙 非常感謝

這是一個將 X 個工作日添加到日期的 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的問題。

將其鍵入文本框的表達式中。 (來自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)

好的,經過多方堅持,我設法在 TSQL 和 SSRS 中得到了我想要的東西。 我的目標是衡量代理人的工作效率,所以我不想計算周末,這不公平。 如果約會在周末,那么我希望它跳到星期一。 同樣,如果將天數加到某個日期上會在未來的一個周末過去,那么我需要增加的日期來反映這一點。 對於最終用戶(在 SSRS 中),我想要一個領先優勢(如倒三角形),這樣如果日期 + 工作日數在未來然后設置為 NULL,顯示零看起來就像沒有生產力,這是不正確的。

第一個 TSQL - 我的基本查詢從以下 SO 線程開始,但是在嘗試了日期落在星期六或星期日時發現的許多選項之后,該解決方案對我不起作用(由於權限原因,我無法創建函數)。 但是調整下面的內容讓我到了那里,我專門處理了星期天

在沒有循環的 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 - 這里的 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)

這不包括假期——我在這個階段並不太在意,那是為了未雨綢繆::)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM