次の方法で共有


特定のデータ ソースでのクエリ パラメーターの使用 (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 クエリ デザイナーのユーザー インターフェイス

グラフィカルなクエリ デザイナーのユーザー インターフェイス

SQL Server リレーショナル データベースからのレポート データセットの作成

Oracle データベースからのレポート データセットの作成