Как написать выражение для отображения ТОЛЬКО рабочих дней в течение 5 дней

Я работаю над отчетом в Microsoft SQL Server Report Builder и пытаюсь написать выражение, которое будет отображать только следующие 5 рабочих дней с сегодняшнего дня (т. Е. Таблица имеет 5 столбцов, и она начинается с сегодняшнего дня и продолжается в течение следующих пяти рабочих дней). дней). Если днем ​​является суббота или воскресенье, то при использовании моего значения перечисления будет возвращаться 6 или 7 с использованием Weekday функции, вы бы пропустить на следующий рабочий день. В настоящее время у меня есть это выражение для первого столбца после столбца с сегодняшней датой

IIf(Weekday(DateAdd("d",1,Today()),2)=6,DateAdd("d",3,Today()),
(IIf(Weekday(DateAdd("d",1,Today()),2)=7,DateAdd("d",2,Today()),
DateAdd("d",1,Today()))))

и это не работает. Я полагаю, что это потому, что если у нас есть такой день, как среда, четверг или пятница, недостаточно дней пропускаются на выходные дни.

2 ответа

Решение

Если мы можем предположить, что вы собираетесь начать с рабочего дня, то есть простая формула, которую мы можем использовать:

=IIF(6 - WeekDay(Today()) - X < 0, DateAdd("d", X + 2, Today()), DateAdd("d", X, Today()))

где X количество дней в столбце с даты начала.

К сожалению, он выходит из строя, если начальная дата - суббота или воскресенье, но если вам это нужно только в рабочие дни, тогда вам пора.

Я думаю, что вы должны использовать предыдущее значение столбца вместо использования Today() Так что в первом столбце это будет текущая дата. (Примените ту же формулу, если она может начинаться с выходных дней). Я думаю, что случай переключения легче в этом состоянии.

Формула для столбца текущего дня

=switch (
Weekday(today) = 6, dateadd("d", 2, today),
Weekday(today) = 7, dateadd("d", 1, today),
Weekday(today) < 6, today
)

Во втором столбце вместо today() используйте "Fields! Previous_column_name.Value".

=switch (
Weekday(dateadd("d", 1, Fields!previous_column_name.Value)) = 6, dateadd("d", 3, Fields!previous_column_name.Value),
Weekday(dateadd("d", 1, Fields!previous_column_name.Value)) = 7, dateadd("d", 2, Fields!previous_column_name.Value),
Weekday(dateadd("d", 1, Fields!previous_column_name.Value)) < 6, dateadd("d", 1, Fields!previous_column_name.Value)
)

В третьем столбце используйте второй столбец как previous_column.

Надеюсь, что это поможет вам.

Другие вопросы по тегам