Использование параметров запросов с конкретными источниками данных (службы 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.
Наборы данных, обеспечивающие допустимые значения для каждого запроса, создаются при обработке запроса.
См. также