Остановить отправку пустых отчетов в подписке на основе данных SSRS 2008 R2 - PullRequest
6 голосов
/ 19 декабря 2011

Я планирую некоторые отчеты с помощью управляемой данными подписки в SSRS 2008 R2.

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

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

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

Мне просто интересно, есть ли у вас, ребята, идеальное решение для этой проблемы.

Большое спасибо за вашу помощь.

Привет

Ответы [ 4 ]

10 голосов
/ 17 февраля 2012

Вот мой обходной путь: извлеките свои данные с помощью хранимой процедуры и поставьте следующий код в конце

IF @@ROWCOUNT = 0 RAISERROR('No data', 16, 1)

Проверьте Статья и комментарии Рассела Кристофера для более подробной информации. Что меня удивляет, так это то, что прошло 6 лет, и MS просто не может найти решение для этого: 3

0 голосов
/ 13 декабря 2016

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

SELECT 
  [table].[id]
  ,(1/COUNT(id))
FROM [table]
WHERE [table].[id] > @Parameter

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

0 голосов
/ 20 июня 2016

Пожалуйста, используйте как показано ниже скрипт, чтобы остановить пустой отчет планировщика в SSRS:

BEGIN


Select @PN=Count(ParameterName) from setup   where 

@SAPProcessedDate<>parametervalue   and parametername='CommunicatorLastRun'

IF @PN = 0

    Select 1/0

Else 

Select 'Communicator Not Running' AS ParameterName


END
0 голосов
/ 09 июня 2015

Множество способов сделать это.Поведение подписки легко изменить, основываясь на результатах запроса.Просто запросите вашу базу данных, чтобы выяснить ситуацию (например, в журнале процесса - или просто верните статус из процедуры, которую вы все равно должны запустить), и используйте оператор if.

Например:

DECLARE @SomeVariable INT = 0; -- 0 means good

EXEC @SomeVariable = reports.sp_some_proc; -- Returns 1 if something is bad

IF @NoData = 0 -- everything is fine send report

SELECT 
    mail_to = 'email1; email2; email3,... important people.....',
    mail_subject = 'Whatever subject',
    mail_comment = 'Whatever comment',
    include_report = 'True'

ELSE -- the world is a dark place, variable is probably 1 or something. bad...

SELECT 
    mail_to = 'someone you don''t like',
    mail_subject = 'something is bad' + LEFT(CONVERT(VARCHAR(25), GETDATE(), 20),16),
    mail_comment = 'like i said, something is bad',
    include_report = 'False'
...