Использование отчета SSRS для передачи значения параметра представляет собой список csv в набор данных SQL.

Я сделал отчет SSRS с параметром текстового поля, в котором пользователи будут вводить список строковых значений, разделенных запятыми. Этот список будет передан в SQL-запрос в наборе данных отчета, который имеет: ... WHERE TheField в (@myCSVParam).

Если я передаю одно значение из поля, оно работает, но если я передаю список csv из поля, то в отчете говорится, что такого значения не существует.

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

Как мне преобразовать этот список csv и преобразовать в пригодный для использования параметр для фильтра sql IN?


person A.G.    schedule 21.06.2013    source источник
comment
Вы пробовали оператор «IN»?   -  person siri    schedule 22.06.2013
comment
Это то, что я использую в SQL-запросе.   -  person A.G.    schedule 22.06.2013


Ответы (4)


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

Итак, скажем, вы хотите, чтобы пользователь мог вводить несколько заказов на продажу в одно текстовое поле, разделенные запятыми, например: 61JF073, 61SW073, 61SW074

Мой первый параметр отчета называется «Номер заказа», описание «Номера заказов (разделенные запятой)». Тип данных = "Текст", и ничего не проверяется.

Мой второй параметр возьмет список из первого параметра и создаст список «Несколько значений», который вы сможете использовать в своем SQL-запросе.

Второй параметр: Имя = "OrderNos", тип = "Текст". «Разрешить несколько значений» отмечен флажком. Параметр видимости = "Внутренний" (пользователю это видеть не обязательно). Доступные значения = Нет. Значения по умолчанию = Укажите значения. Добавьте значение: =Split(Replace(Parameters!OrderNo.Value," ",""),",")

Я использую функцию «Заменить», чтобы удалить все пробелы, поскольку пользователи могут вводить пробелы после запятых, что повлияет на вывод.

Теперь ваш SQL-запрос может содержать предложение «IN» для фильтрации результатов.

SELECT OrderNo, SalesID, SalesName FROM SalesOrders WHERE OrderNo IN (@OrderNos)

Данные будут отфильтрованы на сервере SQL, а не в отчете SSRS, который является предпочтительным методом, чтобы сохранить отчет SSRS от извлечения всей таблицы перед применением фильтра. Вы хотите получить только данные, необходимые для отчетности.

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

person Jon Thurgood    schedule 14.01.2014

вместо двух параметров я использовал что-то вроде =split(Parameters!Category.Value,",")

и установите параметр, используемый в наборе SQL [In (@Category)] для этого выражения. Единственным недостатком является то, что он спрятан на вкладке параметров набора данных.

В конце концов я изменил его на =split(replace(Parameters!Category.Value," ",""),",") как у вас :) На ваше усмотрение, если вы предпочитаете иметь 1 параметр и иметь параметр, равный выражению или иметь 2 параметра и передавать 1 через другой.

Я не могу публиковать изображения, но мое находится здесь http://i.stack.imgur.com/rhnWt.png

person John    schedule 23.04.2014

Похоже, что @myCSVParam — это строковый параметр с одним значением. Соответственно, SSRS заключает его в кавычки при использовании в операторе SQL. Таким образом, для одного значения вы получаете 'First' (что соответствует совпадению), но для нескольких значений вы получаете 'First, Second, Third' (то есть одно большое значение, которое ничему не соответствует), а не 'First', 'Second', 'Third' (то есть список из трех отдельных значений) это то, что вы после.

У вас есть два варианта:

  • Используйте параметр с несколькими значениями, который, естественно, делает то, что вам нужно. Это лучший вариант, если пользователь может выбирать значения из списка.
  • Вручную создайте список, заменив запятые запятыми в кавычках, например:

    =Заменить(Параметры!myCSVParam.Value, ", ", "', '")

person Chris Latta    schedule 22.06.2013

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

ГДЕ Поле в (SELECT regexp_substr(@myCSVParamt,'[^,]+', 1, уровень) A FROM DUAL CONNECT BY regexp_substr(@myCSVParam, '[^,]+', 1, уровень) не равно нулю)

Надеюсь, это поможет!

person Hoang Nguyen    schedule 09.01.2015