2014-02-11 3 views
7

Я видел этот вопрос задавал много, и я не могу найти один четкий ответ оSSRS 2008 DATEDIFF для рабочих дней

«как рассчитать рабочие дни только между двумя датами?»

Выражение ниже даст мне общие дни, но я хочу исключить субботу и воскресенье.

=DateDiff("d",Parameters!STARTDATE.Value,Parameters!ENDDATE.Value) 

Я был бы признателен за конкретную помощь в том, как это сделать.

Заранее спасибо.

+0

возможно дубликат [расчет рабочих дней] (http://stackoverflow.com/questions/7444846/business-days-calculation) –

+0

Если я использую запрос в другой должности, где я делаю этот запрос в SSRS? и как я могу ссылаться на него в текстовом поле? – Lance

+0

Лучше всего было бы создать функцию, я должен подумать. Это другой вопрос, как рассчитать рабочие дни. Должен признаться, я предположил, что DateDiff является стандартной функцией sql? –

ответ

3

SQL в ссылке (Number of working days between two dates) для SSRS: Надеюсь, это даст вам хорошее место для начала. Введите это в выражение для текстового поля.

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

Ты гений ... спасибо – Lance

5

Этот код не совсем точный. Год может начинаться или заканчиваться либо субботой, либо воскресенью. Например, 2011 начинается в субботу и заканчивается в субботу. 1 января & 2nd, 2011 - суббота и воскресенье соответственно, а 31 декабря 2011 года также суббота. Вышеприведенный код не учитывает этот сценарий. Приведенный ниже код является правильным:

= (DateDiff(DateInterval.day,Parameters!BeginDate.Value,Parameters!EndDate.Value)+1) 
- (DateDiff(DateInterval.WeekOfYear,Parameters!BeginDate.Value,Parameters!EndDate.Value)*2) 
- IIF(Weekday(Parameters!BeginDate.Value,1) = 1,1,0) 
- IIF(Weekday(Parameters!BeginDate.Value,1) = 7,1,0) 
- IIF(Weekday(Parameters!EndDate.Value,1) = 1,1,0) 
- IIF(Weekday(Parameters!EndDate.Value,1) = 7,1,0) 
Смежные вопросы