Как сделать так, чтобы подписки на SSRS начинались в рабочий день 3 месяца

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

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

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

Пока это то, что у меня есть, и я чувствую, что это можно обобщить в другом более простом выражении sql? Думаю, более оптимизированный.

select distinct --(CASE --when day_of_week = (2,3,4,5,6) then dateadd(day,1,day_desc_01) --when day_of_week = (7) then dateadd(day,2,day_desc_01) else day_of_week end) as 'BD_Date' day_of_week , day_desc_01 , date from Company.dbo.Company_Calendar where year = 2023 and day_of_week not in (1,7) and date <> '1900-01-01' and day_weekday_ct = 1 and year = 2023

Я просто хочу, чтобы он возвращал 3-й рабочий день месяца для каждого месяца. Затем, вероятно, заявление, в котором говорится, что если это 3-й рабочий день, сбросить отчет, если нет, ничего не делать. Я надеюсь, что это имеет немного смысла? Я также мог быть далеко от пути в этом и слишком далеко от моей головы.

Спасибо за ваше время и помощь!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это общий пример, но вы сможете применить логику к таблице календаря вашей компании.

Этот запрос просто даст вам все 3 рабочих дня в месяце. Он отфильтровывает выходные и праздничные дни (при условии, что вы каким-то образом записываете праздничные дни в свою таблицу). После применения фильтров if просто присваивает номер строки каждой записи в каждом календарном году/месяце и возвращает только те, где он равен 3.

Для ясности добавлено несколько дополнительных столбцов.

Вы можете упростить это, но я этого не делаю; знать, что содержит ваша таблица календаря, поэтому предполагается, что в ней есть только дата (TheDate) и столбец для обозначения PublicHoliday.

CREATE VIEW ThirdBusDay AS
SELECT 
    * 
    FROM (
        SELECT 
              TheDate
            , DayOfWeek = DATEPART(WeekDay, TheDate)
            , TheYear = YEAR(TheDate)
            , TheMonth = MONTH(TheDate)
            , TheDay = DAY(TheDate)
            , WorkingDayOfMonth = ROW_NUMBER() OVER(PARTITION BY YEAR(TheDate), MONTH(TheDate) ORDER BY TheDate)
        FROM myCalendarTable
        WHERE 
            DATEPART(WeekDay, TheDate) NOT IN (7,1) -- Filter out Saturday and Sunday, change this if system week start is not Sunday.
            AND 
            PublicHoliday = 0 -- filter out public holidays etc..
        ) d 
    WHERE WorkingDayOfMonth = 3

Итак, если CAST(GetDate() AS Date) существует в этом представлении, вы знаете, что вам нужно выполнить отчет.

Потрясающе спасибо! Если я могу дать вам имена столбцов и их назначение, это поможет?

ziggy2561 31.10.2022 17:36

Столбец - Формат Дата - формат гггг-мм-дд Day_of_week - количество дней в неделе 1 - 7 день месяца - общее количество дней в месяце день квартала - количество дней в квартале день года день desc 01 - мм/дд/гггг 02 - дд-МММ-ГГГГ 03 - гггг.мм.дд 04 - 16 июля 2036 г. (месяц, день, год) день недели desc 01 - вс, пн, вт и т. д. 02 - дни с полным написанием по буквам day_weekday_ct - если это будний день, отметьте 1. если не отметьте 0. Их больше, но они делятся на кварталы, даты окончания года и тому подобное. В праздники тоже не уверен. Это была еще одна вещь, о которой я тоже думал.

ziggy2561 31.10.2022 17:44

Помимо праздничных дней, моему решению действительно требовался только один столбец в вашей таблице календаря. В моем примере это называется TheDate. Этот столбец ДОЛЖЕН быть столбцом Date. Если это varchar или что-то подобное, это не сработает. Его должно быть легко адаптировать к вашему календарю.

Alan Schofield 31.10.2022 17:57

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