Как написать выражение для отображения ТОЛЬКО рабочих дней в течение 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.
Надеюсь, что это поможет вам.