Пока готовится подробный обзор функционала MS Datazen и Pyramid Analytics, мы решили разместить небольшую статью по решению локальной задачи для SQL Server Reporting Services.
Недавно, при создании отчетов в SSRS столкнулись с такой задачей:
необходимо создать два связанных отчёт так, чтобы можно было перейти из основного отчета во вспомогательный, а из вспомогательного вернуться в основной с передачей параметров.
Ограничения:
основной отчёт изначально загружается со значениями параметров по умолчанию, а все возможные значения ограничены набором из запроса.
Для большей ясности приведем схему передачи параметров: основной отчёт (Main Report) имеет параметр год ( Year) со значением по умолчанию – 2013 год и возможными значениями – история за 2 предыдущих года 2011-2013, и вспомогательный отчёт (Detalisation).
![](https://habrastorage.org/files/a9f/682/f21/a9f682f21d8f423593cb67b042a28160.png)
Сначала попробовали решить задачу в лоб: создать в 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.
![](https://habrastorage.org/files/114/fbf/c1c/114fbfc1c63b45ce8e0de1a48597bc89.png)
2. В Main Report создаем параметр Year со значением по умолчанию из набора CurrentYear
![](https://habrastorage.org/files/6ac/619/d1c/6ac619d1c4f542ed959b14bd9f003c86.png)
И без допустимых значений
![](https://habrastorage.org/files/46f/1f2/a37/46f1f2a379184304b6390c9cb9d32d16.png)
3. Далее создаем параметр @YearMain со значением по умолчанию = Year
![](https://habrastorage.org/files/9a3/b63/f3c/9a3b63f3c3a4411dab3f81c997464800.png)
И допустимыми значениями из набора Years
![](https://habrastorage.org/files/cc2/f8e/f93/cc2f8ef93d454f77a796bdf35feec4df.png)
4. В отчёте создаём элемент, при нажатии на который будет происходить переход во вспомогательный отчёт. Мы сделали текстовое поле. В свойствах настраиваем Действие (Action) как переход в отчёт (Go To Report) Detalisation с передачей параметра @YearDetalisation = @YearMain
![](https://habrastorage.org/files/46c/862/1ec/46c8621ec71f4922aa85563ce69a40d7.png)
Работа с запросами в отчете Main Report ведется с параметром @YearMain
![](https://habrastorage.org/files/975/2ba/bcc/9752babcc0314da4bfceda290f871415.png)
5. Теперь переходим к отчёту Detalisation. Создаём параметр @YearDetalisation без значений по умолчанию и без допустимых значений.
6. Создаём элемент для перехода – пусть это опять будет текстовое поле. Настраиваем Действие как переход в отчёт Main Report с передачей параметра Year = @YearDetalisation
![](https://habrastorage.org/files/ce2/c6b/493/ce2c6b493d68449583888f7d2d18f2c9.png)
Пришло время посмотреть, что получилось. При загрузке основного отчёта по умолчанию загрузился текущий год. В параметре Year видим 2013 год. В реальном отчёте этот параметр будет скрыт для пользователя.
![](https://habrastorage.org/files/916/fa7/142/916fa7142bfe446e88536fdb76658878.png)
В параметре @YearMain для выбора предоставлен только установленный набор значений:
![](https://habrastorage.org/files/e84/438/b28/e84438b28e1f42679d32b400b41a7bfa.png)
Выберем 2012 год и перестроим отчёт (кнопка View Report или Просмотреть отчет). Как видно, значение параметра Year не изменилось, а значение параметра @YearMain, с котором и ведётся работа в самом отчёте изменилось:
![](https://habrastorage.org/files/0f7/ce4/c3b/0f7ce4c3bfe84d64a94ff81332c746d3.png)
Перейдём во вспомогательный отчёт:
![](https://habrastorage.org/files/1be/006/164/1be006164a9a41c98187fe122ac908b9.png)
Теперь вернемся в основной отчёт:
![](https://habrastorage.org/files/ff0/e34/d5c/ff0e34d5c8f14a88ad0315243f7b61fd.png)
Ура, значение года сохранилось, как это и требовалось.
Если эта задача касается передачи параметра с несколькими значениями (multivalue), то необходимо сделать следующим образом. В основном отчёте создать параметр с возможностью иметь несколько значений. При настройке действия для перехода во вспомогательный отчёт необходимо указать =Join(Parameters!Years.Value, “, ”). Во вспомогательном отчёте соответствующий параметр уже будет текстовым, с единственным возможным значением. При возвращении в основной отчёт при передаче параметра необходимо указать =Split(Parameters!Years.Value, “, ”).
Надеюсь, кому-нибудь эта задача пригодится и поможет в жизни.
В следующей статье мы рассмотрим решения Pyramid Analytics и Datazen (пройдем все этапы, от подключения к кубу и другим источникам до создания отчета)
«Пирамида» рассматривается компанией Microsoft как решение для крупного бизнеса из корпоративного сегмента и Datazen, решение для малого и среднего бизнеса.
Кстати на данный момент мы активно ищем людей на очень интересные и крупные BI проекты (ссылки на вакансии ниже):
1. Аналитик-разработчик BI
2. Архитектор BI
Недавно, при создании отчетов в SSRS столкнулись с такой задачей:
необходимо создать два связанных отчёт так, чтобы можно было перейти из основного отчета во вспомогательный, а из вспомогательного вернуться в основной с передачей параметров.
Ограничения:
основной отчёт изначально загружается со значениями параметров по умолчанию, а все возможные значения ограничены набором из запроса.
Для большей ясности приведем схему передачи параметров: основной отчёт (Main Report) имеет параметр год ( Year) со значением по умолчанию – 2013 год и возможными значениями – история за 2 предыдущих года 2011-2013, и вспомогательный отчёт (Detalisation).
![](https://habrastorage.org/files/a9f/682/f21/a9f682f21d8f423593cb67b042a28160.png)
Сначала попробовали решить задачу в лоб: создать в 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.
![](https://habrastorage.org/files/114/fbf/c1c/114fbfc1c63b45ce8e0de1a48597bc89.png)
2. В Main Report создаем параметр Year со значением по умолчанию из набора CurrentYear
![](https://habrastorage.org/files/6ac/619/d1c/6ac619d1c4f542ed959b14bd9f003c86.png)
И без допустимых значений
![](https://habrastorage.org/files/46f/1f2/a37/46f1f2a379184304b6390c9cb9d32d16.png)
3. Далее создаем параметр @YearMain со значением по умолчанию = Year
![](https://habrastorage.org/files/9a3/b63/f3c/9a3b63f3c3a4411dab3f81c997464800.png)
И допустимыми значениями из набора Years
![](https://habrastorage.org/files/cc2/f8e/f93/cc2f8ef93d454f77a796bdf35feec4df.png)
4. В отчёте создаём элемент, при нажатии на который будет происходить переход во вспомогательный отчёт. Мы сделали текстовое поле. В свойствах настраиваем Действие (Action) как переход в отчёт (Go To Report) Detalisation с передачей параметра @YearDetalisation = @YearMain
![](https://habrastorage.org/files/46c/862/1ec/46c8621ec71f4922aa85563ce69a40d7.png)
Работа с запросами в отчете Main Report ведется с параметром @YearMain
![](https://habrastorage.org/files/975/2ba/bcc/9752babcc0314da4bfceda290f871415.png)
5. Теперь переходим к отчёту Detalisation. Создаём параметр @YearDetalisation без значений по умолчанию и без допустимых значений.
6. Создаём элемент для перехода – пусть это опять будет текстовое поле. Настраиваем Действие как переход в отчёт Main Report с передачей параметра Year = @YearDetalisation
![](https://habrastorage.org/files/ce2/c6b/493/ce2c6b493d68449583888f7d2d18f2c9.png)
Пришло время посмотреть, что получилось. При загрузке основного отчёта по умолчанию загрузился текущий год. В параметре Year видим 2013 год. В реальном отчёте этот параметр будет скрыт для пользователя.
![](https://habrastorage.org/files/916/fa7/142/916fa7142bfe446e88536fdb76658878.png)
В параметре @YearMain для выбора предоставлен только установленный набор значений:
![](https://habrastorage.org/files/e84/438/b28/e84438b28e1f42679d32b400b41a7bfa.png)
Выберем 2012 год и перестроим отчёт (кнопка View Report или Просмотреть отчет). Как видно, значение параметра Year не изменилось, а значение параметра @YearMain, с котором и ведётся работа в самом отчёте изменилось:
![](https://habrastorage.org/files/0f7/ce4/c3b/0f7ce4c3bfe84d64a94ff81332c746d3.png)
Перейдём во вспомогательный отчёт:
![](https://habrastorage.org/files/1be/006/164/1be006164a9a41c98187fe122ac908b9.png)
Теперь вернемся в основной отчёт:
![](https://habrastorage.org/files/ff0/e34/d5c/ff0e34d5c8f14a88ad0315243f7b61fd.png)
Ура, значение года сохранилось, как это и требовалось.
Если эта задача касается передачи параметра с несколькими значениями (multivalue), то необходимо сделать следующим образом. В основном отчёте создать параметр с возможностью иметь несколько значений. При настройке действия для перехода во вспомогательный отчёт необходимо указать =Join(Parameters!Years.Value, “, ”). Во вспомогательном отчёте соответствующий параметр уже будет текстовым, с единственным возможным значением. При возвращении в основной отчёт при передаче параметра необходимо указать =Split(Parameters!Years.Value, “, ”).
Надеюсь, кому-нибудь эта задача пригодится и поможет в жизни.
В следующей статье мы рассмотрим решения Pyramid Analytics и Datazen (пройдем все этапы, от подключения к кубу и другим источникам до создания отчета)
«Пирамида» рассматривается компанией Microsoft как решение для крупного бизнеса из корпоративного сегмента и Datazen, решение для малого и среднего бизнеса.
Кстати на данный момент мы активно ищем людей на очень интересные и крупные BI проекты (ссылки на вакансии ниже):
1. Аналитик-разработчик BI
2. Архитектор BI