Вопрос

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

Чтобы расширить это, я хотел бы отправить только отчет только если есть новые заказы.

Идеи?

Это было полезно?

Решение

Просто добавьте условие в запросе DDS, чтобы проверить время заказа. Если в прошлом час есть какие-либо заказы, ваш запрос должен вернуть свой набор результатов, иначе ничего не верните.

Например, в вашем запросе добавьте следующую логику

 DECLARE @HoursAgo int
 SELECT Top 1 @HoursAgo = DateDiff('hh',getdate(), OrderTime) 
 FROM Orders 
 ORDER BY OrderTime DESC  

В вашем запросе добавьте следующее предложение

 WHERE @HoursAgo > 0

Вы также можете добавить дополнительные проверки, чтобы убедиться, что заказ имеет текущий день.

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

Существует свойство набора данных RDL под названием «NOROWS», которые могут отображать пользовательское сообщение, если наборе данных не будет возвращен строки. Он все еще будет отправлять пустой отчет, просто со специальным сообщением.

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

declare @rows int

select @rows = -1

<select statement here>

select @rows = @@rowcount

if ( @rows < 1 )
begin
    RAISERROR ('no rows returned', 11, 1 );
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top