Мне нужна ПОМОЩЬ в выборе параметра «ВЕСЬ отчет» в раскрывающемся списке, чтобы запустить отчет для ВСЕХ

#sql #reporting-services #parameters #dataset #drop-down-menu

#sql #службы отчетов #параметры #набор данных #выпадающее меню

Вопрос:

Я извлекаю данные из таблицы A, которая имеет 4 статуса транзакции… ’03’, ’05’, ’06’, amp; ’07’
Я определил набор данных, который их извлекает…

 SELECT 'ALL' AS label, NULL AS value, 0 AS iordr
UNION ALL
SELECT '03' AS label, '03' AS value, 1 AS iordr
UNION ALL    
SELECT '05' AS label, '05' AS value, 2 AS iordr
UNION ALL
SELECT '06' AS label, '06' AS value, 3 AS iordr
UNION ALL
SELECT '07' AS label, '07' AS value, 4 AS iordr
ORDER BY iordr
  

Но когда я пытаюсь определить параметр, когда я выбираю «ВСЕ» в раскрывающемся списке отчета, он не выводится ’03’, ’05’, ’06’ и «07» — на самом деле, он НИЧЕГО НЕ ТЯНЕТ… как мне сделать так, чтобы выбор «ВСЕ» отображал ВСЕ статусы в одном отчете?
Свойства параметров отчета:

Общий
тип данных: Текст; Разрешить нулевое значение
Выберите параметр видимость: видимый
Доступные значения:
Выберите один из следующих вариантов:
Получение значений из набора данных запроса
(определенного выше)
Поле значения: поле метки значения:
метка
Значения по умолчанию:
Выберите один из следующих параметров: значение по умолчанию отсутствует

Комментарии:

1. Какой инструмент отчетности вы используете?

2. @Michael Petrotta Из сведений о свойствах параметров отчета выглядит как SSRS. (Я переназначил.)

3. У вас есть другой набор данных, который извлекает данные для вашего отчета? (Вы должны.) Можете ли вы поделиться тем, как этот параметр используется? Вероятно, это проблема.

4. Будет ли это ORDER BY применяться ко всему набору данных или только для 07 ? DB2 требует использования фиктивной таблицы, поэтому она будет применяться только к последней таблице, но я не уверен в этом случае.

5. Microsoft Visual Studio 2008 — я думал, что мой запрос создал еще один столбец iordr — и именно этот столбец упорядочен последовательно… 0, 3, 5, 6, 7 — выпадающий список в моем отчете показывает ВСЕ, 3, 5, 6, 7 — и когда я выбираю ВСЕ, отчет, который запускаетсяничего не показывает, поэтому я упускаю что-то, что объединяет все статусы и запускает отчет по всем статусам и, таким образом, возвращает ВСЮ информацию из исходной таблицы.

Ответ №1:

Значение, выбранное из вашего выпадающего списка, будет одним из { NULL, '03', '05', '06', '07' } . Итак, вы можете написать свое WHERE предложение в отчете следующим образом:

 SELECT ...
FROM ...
WHERE SomeColumn = @UserSelectedValue
  OR @UserSelectedValue IS NULL
;
  

Это не сработает, если ваше WHERE предложение просто WHERE SomeColumn = @UserSelectedValue потому = NULL , что недопустимо (в любом случае, как стандарт ANSI), и это даст вам результаты только для SomeColumn того NULL , чтобы быть.

Эффективно сравнивая NULL IS NULL , вы создаете условие, которое выполняется для каждой отдельной строки и, таким образом, предоставляет вам все данные.

Комментарии:

1. Я разрабатываю свой RDL в Microsoft Visual Studio (SSRS 2008).<br> У меня есть исходная таблица … и затем я создал источник данных (dt), из которого я извлекаю transaction_status — и именно transaction_status интересует меня в извлечении данных для моего отчета. Параметр настроен для отображения вариантов в раскрывающемся меню в отчете…

2. Правильно. Таким образом, вы можете получить базовый запрос для своего отчета и отредактировать WHERE предложение, чтобы оно было похоже на то, что я опубликовал. Он изменится в соответствии с вашим определением таблицы, но концепция остается в силе.

3. базовый запрос для моего отчета … это мой параметр или мой набор данных, из которого параметр извлекает свою информацию?

4. Как мне включить то, что вы указали выше? Я предполагаю, что то, что вы предоставили, каким-то образом согласуется с первой частью моего запроса? Значение — Выберите «все» в качестве метки, NULL в качестве значения, 0 в качестве iordr — как мне добавить в WHERE часть инструкции, которую вы предоставили?

5. Ваш первый запрос используется для генерации значений для выпадающего списка. Запрос, который я дал, включает часть WHERE предложения, которое будет использоваться в SQL, который генерирует ваш набор данных.

Ответ №2:

В SSRS многозначные параметры передаются в SQL в виде строки, разделенной запятыми.

Самый простой способ использовать многозначный параметр SSRS — внедрить полный SQL-запрос в набор данных и использовать форму WHERE myTable.Column IN ( @MyParameterName )

Или вы можете переместить свой параметр фильтрации в фильтр набора данных или, возможно, в фильтр в табликсе, который вы используете.

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