Создайте несколько отчетов SSRS, если есть новое обновление в базе - PullRequest
0 голосов
/ 11 июня 2018

мы создаем отчеты SSRS и имеем 1 параметр для идентификатора. При вводе идентификатора вручную будет создан отчет SSRS.

Требование: если в базе данных есть какой-либо новый идентификатор или любое обновление в базе данных,мы хотим создать отчет SSRS для этого конкретного идентификатора.

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

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

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

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

Или прокрутите каждый идентификатор, отрегулируйте критерии в метаданных подписки в базе данных reportServer, а затем выполните задание агента SQL, которое подписка создает для создания нового отчета с новым идентификатором.

0 голосов
/ 11 июня 2018

Вы можете создать триггер или процедуру, которая усекает и вводит изменения в таблицу «изменений», запуская ее по желаемому расписанию.

Создайте управляемую данными подписку, которая читает из этой таблицы «изменений».

После оператора вставки выполните сценарий ReportCommand, который запустит отчет.

SELECT  DISTINCT b.job_id,
'EXEC ReportServer.dbo.AddEvent @EventType=''TimedSubscription'', @EventData='''
    + CAST(a.SubscriptionID AS VARCHAR(40)) + '''' AS ReportCommand ,
    e.Name,
    b.name AS JobName ,
    a.SubscriptionID ,
    e.Name ,
    e.Path ,
    d.Description ,
    d.LastStatus,
    d.LastRunTime
FROM    ReportServer.dbo.ReportSchedule a
    JOIN msdb.dbo.sysjobs b ON a.ScheduleID = b.name
    JOIN ReportServer.dbo.ReportSchedule c ON b.name = CONVERT(VARCHAR(50),c.ScheduleID)
    JOIN ReportServer.dbo.Subscriptions d ON c.SubscriptionID = d.SubscriptionID
    JOIN ReportServer.dbo.Catalog e ON d.Report_OID = e.ItemID
WHERE  e.Path LIKE '%path%'

EXEC ReportServer.dbo.AddEvent @EventType='TimedSubscription', @EventData='123214134-13242-4890-A3D3424-D23423D17E6CBD'
...