Скрытие подотчета в SSRS на основе параметра (и не выполнение хранимой процедуры)

У меня есть проблема, когда я хочу скрыть / показать подотчет на основе параметра, который передается в основной отчет.

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

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

Ответы на вопрос(3)

Есть способ решить эту проблему. Основывайтесь на вашем описании вопроса. Например, у вас есть 4 подотчета и названы их от page1 до page4. И основной отчет будет передавать параметр «Investor_ID» значение для всех этих 4 страниц. В основном отчете вам нужно создать 4 логических параметра и установить скрытое свойство вложенного отчета, чтобы контролировать эти 4 вложенных отчета, видимые или нет.

Например, использовать выражение=iif(Parameters!Page1.Value = true, false, true так что если вы выберете true для параметра page1, то будет отображена страница1, в противном случае она будет скрыта.

Затем вам нужно настроить параметры в & quot; Свойства подотчета & quot; для подотчетов.

Для параметра Investor_ID, который необходим для подотчета, в качестве значения выберите выражение и используйте=IIF(Parameters!Page1.Value = true, Fields!Investor_ID.Value, nothing), Это означает, что если вы выберете скрыть страницу1, то основной отчет ничего не передаст вложенному отчету страницы1. Тогда Page1 не будет запущена и будет отображать & quot; Ошибка: Подотчет не может быть отображен & quot; поскольку параметр Investor_ID равен нулю. Но мы скрываем этот подотчет. Таким образом, страница 1 не будет отображаться.

Таким образом, вы можете контролировать выполнение скрытого подотчета или нет.

Right-click on the sub report object in the main report and select “Format Subreport…”. This will open the Format Editor.

Select the “Subreport” tab in the Format Editor.

place a check mark in the “Suppress Blank Subreport” check box.

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

Один из способов гарантировать, что процедура выполняется только условно, состоит в том, чтобы изменить имя хранимой процедуры в наборе данных на выражение - что-то вроде:

=iif(Parameters!RunMyDataset.Value="Y","sp_MyDataSet","sp_Dummy")

- где sp_Dummy - это хранимая процедура, которая выполняет минимальную обработку (например,SELECT NULL).

 Adriaan Stander19 апр. 2012 г., 06:50
Разве фиктивный sp не должен возвращать те же столбцы, что и оригинальный sp?
 Adriaan Stander19 апр. 2012 г., 13:47
Тем не менее, кажется мне взломать. Было бы лучше, если бы вы могли избежать вызова SP полностью по запросу.
 19 апр. 2012 г., 10:21
@astander: как я уже сказал, это не существенно. Вы можете использовать одну фиктивную хранимую процедуру и просто игнорировать предупреждения (которые я бы не ожидал увидеть конечными пользователями).
 19 апр. 2012 г., 09:31
@astander: если этого не произойдет, отчет будет генерировать несколько предупреждений (но без ошибок) при предварительном просмотре в BIDS. Поэтому в идеале было бы неплохо создать такой же набор столбцов в фиктивной процедуре (чтобы не генерировать эти предупреждения), но это не обязательно.
 Adriaan Stander19 апр. 2012 г., 10:19
Это тогда подразумевало бы, что мне нужно будет создать фиктивный sp для каждого подчиненного отчета / sp и поддерживать 2 SP для каждого подчиненного отчета, который необходимо скрыть. Знаете ли вы, что обосновало решение MS о принудительном выполнении SP? В любом случае, мне придется подумать о чем-то другом, поскольку я не хочу, чтобы у SP была встроенная логика дисплея для наглядности.

Ваш ответ на вопрос