Многие значения int в фильтре SSRS - PullRequest
0 голосов
/ 24 апреля 2020

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

Я попробовал вот что, но это не работает. Как я могу вставить несколько значений для фильтрации?

enter image description here

1 Ответ

1 голос
/ 25 апреля 2020

Вы можете создать параметр (фильтр) в своем отчете, который будет принимать числа, разделенные , или каким-либо другим символом. Этот параметр будет строкой и будет выглядеть следующим образом:

enter image description here

В процедуре SQL эти значения разделяются с использованием функции SPLIT_STRING.

Вот простой пример.

CREATE TABLE #Numbers ( Num INT ) INSERT INTO #Numbers (Num) VALUES(1) INSERT INTO #Numbers (Num) VALUES(2) INSERT INTO #Numbers (Num) VALUES(3) INSERT INTO #Numbers (Num) VALUES(4) INSERT INTO #Numbers (Num) VALUES(5)

Задача состоит в том, чтобы выбрать некоторые значения из таблицы #Numbers. Можно выбрать следующие значения:

DECLARE @MyValues CHAR(100) = '1, 3, 5, 7'

В вашем примере @MyValues является параметром отчета.

Эти значения будут разделены:

DECLARE @Separator CHAR = ','

Следующий шаг - разделить @MyValues и сохранить их:

CREATE TABLE #SplitValues ( NumValues INT ) INSERT INTO #SplitValues SELECT TRIM(Value) FROM STRING_SPLIT(@MyValues, @Separator)

Последний шаг - выбрать @MyValues из таблицы #Numbers:

SELECT * FROM #Numbers WHERE Num IN (SELECT * FROM #SplitValues)

Вместо использования таблицы #SplitValues есть возможность использовать SELECT TRIM(Value) FROM STRING_SPLIT(@MyValues, @Separator) непосредственно в последнем select, однако таким образом функционируют TRIM и SPLIT_STRING вызывается для каждой строки в таблице #Numbers, которая "тяжелее" для выполнения.

Наконец, вместо строкового параметра вы можете создать раскрывающийся список флажков и передать его значения таким же образом , как строка, содержащая числа, разделенные запятой.

...