SSRS автоматически создает отчеты из списка
У нас есть отдельный список партийных ключей (примерно 20000), и каждую неделю мы создаем отчеты только для определенных партийных ключей, для которых есть обновления. Эти партийные ключи хранятся в списке периодических проверок.
Список периодических проверок = ключи партии, которые обновлены
Так, например, 1-я неделя 180 партийных ключей 2-я неделя 300 партийных ключей 3-я неделя 30 партийных ключей в списке периодического просмотра.
Итак, сейчас у меня есть отчет SSRS, в котором есть параметр с именем Party key, и, вручную введя ключ Party, он сгенерирует отчет.
но я хочу автоматизировать процесс и хотел бы автоматически генерировать отчеты для определенных партийных ключей, которые имеют обновления и хранятся в общей папке в формате PDF.
если на этой неделе у них есть 40 ключей сторон в списке проверки, я хочу создать 40 отчетов SSRS для этих ключей.
Microsoft Visual Studio Enterprise 2015 Версия 14.0.25420.01 Обновление 3 Microsoft .NET Framework Версия 4.7.02053
Инструменты данных SQL Server 14.0.61021.0 Инструменты данных Microsoft SQL Server
Службы отчетов SQL Server 13.0.1701.8 Конструкторы служб отчетов Microsoft SQL Server Версия 13.0.1701.8
1 ответ
Если у вас есть доступ к базе данных отчетов, вы можете легко обновить параметр подписки на новый ключ из вашего списка и запустить задание, которое отправляет эту подписку. По сути, у вас может быть какое-то задание, которое берет последний обработанный ключ, находит все новые ключи, обновляет подписку, запускает задание подписки для каждого нового ключа.
Вот мой запрос, где вы можете найти ссылку между подпиской и именем работы:
SELECT
s.subscriptionid,
ISNULL(c_p.Name, c.Name) AS Report,
msdb.dbo.sysjobs.name AS SQLAgentName,
CASE WHEN c.Type = 4 THEN c.Name + ' [' + s.Description + ']' ELSE s.Description end AS Description,
MAX(s.LastRunTime) AS LastRun, s.LastStatus,
s.DeliveryExtension, c.Description AS HowOften, msdb.dbo.sysjobs.job_id, msdb.dbo.sysjobs.enabled
FROM dbo.Catalog AS c
LEFT JOIN dbo.Catalog AS c_p
ON c_p.ItemID = c.LinkSourceID AND c.Type = 4
INNER JOIN dbo.Subscriptions AS s
ON s.Report_OID = c.ItemID
INNER JOIN dbo.ReportSchedule
ON c.ItemID = dbo.ReportSchedule.ReportID
AND s.SubscriptionID = dbo.ReportSchedule.SubscriptionID
INNER JOIN msdb.dbo.sysjobs
ON CAST(dbo.ReportSchedule.ScheduleID AS varchar(100))
= CAST(msdb.dbo.sysjobs.name AS varchar(100))
where msdb.dbo.sysjobs.enabled = 1
GROUP BY s.subscriptionid, c_p.Name, c.type, c.Name, msdb.dbo.sysjobs.name, s.Description, s.LastStatus, s.DeliveryExtension, c.Description, msdb.dbo.sysjobs.job_id, msdb.dbo.sysjobs.enabled
Изменить параметры dbo.Subscription и вызвать exec msdb.dbo.sp_start_job @job_name = @JobName;
чтобы завершить вашу задачу.