特定のデータ ソースでのクエリ パラメーターの使用 (Reporting Services)
データセットに対するクエリを定義する場合は、データ ソースの種類を選択します。データ ソースの種類によって、データ ソースに接続するためのデータ処理拡張機能または登録済みの .NET Framework データ プロバイダーが指定されます。データ プロバイダーとは、データ ソースと情報のやり取りを行い、クエリで変数を使用する場合に利用できるサポートを特定するソフトウェア レイヤーです。このトピックでは、特定の結果セットに関して、接続先のデータ ソースに応じてクエリがどのように変わるかについて説明します。また、クエリに変数が含まれるかどうかについても説明します。
クエリ変数とデータ プロバイダー
次の表は、AdventureWorks2008R2 サンプル データベースから得られたデータの結果を示しています。この結果セットは、AdventureWorks2008R2 サンプル データベースに対して Transact-SQL クエリを実行するか、または AdventureWorks2008R2 サンプル レポートの一部として配置されている Adventure Works キューブに対して MDX クエリを実行することによって生成できます。この結果セットには、"Mountain" という単語が含まれている製品モデル名と、これに対応するインターネット販売数を表す 2 つの列があります。
名前 |
インターネット販売数 |
---|---|
Fender Set - Mountain |
2121 |
HL Mountain Tire |
1396 |
LL Mountain Tire |
862 |
ML Mountain Tire |
1161 |
Mountain Bottle Cage |
2025 |
Mountain Tire Tube |
3095 |
Mountain-100 |
396 |
Mountain-200 |
3552 |
Mountain-400-W |
543 |
Mountain-500 |
479 |
Women's Mountain Shorts |
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 句でクエリ パラメーターを指定する必要があります。次の表は、さまざまなデータ プロバイダーでクエリ パラメーターを指定する方法を示しています。データ プロバイダーは、データ ソースの種類を選択すると自動的に選択されます。このデータ プロバイダーの接続文字列は、左から 2 つ目の列に示されています。次の表のクエリは上記のクエリとほぼ同じですが、データ プロバイダーでサポートされている形式でパラメーターが追加されている点が異なります。
データ ソースの種類 |
データ プロバイダー |
クエリ |
---|---|---|
Microsoft SQL Server |
MicrosoftSQL Server (SqlClient) 接続文字列 : Data Source=.;Initial Catalog=AdventureWorks2008R2 |
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 Provider for SQL Server 接続文字列 : Provider=SQLOLEDB.1;Data Source=.;Initial Catalog=AdventureWorks2008R2 |
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" という単語に関するテストが、変数値に関するテストに変更されています。
SQL Server 用の .NET データ プロバイダーは、アット マーク (@) で始まる名前付き変数をサポートしています。たとえば、PM.Name LIKE '%' + @Mountain + '%') のように指定します。
SQL Server 用の OLE DB プロバイダーは、名前付き変数をサポートしていません。変数を指定するには、疑問符 (?) を使用します。OLE DB プロバイダーには、WHERE 句内と同じ順序でパラメーターを渡す必要があります。たとえば、PM.Name LIKE ('%' + ? + '%') のように指定します。
Oracle 用の .NET データ プロバイダーは、コロン (:) で始まる番号付きパラメーターをサポートしています。たとえば、PM.Name LIKE '%' + :1 + '%') のように指定します。
その他の OLE DB データ プロバイダーによる変数のサポートは、データ プロバイダーによって異なります。詳細については、データ プロバイダーのドキュメントを参照してください。
識別された各変数のクエリ パラメーターは、データ ソースの種類に関連付けられたクエリ デザイナーによって生成されます。これらのクエリ パラメーターは、データセット プロパティ ページの [パラメーター] タブに表示されます。すべてのクエリ パラメーターについて、String 型のレポート パラメーターが作成されます。データセットに対して定義されているクエリ パラメーター値は、対応するレポート パラメーターに設定されます。レポート パラメーターのデータ型やその他のプロパティは、[レポートのプロパティ] ダイアログ ボックスで編集できます。[レポートのプロパティ] ダイアログ ボックスには、データ ビューの [レポート] メニューからアクセスできます。これらのクエリ パラメーターは手動で作成、編集、または削除できます。 詳細については、「[パラメータ] ([データセットのプロパティ] ダイアログ ボックス)」を参照してください。
多次元データベース データ ソース
Analysis Services などの多次元データベースでは、MDX を使用してクエリを作成できます。このクエリでは、ハードコード値に設定された Filter 句を含めることによって結果を限定していますが、変数はまだクエリに含まれていません。
MDX クエリ |
---|
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 DW2008R2]) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS |
製品モデル名の変数 @ProductModelName を追加するには、Filter 句を追加する必要があります。次の表は、多次元データベースで、変数が Filter 句の一部であることを示しています。データ ソースの種類は、Reporting Services 用に新しいデータ ソースを作成するときにドロップダウン リストから選択します。データ プロバイダーは、データ ソースの種類を選択すると自動的に選択されます。このデータ プロバイダーの接続文字列は、左から 2 つ目の列に示されています。次の表のクエリは上記のクエリとほぼ同じですが、データ プロバイダーでサポートされている形式でパラメーターが追加されている点が異なります。
データ ソースの種類 |
データ プロバイダー |
クエリ |
---|---|---|
Microsoft SQL Server Analysis Services |
SQL ServerAnalysis Services (AdomdClient) 接続文字列 : Data Source=.;Initial Catalog="Adventure Works DW2008R2" |
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 DW2008R2]) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS |
OLE DB |
Microsoft OLE DB Provider for Analysis Services 9.0 接続文字列 : Provider=MSOLAP.3;Data Source=.;Initial Catalog="Adventure Works DW2008R2" |
OLE DB for OLAP は、パラメーター化クエリをサポートしていません。 対処方法については、ホワイト ペーパー「Analysis Services と Reporting Services の統合」を参照してください。 |
上記の例では、クエリの WHERE 句に変数が追加され、"Mountain" という単語に関するテストが、変数値に関するテストに変更されています。
MicrosoftSQL ServerAnalysis Services は、MDX クエリ デザイナーの [フィルター] セクションで定義された名前付きパラメーターをサポートしています。名前付き変数は、アット マーク (@) で始まります。たとえば、@ProductModelName のように指定します。
Microsoft OLE DB Provider for Analysis Services 9.0 は、パラメーター化クエリをサポートしていません。詳細については、msdn.microsoft.com の「Integrating Analysis Services with Reporting Services」を参照してください。
その他の多次元データ プロバイダーによる変数のサポートは、データ プロバイダーによって異なります。詳細については、データ プロバイダーのドキュメントを参照してください。
識別された各変数のクエリ パラメーターは、データ ソースの種類に関連付けられたクエリ デザイナーによって生成されます。各パラメーターの有効値を提供する特別なデータセットが自動的に生成されます。これらのクエリ パラメーターは、データセット プロパティ ページの [パラメーター] タブに表示されます。すべてのクエリ パラメーターについて、String 型のレポート パラメーターが作成されます。データセットに対して定義されているクエリ パラメーター値は、対応するレポート パラメーターに設定されます。これらのデータセット パラメーターは手動で作成、編集、または削除できます。詳細については、「Analysis Services の MDX クエリ デザイナでパラメータを定義する方法」を参照してください。
クエリを処理するたびに、各クエリの有効値を提供するデータセットが生成されます。
関連項目
タスク
概念
Analysis Services データセットに対する拡張フィールド プロパティの使用
デザイン モードでの Analysis Services MDX クエリ デザイナの使用 (Reporting Services)
クエリ モードでの Analysis Services MDX クエリ デザイナの使用 (Reporting Services)
Analysis Services の MDX クエリ デザイナーのユーザー インターフェイス
グラフィカルなクエリ デザイナーのユーザー インターフェイス