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


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

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

Переменные запроса и поставщики данных

В следующей таблице показаны результирующие данные из образца базы данных AdventureWorks. Этот результирующий набор можно получить, запустив запрос Transact-SQL в образце базы данных AdventureWorks или запрос многомерных выражений в кубе Adventure Works, развернутом как часть образца отчетов AdventureWorks. Результирующий набор содержит два столбца: названия моделей товаров, которые содержат слово «Mountain», и соответствующее число продаж через Интернет.

Название

Продажи через Интернет

Набор крыльев для велосипедов Mountain

2121

Шины для велосипеда HL Mountain

1396

Шины для велосипеда LL Mountain

862

Шины для велосипеда ML Mountain

1161

Держатель фляги для велосипеда Mountain

2025

Камера шины для велосипеда Mountain

3095

Велосипед Mountain-100

396

Велосипед Mountain-200

3552

Велосипед Mountain-400-W

543

Велосипед Mountain-500

479

Женские шорты Mountain

1019

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

Реляционные базы данных как источники данных

Для реляционной базы данных, такой как MicrosoftSQL Server, запросы можно создавать с помощью Transact-SQL. Хотя этот запрос ограничивает результаты за счет включения предложения WHERE, которое содержит жестко закодированное значение, этот запрос пока не имеет переменных.

Запрос Transact-SQL

SELECT PM.Name, Count(*) as InternetSales

FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD

ON SOH.SalesOrderID = SOD.SalesOrderID INNER JOIN

Production.Product PP

ON SOD.ProductID = PP.ProductID INNER JOIN

Production.ProductModel PM ON PP.ProductModelId = PM.ProductModelID

WHERE (SOH.OnLineOrderFlag = 1 AND PM.Name LIKE ('%Mountain%'))

GROUP BY PM.Name

ORDER BY PM.Name

Чтобы добавить переменную для названия модели товара, PM.Name, необходимо указать в запросе параметр в предложении WHERE. В следующей таблице показано, как указывать параметры запроса для разных поставщиков данных. Поставщик данных выбирается автоматически, когда выбирается тип источника данных. Строка соединения для данного поставщика данных показана во втором столбце. Запрос в этой таблице идентичен приведенному выше запросу за исключением того, что в него добавлен параметр в той форме, которая поддерживается этим поставщиком данных.

Тип источника данных

Поставщик данных

Запрос

MicrosoftSQL Server

MicrosoftSQL Server (SqlClient)

Строка соединения:

Data Source=.;Initial Catalog=AdventureWorks

SELECT PM.Name, Count(*)

FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD

ON SOH.SalesOrderID = SOD.SalesOrderID INNER JOIN

Production.Product PP

ON SOD.ProductID = PP.ProductID INNER JOIN

Production.ProductModel PM ON PP.ProductModelId = PM.ProductModelID

WHERE (SOH.OnLineOrderFlag = 1 AND (PM.Name LIKE '%' + @Mountain + '%'))

GROUP BY PM.Name

ORDER BY PM.Name

OLE DB

Поставщик Microsoft OLE DB для SQL Server

Строка соединения:

Provider=SQLOLEDB.1;Data Source=.;Initial Catalog=AdventureWorks

SELECT PM.Name, Count(*)

FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD

ON SOH.SalesOrderID = SOD.SalesOrderID INNER JOIN

Production.Product PP

ON SOD.ProductID = PP.ProductID INNER JOIN

Production.ProductModel PM ON PP.ProductModelId =

PM.ProductModelID

WHERE ((SOH.OnLineOrderFlag = 1) AND PM.Name LIKE

('%' + ? + '%'))

GROUP BY PM.Name

ORDER BY PM.Name

Oracle

MicrosoftSQL Server (OracleClient)

SELECT PM.Name, Count(*)

FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD

ON SOH.SalesOrderID = SOD.SalesOrderID INNER JOIN

Production.Product PP

ON SOD.ProductID = PP.ProductID INNER JOIN

Production.ProductModel PM ON PP.ProductModelId =

PM.ProductModelID

WHERE ((SOH.OnLineOrderFlag = 1) AND

PM.Name LIKE '%' + :1 + '%')

GROUP BY PM.Name

ORDER BY PM.Name

OLE DB

Любой зарегистрированный поставщик данных .NET Framework

Зависит от поставщика

В этих примерах в предложение WHERE запроса была добавлена переменная, заменяющая проверку наличия слова «Mountain» проверкой наличия значения переменной.

  • Поставщик данных .NET для SQL Server поддерживает именованные переменные, начинающиеся с символа @. Например, PM.Name LIKE '%' + @Mountain + '%').

  • Поставщик OLE DB для SQL Server не поддерживает именованные переменные. Для указания переменной используется знак вопроса (?). Параметры, передаваемые поставщику OLE DB, должны передаваться в том порядке, в каком они встречаются в предложении WHERE. Например, PM.Name LIKE ('%' + ? + '%').

  • Поставщик данных .NET для Oracle поддерживает обозначенные числами параметры, которые начинаются с символа двоеточия (:). Например, PM.Name LIKE '%' + :1 + '%').

  • Поддержка переменных другими поставщиками данных OLE DB определяется конкретным поставщиком. Дополнительные сведения можно найти в документации поставщика.

Конструктор запросов, связанный с типом источника данных, создает параметр запроса для каждой идентифицированной переменной. Эти параметры запросов перечислены на вкладке «Параметры» страниц свойств наборов данных. Для каждого параметра запроса создается параметр отчета типа String. Значения параметров запроса, определенные для набора данных, устанавливаются для соответствующих параметров отчета. Можно изменять тип данных параметра отчета и другие свойства в диалоговом окне «Свойства отчета», которое доступно в меню «Отчет», когда используется представление «Данные». Кроме того, можно создавать, изменять и удалять эти параметры запроса вручную. Дополнительные сведения см. в разделе Диалоговое окно «Свойства набора данных» — «Параметры».

Многомерные базы данных как источники данных

Для многомерной базы данных, такой как база данных служб Analysis Services, запросы можно создавать с помощью языка запросов многомерных выражений. Хотя этот запрос ограничивает результаты за счет включения предложения Filter, которое содержит жестко закодированное значение, он пока не имеет переменных.

Запрос многомерных выражений

SELECT NON EMPTY

{ [Measures].[Internet Order Count] } ON COLUMNS,

NON EMPTY {

([Product].[Model Name].[Model Name].ALLMEMBERS ) }

DIMENSION PROPERTIES

MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS

FROM (

SELECT (

Filter(

[Product].[Model Name].[Model Name].ALLMEMBERS,

Instr([Product].[Model Name].currentmember.Properties(

'Member_Caption' ),

'Mountain' ) > 0 )

) ON COLUMNS

FROM [Adventure Works])

CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR,

FORMATTED_VALUE, FORMAT_STRING,

FONT_NAME, FONT_SIZE, FONT_FLAGS

Чтобы добавить переменную для названия модели товара, @ProductModelName, необходимо добавить предложение FILTER. В следующей таблице показано, что для многомерных баз данных переменные являются частью предложения FILTER. Тип источника данных является значением, выбираемым из раскрывающегося списка при создании нового источника данных для служб Reporting Services. Поставщик данных выбирается автоматически, когда выбирается тип источника данных. Строка соединения для данного поставщика данных показана во втором столбце. Запрос в этой таблице идентичен приведенному выше запросу за исключением того, что в него добавлен параметр в той форме, которая поддерживается этим поставщиком данных.

Тип источника данных

Поставщик данных

Запрос

MicrosoftSQL ServerAnalysis Services

SQL ServerAnalysis Services (AdomdClient)

Строка соединения:

Data Source=.;Initial Catalog="Adventure Works DW"

SELECT NON EMPTY { [Measures].[Internet Order Count] } ON COLUMNS,

NON EMPTY { ([Product].[Model Name].[Model Name].ALLMEMBERS ) }

DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS

FROM ( SELECT (

Filter( [Product].[Model Name].[Model Name].ALLMEMBERS,

Instr( [Product].[Model Name].currentmember.Properties(

'Member_Caption' ), @ProductModelName ) > 0 ) )

ON COLUMNS

FROM [Adventure Works])

CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR,

FORMATTED_VALUE, FORMAT_STRING,

FONT_NAME, FONT_SIZE, FONT_FLAGS

OLE DB

Поставщик Microsoft OLE DB для служб Analysis Services 9.0

Строка соединения:

Provider=MSOLAP.3;Data Source=.;Initial Catalog="Adventure Works DW"

Поставщик OLE DB для OLAP не поддерживает параметризованные запросы.

Способы разрешения этой ситуации описаны в следующем техническом документе: «Интеграция служб Analysis Services и Reporting Services».

В этих примерах в предложение WHERE запроса была добавлена переменная, заменяющая проверку наличия слова «Mountain» проверкой наличия значения переменной.

  • Службы MicrosoftSQL ServerAnalysis Services поддерживают именованные параметры, определенные в разделе «Фильтр» конструктора запросов многомерных выражений. Именованные переменные начинаются с символа @. Например, @ProductModelName.

  • Поставщик Microsoft OLE DB для служб Analysis Services 9.0 не поддерживает параметризованные запросы. Дополнительные сведения см. в статье «Объединение служб Analysis Services и Reporting Services» на узле msdn.microsoft.com.

  • Поддержка переменных другими поставщиками многомерных данных определяется конкретным поставщиком. Дополнительные сведения можно найти в документации поставщика.

Конструктор запросов, связанный с типом источника данных, создает параметр запроса для каждой идентифицированной переменной. Специальный набор данных создается автоматически для обеспечения допустимых значений каждого параметра. Эти параметры запросов перечислены на вкладке «Параметры» страниц свойств наборов данных. Для каждого параметра запроса создается параметр отчета типа String. Значения параметров запроса, определенные для набора данных, устанавливаются для соответствующих параметров отчета. Кроме того, можно создавать, изменять и удалять эти параметры набора данных вручную. Дополнительные сведения см. в разделе Как определить параметры в конструкторе запросов многомерных выражений для служб Analysis Services.

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

См. также

Задания

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