次の方法で共有


特定のデータ ソースでのクエリ パラメータの使用 (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 クエリ デザイナでパラメータを定義する方法」を参照してください。

クエリを処理するたびに、各クエリの有効値を提供するデータセットが生成されます。