Отправка нескольких значений параметра ssrs в подотчет

В настоящее время есть три вложенных отчета, один основной отчет.

Главный отчет имеет два параметра - SELECTDATE и EMP_ID. Основной отчет отправляет Order_Nbr всем подотчетам.

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

SQL имеет столбец как INT. У меня есть оба параметра в основном отчете и подотчете, SELECTDATE установлен как текст с несколькими значениями, а EMP_ID установлен как Integer с несколькими значениями. В моих запросах есть дата IN (@SELECTDATE) и emp_id IN (@EMP_ID).

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


person JLR    schedule 14.11.2012    source источник


Ответы (3)


Сделайте параметры в подотчете немногозначными, удалите все "Доступные значения". Передайте многозначный параметр из родительского отчета в виде строки с помощью метода соединения.

=Join(Parameters!Emp_ID,",")

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

Я не уверен, как это работает с текстовыми запросами, но он работает с хранимыми процедурами.

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

person David Lawson    schedule 15.11.2012

Я предполагаю, что вы не установили параметр в дополнительном отчете как Multi Select. Если вы установили параметр во вложенном отчете как множественный выбор, то вы можете просто отправить параметр из основного отчета в подчиненный отчет как есть. Подробнее см. На здесь

person user007    schedule 11.12.2013

Я использовал следующее решение, которое работает в SSRS2016. Это также работает с текстовыми параметрами.

  1. Как было предложено выше, передайте параметр в виде строки в подотчет, СОЕДИНЯЯ значения.

Join(Parameters!EmpID, ",")

  1. В подотчете примите параметр как текст.
  2. В SQL вашего подотчета используйте функцию string_split SQL 2016, чтобы вернуть таблицу значений и просто присоединить ее к вашему основному запросу. Так что в основном, если ваш параметр назван "EmpID_Multi", сделайте

... JOIN (SELECT value FROM string_split ( @EmpID_Multi, ",")) mv ON mv.value= ...

Примечание: вы можете рассмотреть возможность переноса значений во временную таблицу для оптимизации SQL (иногда оптимизатор делает забавные вещи ...).

person hessenfloh    schedule 23.04.2020