Передача параметров в отчётах SSRS

Jun 24, 2013 00:37

Недавно по работе при создании отчетов в SSRS столкнулась с такой задачей: необходимо создать два связанных отчёт так, чтобы можно было перейти из основного отчета во вспомогательный, а из вспомогательного вернуться в основной с передачей параметров.
Основной отчёт изначально загружается со значениями параметров по умолчанию, а все возможные значения ограничены набором из запроса. Для большей ясности приведу схему передачи параметров: основной отчёт (Main Report) имеет параметр год (@Year) со значением по умолчанию - текущий 2013 год и возможными значениями - история за 2 предыдущих года 2011-2013, и вспомогательный отчёт (Detalisation).


Сначала я попробовала решить задачу в лоб: создать в Main Report параметр @Year со значением по умолчанию CurrentYear (сейчас не буду вдаваться в подробности из какого именно запроса получаю это значение и из какого запроса - допустимые значения) и с допустимыми значениями из набора Years. При переходе из Main Report в Detalisation действие настраивается как переход в отчет с параметром @Year. Возврат из отчёта Detalisation в Main Report настраивается тоже как действие с переходом в отчёт с параметром @Year. Но вот тут Reporting не срабатывает - у параметра @Year уже есть список допустимых значений, задаваемый набором.
И мне пришло в голову следующее решение этой задачи: создать дополнительный параметр, у которого не будет строго задан набор допустимых значений, и в него передавать значение параметра при возврате из вспомогательного отчета.
Далее приведу пошаговое описание этого решения.
1.       Для демонстрации создам следующий проект:
a.        DataSource: DataSource;
b.       DataSets: CurrentYear, Years;
c.       Reports: Main Report, Detalisation.


2.       В Main Report создам параметр @Year со значением по умолчанию из набора CurrentYear


И без допустимых значений


3.       Далее создаю параметр @YearMain со значением по умолчанию =@Year


И допустимыми значениями из набора Years


4.       В отчёте создаём элемент, при нажатии на который будет происходить переход во вспомогательный отчёт. Я сделала текстовое поле. В свойствах настраиваем Действие (Action) как переход в отчёт (Go To Report) Detalisation с передачей параметра @YearDetalisation = @YearMain


Работа с запросами в отчете Main Report ведется с параметром @YearMain


5.       Теперь перехожу к отчёту Detalisation. Создаю параметр @YearDetalisation без значений по умолчанию и без допустимых значений.
6.       Создаю элемент для перехода - пусть это опять будет текстовое поле. Настраиваю Действие как переход в отчёт Main Report с передачей параметра @Year = @YearDetalisation


Пришло время посмотреть, что получилось. При загрузке основного отчёта по умолчанию загрузился текущий год. В параметре @Year видим 2013 год. В реальном отчёте этот параметр будет скрыт для пользователя.


В параметре @YearMain для выбора предоставлен только установленный набор значений:


Выберу 2012 год и перестрою отчёт (кнопка View Report или Просмотреть отчет). Как видно, значение параметра @Year не изменилось, а значение параметра @YearMain, с котором и ведётся работа в самом отчёте изменилось:


Перейду во вспомогательный отчёт:


Теперь вернусь в основной отчёт:


Ура, значение года сохранилось, как это и требовалось.
Если эта задача касается передачи параметра с несколькими значениями (multivalue), то необходимо сделать следующим образом. В основном отчёте создать параметр с возможностью иметь несколько значений. При настройке действия для перехода во вспомогательный отчёт необходимо указать =Join(Parameters!Years.Value, “, ”). Во вспомогательном отчёте соответствующий параметр уже будет текстовым, с единственным возможным значением. При возвращении в основной отчёт при передаче параметра необходимо указать =Split(Parameters!Years.Value, “, ”).

Надеюсь, моя статья помогла вам. Буду рада узнать альтернативные методы решения этой задачи.

parameters, ssrs, параметры, работа

Next post
Up