Использование однозначных и многозначных параметров

Изменения: 12 декабря 2006 г.

Параметры бывают однозначными и многозначными. Для многозначного параметра можно задать более одного значения. Если для многозначного параметра определить список доступных значений, то службы Reporting Services автоматически предоставляют параметр «Выбрать все» в раскрывающемся списке панели инструментов отчета. Этот параметр можно использовать, чтобы выделить все значения списка или снять выделение.

Aa337292.note(ru-ru,SQL.90).gifПримечание.
Параметр «Выбрать все» был отключен в SQL Server 2005 с пакетом обновления 1 (SP1) и восстановлен в SQL Server 2005 с пакетом обновления 2 (SP2).

Чтобы установить для параметра многозначное свойство, выберите в диалоговом окне Параметры отчета параметр Многозначный. Для многозначного параметра можно установить любой тип, кроме логического.

В основном многозначные параметры используются в предложениях ограничения запроса, например в предложении WHERE языка Transact-SQL или в предложении фильтра многомерного выражения, если необходимо проверить вхождение в набор значений, а не равенство единственному значению. Дополнительные сведения о создании многозначных параметров см. в разделах Учебник. Добавление параметров в простой табличный отчет и Создание параметров отчета и настройка свойств параметров отчета.

Aa337292.security(ru-ru,SQL.90).gifПримечание безопасности.
В любом отчете, содержащем параметры типа String, используйте список доступных значений (иначе называемый списком допустимых значений) и убедитесь, что у любого пользователя, запускающего отчеты, есть разрешение только на просмотр данных в отчете. При определении параметра типа String пользователю предоставляется текстовое поле, которое может содержать любое значение. Список допустимых значений ограничивает значения, которые могут быть введены. Если параметр отчета привязан к параметру запроса и не использует список допустимых значений, пользователь отчета может ввести в это текстовое поле команду на языке SQL и выполнить атаку встроенными командами SQL в отношении этого отчета и всего сервера. Наличие у этого пользователя достаточных разрешений для выполнения новой инструкции SQL может привести к нежелательным последствиям на сервере. Если параметр отчета не привязан к параметру запроса и значения параметра включены в отчет, пользователь отчета может ввести синтаксис выражения или URL-адрес в значение параметра и подготовить отчет для просмотра через Excel или HTML. Если затем другой пользователь при просмотре отчета щелкнет содержимое параметра, он может неумышленно выполнить вредоносный сценарий или перейти по ссылке. Чтобы снизить риск неумышленного выполнения вредоносного сценария, открывайте отчеты, готовые для просмотра, только из доверенных источников. Дополнительные сведения о защите отчетов см. в разделе Защита отчетов и ресурсов.

Создание запросов, связанных с многозначными параметрами отчета

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

  • Источниками данных должны быть SQL Server, Oracle или службы Analysis Services.
  • Источник данных не может быть хранимой процедурой. Службы Reporting Services не поддерживают передачу массива многозначного параметра в хранимую процедуру.
  • Запрос должен использовать предложение IN, чтобы указать параметр.

В следующем примере используется ключевое слово IN в предложении WHERE инструкции Transact-SQL. Дополнительные сведения о ключевом слове IN или результатах, возвращаемых этим запросом, см. в разделе IN (Transact-SQL).

SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
    JOIN Person.Contact AS c 
    ON e.ContactID = c.ContactID
WHERE e.Title IN (@Title)

Чтобы поэкспериментировать с этим в отчете, определите набор данных с помощью этого запроса. Измените свойства для автоматически создаваемого параметра отчета Title следующим образом.

  • Выберите параметр Многозначный.
  • В разделе «Доступные значения» выберите Без запроса. Введите следующий список в поле «Значение» (столбец Метка оставьте пустым): конструктор, покупатель, маркетолог.
  • В поле Значения по умолчанию введите покупатель.
  • Запустите предварительный просмотр. Выберите различные сочетания значений для параметра Title и убедитесь в том, что получаете ожидаемый результат.
Aa337292.note(ru-ru,SQL.90).gifПримечание.
Сервер отчетов переписывает запросы для источников данных, которые не могут обработать параметры как массив. Переписывание запроса необходимо, чтобы получить нужный результат. Переписывание запроса происходит, когда параметр определен как многозначный и запрос использует инструкцию IN, чтобы указать параметр. При создании запроса без инструкции IN обходится логика, которую сервер отчетов предоставляет для поддержки многозначных параметров.

Критерии фильтра для наборов данных, группирования данных и областей данных определяются на вкладке «Фильтр» страниц соответствующих свойств. Если определен критерий фильтра, который ссылается на многозначный параметр, необходимо использовать оператор IN в критерии фильтра. Использование в критериях фильтра операторов, отличных от IN, приводит к ошибкам обработки. Дополнительные сведения см. в разделе Как добавить фильтр (конструктор отчетов).

Создание выражений, ссылающихся на многозначные параметры

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

Пример Описание

Parameters!<ParameterName>.Value

Массив различных значений данных для параметра.

Parameters!<ParameterName>.Label

Массив строк, являющихся метками для параметра.

Parameters!<ParameterName>.IsMultiValue

Логическое свойство, которое указывает, было ли для параметра выбрано Многозначное значение.

Parameters!<ParameterName>.Count

Число значений в массиве.

Parameters!<ParameterName>.Value(0)

Первое значение в многозначном массиве.

Parameters!<ParameterName>.Label(0)

Первая метка в многозначном массиве.

Parameters!<ParameterName>.Value(Parameters! <ParameterName>.Count-1)

Последнее значение в многозначном массиве.

Parameters!<ParameterName>.Label(Parameters! <ParameterName>.Count-1)

Последняя метка в многозначном массиве.

=Join(Parameters!<ParameterName>.Value,", ")

Выражение, которое сцепляет в одну строку все значения в массиве многозначного параметра строкового типа.

=Split("Value1, Value2, Value3",",")

Принимает строку и создает массив объектов, который можно использовать, чтобы передать вложенный отчет или детализированный отчет, ожидающий многозначный параметр.

Можно использовать функции SPLIT и JOIN, чтобы разделить или объединить значения массива в любом выражении. Чтобы преобразовать значения в строки или целые числа, можно использовать функции STRING и CINT.

Дополнительные сведения и примеры однозначных и многозначных параметров в выражениях см. в разделе Использование параметров в выражениях.

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Измененное содержимое
  • Восстановление параметра «Выбрать все» в версии с пакетом обновления 2.

См. также

Задачи

Как добавить, редактировать или удалить параметр отчета (конструктор отчетов)

Основные понятия

Установка параметров для опубликованного отчета
Использование параметров в выражениях
Использование параметров в выражениях

Другие ресурсы

Учебник. Добавление параметров в простой табличный отчет
Учебник. Дополнительные возможности использования параметров
Параметры отчета (конструктор отчетов)

Справка и поддержка

Получение помощи по SQL Server 2005