Поделиться через


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

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

В текстовых полях в области конструктора и однозначные, и многозначные параметры появляются как простые выражения, начинающиеся с символа @. Например, параметр с именем Store появляется как [@Store] Дополнительные сведения см. в разделе Основные сведения о простых и сложных выражениях (службы Reporting Services).

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

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

Примечание по безопасностиПримечание по безопасности

В любом отчете, содержащем параметры типа String, используйте список доступных значений (иначе называемый списком допустимых значений) и убедитесь, что у любого пользователя, запускающего отчеты, есть разрешение только на просмотр данных в отчете. При определении параметра типа String пользователю предоставляется текстовое поле, которое может содержать любое значение. Список допустимых значений ограничивает значения, которые могут быть введены. Если параметр отчета привязан к параметру запроса и не использует список допустимых значений, пользователь отчета может ввести в это текстовое поле команду на языке SQL и выполнить атаку встроенными командами SQL в отношении этого отчета и всего сервера. Наличие у этого пользователя достаточных разрешений для выполнения новой инструкции SQL может привести к нежелательным последствиям на сервере.

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

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

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

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

  • Источниками данных должны быть SQL Server, Oracle, службы Analysis Services, SAP BI NetWeaver или Hyperion Essbase.

  • Источник данных не может быть хранимой процедурой. Службы 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 и убедитесь в том, что получаете ожидаемый результат.

ПримечаниеПримечание

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

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

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

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

Пример

Описание

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,", ")

Выражение, объединяющее в одну строку все значения в массиве многозначного параметра типа String.

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

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

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

Дополнительные сведения и примеры однозначных и многозначных параметров в выражениях см. в разделе Использование в выражениях ссылок на коллекцию параметров (службы Reporting Services).

См. также

Задания

Справочник

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

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