レッスン 2 : レポートへのカスケード型パラメータの追加
新規 : 2006 年 7 月 17 日
カスケード型パラメータを使用すると、自然階層リレーションシップにあるパラメータのセットの中で、パラメータごとに可能な値をフィルタ選択できます。たとえば AdventureWorks データベースの場合、各販売代理店には、都市内のある場所の住所 (City フィールド) が割り当てられています。これらの都市は都道府県 (StateProvince フィールド) としてグループ化され、都道府県は国または地域 (CountryRegion フィールド) としてグループ化されます。さらに、国または地域は販売区域 (TerritoryGroup フィールド) としてグループ化されます。これらのフィールドに対して、依存関係の順に一番広範なカテゴリ TerritoryGroup から一番限定的なカテゴリ City まで、4 つのカスケード型パラメータを作成できます。
レポート ツール バーにカスケード型パラメータが表示されている場合、レポート ユーザーが最初のパラメータに値を指定すると、その値に応じて次のパラメータの可能な値が決まります。このようにすると、それぞれのカスケード型パラメータで、何千もの選択肢を対応できる数まで絞り込むことができます。
カスケード型パラメータは順序が決まっており、レポート デザイナでレポート パラメータを表示すると、パラメータ ペインにはパラメータの一覧が順序に従って表示されます。一覧の先頭のパラメータは、他のどのパラメータにも依存しません。一覧の次のパラメータは、カスケード型パラメータとして指定されている場合、その前のパラメータに依存します。レポート パラメータのダイアログ ボックスで上下方向の矢印ボタンを使用すると、パラメータの順序を変更できます。
このレッスンでは、前のチュートリアルで作成した Sales Orders レポートに、4 つのカスケード型パラメータ (TerritoryGroup、CountryRegion、StateProvince、City) を追加します。各パラメータにはデータセットを作成して、可能な値の一覧を定義します。クエリ パラメータを使って、可能な値のデータセットを取得するクエリを作成すると、レポート パラメータが自動的に生成されます。ここでは、最も広範な TerritoryGroup フィールドから最も限定的な Cities フィールドまでを基に有効値一覧のデータセットを作成するので、作成するレポート パラメータは正しい依存関係の順序に従ったものとなります。有効な値の最後のデータセット (Cities) については、手動でレポート パラメータを生成し、対応するクエリ パラメータに関連付ける方法を学習します。
データセットをすべて作成したら、各レポート パラメータの既定のプロパティを変更し、有効な値と既定値に適切なデータセットとフィールドが含まれるようにします。
最後に、元のデータセット クエリを変更し、各レポート パラメータに対応するクエリ パラメータを含めます。レポートの実行時には、各カスケード型パラメータの値を順番に選択します。最初のパラメータで値を選択すると、そのパラメータ値に対して有効な値のみがその次のパラメータ一覧に表示されます。
手順
ResellersWorldwide レポートを開くには
SQL Server Business Intelligence Development Studio で、前のレッスンで作成した AdvancedParametersTutorial レポート サーバー プロジェクトを開きます。
ソリューション エクスプローラで、Resellers Worldwide レポートをダブルクリックします。レポートが [レイアウト] ビューに表示されます。
[データ] タブをクリックします。
TerritoryGroup パラメータの有効値のデータセットを追加するには
[データセット] の一覧で、[<新しいデータセット>] をクリックします。[データセット] ダイアログ ボックスが表示されます。
[クエリ] タブで、[名前] ボックスに「ValidValuesforTerritoryGroup」と入力します。
[データソース] が [Resellers] になっていることを確認します。
[コマンドの種類] が [Text] になっていることを確認します。
次のクエリをクエリ ペインに貼り付けます。
SELECT distinct [Group] as SalesTerritory FROM [AdventureWorks].[Sales].[SalesTerritory]
[実行] (!) をクリックして、結果セットを表示します。列 SalesTerritory に、Europe、North America、Pacific の 3 つの行が表示されます。
CountryRegion パラメータの有効値のデータセットを追加するには
[データセット] の一覧で、[<新しいデータセット>] をクリックします。[データセット] ダイアログ ボックスが表示されます。
[クエリ] タブで、[名前] ボックスに「ValidValuesforCountryRegion」と入力します。
[データソース] が [Resellers] になっていることを確認します。
[コマンドの種類] が [Text] になっていることを確認します。
次のクエリをクエリ ペインに貼り付けます。
SELECT Distinct CR.Name AS CountryRegion FROM Sales.Store AS S JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID JOIN Person.Address AS A ON A.AddressID = CA.AddressID JOIN Person.StateProvince SP ON SP.StateProvinceID = A.StateProvinceID JOIN Person.CountryRegion CR ON CR.CountryRegionCode = SP.CountryRegionCode JOIN Sales.Customer C on S.CustomerID = C.CustomerID JOIN Sales.SalesTerritory T on C.TerritoryID = T.TerritoryID WHERE (T.[Group] = (@TerritoryGroup)) Order by CR.Name
[実行] (!) をクリックします。[クエリ パラメータの定義] ダイアログ ボックスが表示されます。
「Pacific」と入力します。
結果セットでは、列 CountryRegion に Australia という 1 行が表示されます。
@TerritoryGroup というクエリ パラメータを定義すると、TerritoryGroup という新しいレポート パラメータが作成されます。
(省略可) [データセット] の一覧の横にある [選択したデータセットの編集] ([…]) ボタンをクリックし、[パラメータ] タブをクリックします。クエリ パラメータ @TerritoryGroup がレポート パラメータ TerritoryGroup の値 (
=Parameters!TerritoryGroup.Value
) にバインドされていることを確認します。
StateProvince パラメータの有効値のデータセットを追加するには
[データセット] の一覧で、[<新しいデータセット>] をクリックします。[データセット] ダイアログ ボックスが表示されます。
[クエリ] タブで、[名前] ボックスに「ValidValuesforStateProvince」と入力します。
[データソース] が [Resellers] になっていることを確認します。
[コマンドの種類] が [Text] になっていることを確認します。
次のクエリをクエリ ペインに貼り付けます。
SELECT Distinct SP.Name AS StateProvince FROM Sales.Store AS S JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID JOIN Person.Address AS A ON A.AddressID = CA.AddressID JOIN Person.StateProvince SP ON SP.StateProvinceID = A.StateProvinceID JOIN Person.CountryRegion CR ON CR.CountryRegionCode = SP.CountryRegionCode WHERE (CR.Name = @CountryRegion) Order by SP.Name
[実行] (!) をクリックして、結果セットを表示します。[クエリ パラメータの定義] ダイアログ ボックスが表示されます。
[パラメータ値] ボックスに「Australia」と入力し、[OK] をクリックします。
StateProvince 列に、New South Wales、Queensland、South Australia、Victoria の 4 つの行が表示されます。
City パラメータの有効値のデータセットを追加するには
[データセット] の一覧で、[<新しいデータセット>] をクリックします。[データセット] ダイアログ ボックスが表示されます。
[クエリ] タブで、[名前] ボックスに「ValidValuesforCity」と入力します。
[データソース] が [Resellers] になっていることを確認します。
[コマンドの種類] が [Text] になっていることを確認します。
次のクエリをクエリ ペインに貼り付けます。
SELECT Distinct A.City FROM Sales.Store AS S JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID JOIN Person.Address AS A ON A.AddressID = CA.AddressID JOIN Person.StateProvince SP ON SP.StateProvinceID = A.StateProvinceID JOIN Person.CountryRegion CR ON CR.CountryRegionCode = SP.CountryRegionCode JOIN Sales.Customer C on S.CustomerID = C.CustomerID JOIN Sales.SalesTerritory T on C.TerritoryID = T.TerritoryID WHERE ( T.[Group] = (@TerritoryGroup) AND CR.[Name] = (@CountryRegion) AND SP.[Name] = (@StateProvince) ) Order by A.City
[実行] (!) をクリックして、結果セットを表示します。[クエリ パラメータの定義] ダイアログ ボックスが表示されます。
次の表を参照して、[パラメータ値] ボックスに各クエリ パラメータの値を入力します。
パラメータ名 | パラメータ値 |
---|---|
@TerritoryGroup |
Pacific |
@CountryRegion |
Australia |
@StateProvince |
Victoria |
- [OK] をクリックします。
City 列に、Melbourne、Seaford、South Melbourne の 3 つの行が表示されます。
これで、4 つのカスケード型パラメータを作成できました。次は、クエリ パラメータに対応して作成されたレポート パラメータのプロパティを編集します。ここでは、適切なデータセットを使用して有効値セットを取得するように各パラメータを設定します。
TerritoryGroup レポート パラメータの有効値を設定するには
[レポート] メニューの [レポート パラメータ] をクリックします。[レポート パラメータ] ダイアログ ボックスが開きます。このダイアログ ボックスの [パラメータ] ペインでは TerritoryGroup が選択されています。
[データ型] が String であることを確認します。
[表示名] ボックスに「販売区域を選択してください : 」と入力します。
チェック ボックスがすべてオフになっていることを確認します。
[使用できる値] で、[クエリにより取得] を選択します。
[データセット] の一覧で、[ValidValuesforTerritoryGroup] を選択します。
[値フィールド] の一覧で、[SalesTerritory] を選択します。
[ラベル フィールド] の一覧で、[SalesTerritory] を選択します。
[既定値] で [クエリなし] を選択し、
テキスト ボックスに「North America」と入力します。
既定値は、特定の値またはデータセット フィールドの既定値に設定できます。このパラメータのデータ型は String なので、テキスト ボックスに値を直接入力できます。他のデータ型の場合は、等号 (=) で始まる式を入力します。
[OK] をクリックします。
(省略可) [プレビュー] タブをクリックします。TerritoryGroup パラメータが表示され、既定値 Europe と、ValidValuesforTerritoryGroup データセットで取得した SalesTerritory フィールドの有効な値が表示されます。
レポート データは、このレッスンの最後に Resellers データセット クエリを変更するまで変わりません。
CountryRegion レポート パラメータの有効値を設定するには
[レポート] メニューの [レポート パラメータ] をクリックします。[レポート パラメータ] ダイアログ ボックスが表示されます。
[パラメータ] ペインで、[CountryRegion] を選択します。
[データ型] が String であることを確認します。
[表示名] ボックスに「国または地域を選択してください : 」と入力します。
チェック ボックスがすべてオフになっていることを確認します。
[使用できる値] で、[クエリにより取得] を選択します。
[データセット] の一覧で、[ValidValuesforCountryRegion] を選択します。
[値フィールド] の一覧で、[CountryRegion] を選択します。
[ラベル フィールド] の一覧で、[CountryRegion] を選択します。
[既定値] で、[クエリにより取得] を選択します。
[データセット] の一覧で、[ValidValuesforCountryRegion] を選択します。
[値フィールド] の一覧で、[CountryRegion] を選択します。
[OK] をクリックします。
(省略可) [プレビュー] タブをクリックします。TerritoryGroup の値を選択し、CountryRegion パラメータの値を選択します。CountryRegion に表示される値が、選択した販売区域グループに有効な値であることを確認します。
StateProvince レポート パラメータの有効値を設定するには
[レポート] メニューの [レポート パラメータ] をクリックします。[レポート パラメータ] ダイアログ ボックスが表示されます。
[パラメータ] ペインで [StateProvince] を選択します。
[データ型] が String であることを確認します。
[表示名] ボックスに「都道府県を選択してください : 」と入力します。
チェック ボックスがすべてオフになっていることを確認します。
[使用できる値] で、[クエリにより取得] を選択します。
[データセット] の一覧で、[ValidValuesforStateProvince] を選択します。
[値フィールド] の一覧で、[StateProvince] を選択します。
[ラベル フィールド] の一覧で、[StateProvince] を選択します。
[既定値] で、[クエリにより取得] を選択します。
[データセット] の一覧で、[ValidValuesforStateProvince] を選択します。
[値フィールド] の一覧で、[StateProvince] を選択します。
[OK] をクリックします。
(省略可) [プレビュー] タブをクリックします。TerritoryGroup の値を選択し、CountryRegion パラメータの値を選択して、StateProvince パラメータの値を選択します。StateProvince に表示される値が、選択した TerritoryGroup と CountryRegion に有効な値であることを確認します。
City レポート パラメータを作成し、そのプロパティを設定するには
[レポート] メニューの [レポート パラメータ] をクリックします。[レポート パラメータ] ダイアログ ボックスが表示されます。
[パラメータ] ペインに、City という名前のレポート パラメータは表示されません。
レポート パラメータは、パラメータを含むクエリをデータセットに対して定義したときに自動的に作成されますが、これまで作成したデータセット クエリはいずれも @City クエリ パラメータを含んでいません。City という名前のレポート パラメータを作成しておくこともできます。@City クエリ パラメータを含むクエリを定義すると、このクエリ パラメータの名前からクエリ パラメータ識別子 "@" を除いた名前のレポート パラメータがあれば、クエリ パラメータとレポート パラメータは自動的にバインドされます。
[追加] をクリックします。レポート パラメータが作成され、既定のプロパティが設定されます。
[プロパティ] の [名前] ボックスに、「City」と入力します。
[データ型] が String であることを確認します。
[表示名] ボックスに「都市を選択してください : 」と入力します。
チェック ボックスがすべてオフになっていることを確認します。
[使用できる値] で、[クエリにより取得] を選択します。
[データセット] の一覧で、[ValidValuesforCity] を選択します。
[値フィールド] の一覧で、[City] を選択します。
[ラベル フィールド] の一覧で、[City] を選択します。
[既定値] セクションで [クエリにより取得] を選択します。
[データセット] の一覧で、[ValidValuesforCity] を選択します。
[値フィールド] の一覧で、[City] を選択します。
[OK] をクリックします。
(省略可) [プレビュー] タブをクリックし、TerritoryGroup、CountryRegion、StateProvince の各パラメータに値を選択します。City に表示されるパラメータ値が、選択した他の値に対して有効であることを確認します。
ここまでで、カスケード型パラメータの値を作成できました。次は、これらの値をテーブル データ領域に対するデータセット クエリに含める必要があります。こうすると、選択したパラメータを含むクエリによってテーブル データが取得されるようになります。
reseller salesorders データセットのクエリを変更して、既存のクエリ パラメータを含めるには
[データ] ビューで、[データセット] の一覧から [Resellers] を選択します。クエリ ペインに、前のレッスンで作成したクエリ文字列が表示されます。
クエリ ペインの文字列を次のクエリに置き換えます。
SELECT S.CustomerID, SO.SalesOrderNumber, SO.OrderDate, SO.TotalDue, S.Name AS Store, A.City, SP.Name AS State, CR.Name AS CountryRegion, SC.ContactID As StoreContactID, T.[Group] As TerritoryGroup FROM Sales.Store AS S JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID JOIN Person.Address AS A ON A.AddressID = CA.AddressID JOIN Person.StateProvince SP ON SP.StateProvinceID = A.StateProvinceID JOIN Person.CountryRegion CR ON CR.CountryRegionCode = SP.CountryRegionCode JOIN Sales.SalesOrderHeader AS SO ON S.CustomerID = SO.CustomerID JOIN Sales.StoreContact SC ON S.CustomerID = SC.CustomerID JOIN Sales.Customer C on S.CustomerID = C.CustomerID JOIN Sales.SalesTerritory T on C.TerritoryID = T.TerritoryID WHERE( (T.[Group] = (@TerritoryGroup)) AND (CR.Name = (@CountryRegion)) AND (SP.Name = (@StateProvince)) AND (A.City = (@City)) ) ORDER BY S.CustomerID
これで、レポート パラメータの値を使用するクエリ パラメータがクエリに追加されました。
[実行] (!) をクリックして、結果セットを表示します。[クエリ パラメータの定義] ダイアログ ボックスが表示されます。
次の表を参照して、[パラメータ値] 列に各クエリ パラメータの値を入力します。
パラメータ名 | パラメータ値 |
---|---|
@TerritoryGroup |
Pacific |
@CountryRegion |
Australia |
@StateProvince |
Victoria |
@City |
Melbourne |
- [OK] をクリックします。
結果セットには、メルボルンにある販売代理店の販売データが表示されます。
Resellers データセット用のクエリ定義にクエリ パラメータを追加すると、そのクエリ パラメータの値には対応するレポート パラメータの値が自動的に設定されます。 - (省略可) [データセット] の一覧の横にある [選択したデータセットの編集] ([…]) ボタンをクリックし、[パラメータ] タブをクリックします。クエリ パラメータ @TerritoryGroup、@CountryRegion、@StateProvince、@City が、それぞれ対応するレポート パラメータの値にバインドされていることを確認します。
NoRows の値を設定するには
[レイアウト] タブをクリックして [レイアウト] ビューに切り替えます。
テーブル内をクリックして、テーブル ハンドルを表示します。テーブルのコーナー ハンドルをクリックしてテーブルを選択します。テーブルの外枠がグレー表示になります。
[プロパティ] ウィンドウで [NoRows] プロパティを探し、横にあるテキスト ボックスに次のテキストを貼り付けます。
この地域に販売代理店はありません
メイン レポート タイトルとパラメータ値のテキスト ボックスを作成するには
[レイアウト] タブをクリックして [レイアウト] ビューに切り替えます。
レポート処理のタイムスタンプを含むテキスト ボックスを右クリックし、[式] をクリックします。
[値] ボックスの横にある [Fx] (式) ボタンをクリックします。[式の編集] ダイアログ ボックスが表示されるので、タイムスタンプの式を次の式に置き換えます。
="Report Processed Date: " & Globals!ExecutionTime.ToShortDateString() & " " & Globals!ExecutionTime.ToShortTimeString() & vbCrLf & "Sales Territory for: " & Parameters!TerritoryGroup.Value & ", " & Parameters!CountryRegion.Value & ", " & Parameters!StateProvince.Value & ", " & Parameters!City.Value
[プレビュー] をクリックし、さまざまなパラメータ値を選択してみます。パラメータを順に選択し、前のパラメータで選択した値に対して可能な値だけが、次のパラメータの値一覧に表示されることを確認してください。新しいパラメータを選択しても、レポート データは変わりません。新しく選択したパラメータでレポートを再実行するには、[レポートの表示] をクリックします。
次の手順
ここでは、カスケード型パラメータを使って、販売代理店の販売データを地域ごとに表示するレポートを作成しました。次のレッスンでは、テーブルの詳細行とテーブル グループのソート方法を変更するパラメータの使用について学習します。「レッスン 3 : パラメータを使った、初期の並べ替え方法と対話型の並べ替え方法の変更」を参照してください。
参照
その他の技術情報
Reporting Services でのパラメータを使用した作業
パラメータを使用したレポート データの制御