Один из способов сделать это, хотя он и открыт для обсуждения, - это создать Расширение обработки данных служб отчетов - это не сложно, и тот, который я предлагаю это действительно просто ...
Чтобы это работало для всего, где у вас есть фиксированный список, и я просто выдвигаю идею, вы можете создать «язык запросов», который будет выглядеть примерно так:
ParameterType=.net type&DataColumnName=Whatever the user wants&Value=first value&Value=second value...
Таким образом, внутри расширения, которое вы разделяете на & (вы бы задали правило для экранирования & в записях значений, так что \ & или что-то в этом роде), а затем проверьте, что у вас есть только одна запись ParameterType и DataColumnName (если ParameterType не существует, по умолчанию «System.String» и значение по умолчанию «Value» или что-то, если DataColumnName не существует - выдает ошибку, если они определены несколько раз), а для первого, если установлено, используйте Type.GetType, чтобы установить тип столбца, а затем установить имя в «схеме» для набора результатов.
Наконец, все, что вам нужно сделать, это перебрать все записи значений и добавить строку в набор результатов.
Это будет работать не только для многозначных параметров, но и для всего, что у вас есть фиксированный список, который вы хотите превратить в набор данных, и означает, что никаких поездок в базы данных или чего-либо еще - обработка будет происходить на сервере Rerporting Services .
В случае многозначного параметра вам нужно просто выполнить цикл for в запросе в отчете, чтобы сгенерировать запрос.
Может быть, в поисках аккуратности вы также можете создать удобную функцию, которая принимает параметр в качестве аргумента и генерирует запрос, чтобы у вас была общая библиотека и модуль обработки данных, и все, кто создает отчет, могут нуждаться сделать что-то вроде (я думаю, это будет функция с пятью линиями):
= MultiValueQuery.GenerateQuery (Параметры! MyMultiValueParameter)
Аккуратно, может быть, ты будешь судьей!