Использование однозначных и многозначных параметров (построитель отчетов 2.0)
Параметры бывают однозначными и многозначными. Для многозначного параметра можно задать более одного значения. Если для многозначного параметра определить список доступных значений, в раскрывающемся списке панели инструментов отчета автоматически появляется параметр «Выбрать все». Этот параметр можно использовать, чтобы выделить все значения в списке или снять выделение.
В текстовых полях в области конструктора и однозначные, и многозначные параметры появляются как простые выражения, начинающиеся с символа @. Например, параметр с именем Store появляется как [@Store] Дополнительные сведения см. в разделе Основные сведения о простых и сложных выражениях (построитель отчетов 2.0).
Чтобы установить для параметра свойство многозначности, выберите в диалоговом окне Свойства параметров отчета параметр Разрешить несколько значений. Для многозначного параметра можно установить любой тип, кроме Boolean.
В основном многозначные параметры используются в предложениях ограничения запроса, например в предложении WHERE языка Transact-SQL или предложении фильтра многомерного выражения, если необходимо проверить вхождение в набор значений, а не равенство единственному значению. Дополнительные сведения о создании многозначных параметров см. в разделах Учебник. Добавление параметров для фильтрации данных отчета (построитель отчетов 2.0) и Создание параметров отчета и настройка свойств параметров отчета (построитель отчетов 2.0).
Примечание по безопасности |
---|
В любом отчете, содержащем параметры типа String, используйте список доступных значений (иначе называемый списком допустимых значений) и убедитесь, что у любого пользователя, запускающего отчеты, есть разрешение только на просмотр данных в отчете. При определении параметра типа String пользователю предоставляется текстовое поле, которое может содержать любое значение. Список допустимых значений ограничивает значения, которые могут быть введены. Если параметр отчета привязан к параметру запроса и не использует список допустимых значений, пользователь отчета может ввести в это текстовое поле команду на языке SQL и выполнить атаку встроенными командами SQL в отношении этого отчета и всего сервера. Наличие у этого пользователя достаточных разрешений для выполнения новой инструкции SQL может привести к нежелательным последствиям на сервере. Если параметр отчета не привязан к параметру запроса и значения параметра включены в отчет, пользователь отчета может ввести синтаксис выражения или URL-адрес в значение параметра и подготовить отчет для просмотра через Excel или HTML. Если затем другой пользователь при просмотре отчета щелкнет этот параметр, он может неумышленно выполнить вредоносный сценарий или перейти по ссылке. Чтобы снизить риск неумышленного запуска вредоносных сценариев, открывайте отчеты, подготовленные к просмотру, только из проверенных источников. Дополнительные сведения о том, как защищать отчеты, см. в разделе «Обеспечение безопасности отчетов и ресурсов» в службы Reporting Services электронной документации по SQL Server. |
Написание запросов для многозначных параметров отчета
Любой создаваемый параметр отчета можно определить многозначным. Однако, если с помощью запроса нужно вернуть в источник данных значения многозначного параметра, должны быть выполнены следующие требования.
Источниками данных должны быть SQL Server, Oracle, службы Analysis Services, SAP BI NetWeaver или Hyperion Essbase.
Источник данных не может быть хранимой процедурой. Службы Reporting Services не поддерживают передачу массива многозначного параметра в хранимую процедуру.
Запрос должен использовать предложение IN, чтобы указать параметр.
В следующем примере используется ключевое слово IN в предложении WHERE инструкции Transact-SQL. Дополнительные сведения о ключевом слове IN и результатах, возвращаемых этим запросом, см. в разделе «IN (Transact-SQL)» в документации по SQL Server 2008 в электронной документации по SQL Server.
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, приводит к ошибкам обработки. Дополнительные сведения см. в разделе Как добавить фильтр (построитель отчетов 2.0).
Создание выражений, ссылающихся на многозначные параметры
Если в выражении существует ссылка на параметр, то используется встроенная коллекция 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.
Дополнительные сведения и примеры однозначных и многозначных параметров в выражениях см. в разделе Использование в выражениях ссылок на коллекцию параметров (построитель отчетов 2.0).
См. также