特定のデータ ソースでのクエリ パラメータの使用 (Reporting Services)
データセットに対するクエリを定義する場合は、データ ソースの種類を選択します。データ ソースの種類によって、データ ソースに接続するためのデータ処理拡張機能または登録済みの .NET Framework データ プロバイダが指定されます。データ プロバイダとは、データ ソースと情報のやり取りを行い、クエリで変数を使用する場合に利用できるサポートを特定するソフトウェア レイヤです。このトピックでは、特定の結果セットに関して、接続先のデータ ソースに応じてクエリがどのように変わるかについて説明します。また、クエリに変数が含まれるかどうかについても説明します。
クエリ変数とデータ プロバイダ
次の表は、AdventureWorks サンプル データベースから得られたデータの結果を示しています。この結果セットは、AdventureWorks サンプル データベースに対して Transact-SQL クエリを実行するか、または AdventureWorks サンプル レポートの一部として配置されている 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 つ目の列に示されています。次の表のクエリは上記のクエリとほぼ同じですが、データ プロバイダでサポートされている形式でパラメータが追加されている点が異なります。
データ ソースの種類 |
データ プロバイダ |
クエリ |
---|---|---|
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 Provider for 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" という単語に関するテストが、変数値に関するテストに変更されています。
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]) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS |
製品モデル名の変数 @ProductModelName を追加するには、Filter 句を追加する必要があります。次の表は、多次元データベースで、変数が Filter 句の一部であることを示しています。データ ソースの種類は、Reporting Services 用に新しいデータ ソースを作成するときにドロップダウン リストから選択します。データ プロバイダは、データ ソースの種類を選択すると自動的に選択されます。このデータ プロバイダの接続文字列は、左から 2 つ目の列に示されています。次の表のクエリは上記のクエリとほぼ同じですが、データ プロバイダでサポートされている形式でパラメータが追加されている点が異なります。
データ ソースの種類 |
データ プロバイダ |
クエリ |
---|---|---|
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 Provider for Analysis Services 9.0 接続文字列 : Provider=MSOLAP.3;Data Source=.;Initial Catalog="Adventure Works DW" |
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 クエリ デザイナでパラメータを定義する方法」を参照してください。
クエリを処理するたびに、各クエリの有効値を提供するデータセットが生成されます。
関連項目