Multi-Select Параметр SSRS и подобные утверждения - PullRequest
1 голос
/ 10 августа 2011

У меня есть параметр VoucherType, который может использовать несколько значений, выбранных пользователем во время выполнения. В таблице есть поле с именем Voucher, которое начинается с VoucherType и заканчивается последовательностью чисел, которая меня не интересует. Например:

VoucherTypes

  • МКЭ
  • ORD
  • LAX

Ваучер

  • МКЭ-3849284
  • МКЭ-4173942
  • ORD-1654951
  • LAX-8798484

SQL-запрос, который я должен запустить, выглядит следующим образом:

SELECT VOUCHER, COST
FROM VOUCHERDATA
WHERE VOUCHER LIKE @VoucherType + '%';

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

Не удалось выполнить запрос для набора данных 'Набор данных1'. Неверный синтаксис рядом с ','.

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

Любая помощь будет оценена, спасибо!

** Примечание: изменения в таблице невозможны из-за внешних ограничений.

Ответы [ 3 ]

1 голос
/ 11 августа 2011

Я решил эту проблему, проанализировав тип Voucher в левой части уравнения:

SELECT VOUCHER, COST
FROM VOUCHERDATA
WHERE LEFT(VOUCHER,CHARINDEX('-',VOUCHER,1)-1) IN (@VoucherType);

После его анализа я могу использовать ключевое слово IN соответствующим образом.

1 голос
/ 11 августа 2011

Звучит так, как будто вы храните данные в первой нормальной форме (более одного элемента данных в одном поле), поскольку у вас есть тип ваучера и число в одном поле. Вы, вероятно, хотите нормализовать ваши данные в два столбца: VoucherType и VoucherID, которые будут храниться так:

VoucherType | VoucherId
------------------------------
MKE           3849284
MKE           4173942
ORD           1654951
LAX           8798484

Теперь у вас есть правильный столбец для отчета. Для удобства вы можете создать вычисляемое поле для объединения VoucherType + '-' + VoucherId для выполнения запросов, требующих полной информации о ваучере.

0 голосов
/ 11 августа 2011

В этом случае вы можете сделать 2 вещи.

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

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

http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/ssrs_multi_value_parameters

В противном случае другим способом будет возвращение всего в вашем коде SQL и фильтрация на стороне SSRS. Способ сделать это - удалить предложение SQL в SQL, которое фильтрует ваши ваучеры. Это вернет все ваучеры. Затем в SSRS установите параметр так же, как обычно для параметра множественного выбора. Затем в режиме конструктора SSRS щелкните правой кнопкой мыши таблицу и перейдите в свойства. Тогда есть вкладка под названием фильтры. Вы можете настроить фильтр здесь, сказав не показывать эти ваучеры. В основном это скрывает их.

Первый способ, который я объяснил, безусловно, лучший способ сделать это, поскольку он быстрее и может быть повторно использован в долгосрочной перспективе. Это очень просто, когда все функции настроены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...