Как использовать String.Filter с многозначными параметрами - PullRequest
6 голосов
/ 14 сентября 2010

В окне Построитель выражений в SQL Server Reporting Services 2008 R2 в разделе «Общие функции -> Текст -> Элемент» есть выражение «Фильтр».Похоже, это соответствует методу Strings.Filter в .NET Framework.Описание фильтра выглядит следующим образом:

Возвращает массив с нулями, содержащий подмножество массива String на основе указанных критериев фильтра.

Пример выглядит следующим образом:

=Filter(Parameters!MultivalueParameter.Value, "3", True, CompareMethod.Binary)

Пример и описание подразумевают, что вы можете проверить многозначный параметр, чтобы увидеть, равно ли хотя бы одно из выбранных значений параметру Match.Я не смог заставить это возвращать что-либо кроме #Error, что подразумевает, что многозначный параметр не является одномерным массивом.Параметры! MultivalueParameter.Value.GetType (). ToString () возвращает System.Object [].

Кто-нибудь знает, как заставить это работать?Я использую следующую работу, чтобы проверить, были ли выбраны значения в параметре с несколькими значениями:

=IIF(InStr(" " + JOIN(Parameters!MultivalueParameter.Value, " ") + " ", " 3 ", CompareMethod.Text), false, true)

Приведенный выше код работает, но он довольно уродлив.Я бы предпочел использовать функцию фильтра, если она поддерживает такую ​​проверку.Кто-нибудь может привести пример кода, который работает?

Ответы [ 2 ]

6 голосов
/ 22 сентября 2010

Проблема возникает из-за того, что пример из MSDN несколько не хватает для этого обсуждения. Это правда, что = Filter (Параметры! MultivalueParameter.Value, "3", True, CompareMethod.Binary) возвращает массив, но с точки зрения SSRS вы не можете просто вывести массив в отчет. Это одна из причин, почему вы видите ошибку.

Кроме того, SSRS, похоже, испытывает проблемы с обработкой двух необязательных параметров функции Filter. Оставь это, и тебе будет хорошо.

Вы можете немедленно проверить это путем вывода длины массива в текстовый блок.

=Filter(Parameters!MultivalueParameter.Value, "3").Length

Приведенное выше должно привести к текстовому полю с целой длиной фильтруемого параметра.

Итак, собрав все это вместе, вы можете достичь желаемого результата с помощью следующего:

=IIF(Filter(Parameters!MultivalueParameter.Value, " 3 ").Length > 0, "false", "true")
2 голосов
/ 13 декабря 2010

Я использовал многозначный параметр в SSRS 2008, чтобы показать / скрыть столбцы в таблице.

Однако я так и не смог воспользоваться фактической возвращенной подстрокой и мог использовать результат только через длину.

=IIF(Filter(Parameters!MultiOption.Value,"3",true).Length>0,"T","F")

Таким образом, для каждого столбца (1-й, 2-й, 3-й и 4-й столбцы) я бы использовал этот код (с true / falsepart, а не в виде строк, как показано выше).

Другая попытка идеибыли:

=Filter(Parameters!MultiOption.Value,"3",true).GetValue(0).ToString

, который может выводить 3, однако в ложном состоянии, GetValue (0) выходит за пределы.

=IIF((Filter(Parameters!MultiOption.Value,"3",true).Length>0),
Filter(Parameters!MultiOption.Value,"3",true).GetValue(0).ToString,
"",)

, который фактически должен возвращать значение подстроки, только еслисуществует.Однако это не сработало.

Даллас

...