Фильтр отчета ssrs без дубликатов, используемых в запросе

У меня возникла проблема, и я не знаю, как ее решить.

У меня есть отчет SSRS, который извлекается из таблицы. Я хочу, чтобы фильтр параметров показывал дедублированные значения на основе доступных параметров в одном из столбцов.

Итак, мой набор данных с запросом вроде:

SELECT * FROM table1 WITH (NOLOCK) WHERE col1 IN (@param)

Затем мне нужен параметр с именем param, который получает свои доступные значения и значения по умолчанию из col1 в приведенном выше наборе данных, и я хочу, чтобы они были дедуплицированы.

Из чтения online Я узнал, что мне нужно создать фиктивный параметр и использовать код VBA для дедупликации этого списка.

Итак, у меня есть эти параметры:

  • param_dummy, который получает доступные значения и значения по умолчанию от col1 в приведенном выше наборе данных.
  • param, который получает список удаления дубликатов от param_dummy с помощью Code.RemoveDuplicates

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

Как я могу это решить?

Одна мысль состоит в том, чтобы удалить WHERE col1 IN (@param) и вместо этого использовать фильтр в таблице Tablix в отчете SSRS. Это работает, но мне интересно, насколько это эффективно.

И / или если у кого-то есть какие-либо другие предложения, я весь слушаю.

Обновлено, чтобы добавить больше деталей...

Итак, скажем, у меня есть таблица в моей БД:

| id | col1 | col2   |
|----|------|--------|
| 1  | a    | hello  |
| 2  | b    | how    |
| 3  | a    | are    |
| 4  | c    | you    |
| 5  | d    | on     |
| 6  | a    | this   |
| 7  | b    | lovely |
| 8  | c    | day    |

Я хочу:

  • Табликс для отображения всех полей из таблицы
  • фильтр, в котором пользователь может выбирать между доступными раскрывающимися списками в col1 (дедублируется)
  • текстовый фильтр, который допускает нули, когда пользователь может фильтровать col2
  • параметры будут иметь значения по умолчанию, поэтому таблица будет загружаться при загрузке страницы

Итак, у меня есть набор данных с таким запросом:

SELECT
    *
FROM dbo.table1
WHERE col1 IN (@col1options) AND (@col2value IS NULL OR col2 = @col2value)

Затем для col1options я сделал бы параметры доступными и по умолчанию равными Get values from a query и использовал бы указанный выше набор данных и col1.

Но это не сработает, поскольку запрос/набор данных зависит от col1options, который получает значения по умолчанию из запроса/набора данных.

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


person IMTheNachoMan    schedule 29.01.2018    source источник
comment
Можете ли вы опубликовать некоторые примеры данных? Покажите результаты до и после.   -  person aduguid    schedule 29.01.2018
comment
Я обновил свой вопрос с более подробной информацией.   -  person IMTheNachoMan    schedule 29.01.2018


Ответы (1)


Я не уверен, что понимаю вашу проблему, так что это предположение...

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

  1. Создать новый отчет
  2. Добавить набор данных dsMain как SELECT * FROM myTable WHERE myColumn IN (@myParam)
  3. Добавить набор данных dsParamValues как SELECT DISTINCT myColumn FROM myTable ORDER BY myColumn
  4. Отредактируйте свойства параметра @myParam и установите доступные значения и значения по умолчанию для запроса, затем выберите dsParamValues
  5. Добавьте элемент управления таблицей/матрицей и установите для свойства набора данных значение dsMain.
person Alan Schofield    schedule 29.01.2018
comment
Для этого потребуется два вызова SQL-сервера. Нет ли способа сделать то, что я хочу, без нескольких звонков? Я обновил свой вопрос с более подробной информацией. - person IMTheNachoMan; 29.01.2018
comment
Нет, перед отображением отчета выполняются только наборы данных, которые необходимы для заполнения параметров, поэтому вы не можете получить доступ к результатам вашего основного набора данных до тех пор, пока отчет не будет запущен, и к тому времени вам уже нужно запустить набор данных параметров отчета. - person Alan Schofield; 30.01.2018
comment
То есть два звонка, верно? Один вызов для заполнения параметров и один для получения данных. И таким образом значения в раскрывающемся списке фильтра будут всем, и они не будут фильтроваться на основе других критериев из dsMain. - person IMTheNachoMan; 30.01.2018
comment
Это правильно. Может быть, вы ясно изложили свои требования. Если нет, обновите свой вопрос, указав образец данных и ожидаемый процесс/выход. - person Alan Schofield; 30.01.2018