Аккуратный способ группировки по многозначному параметру - PullRequest
1 голос
/ 14 ноября 2011

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

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

Существует ли более точный способ группировки по многозначному параметру?

1 Ответ

2 голосов
/ 16 декабря 2011

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

Чтобы это работало для всего, где у вас есть фиксированный список, и я просто выдвигаю идею, вы можете создать «язык запросов», который будет выглядеть примерно так:

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)

Аккуратно, может быть, ты будешь судьей!

...