レッスン 3 : 複数の値を一覧で選択するためのパラメータの追加
このレッスンでは、BusinessPersonID パラメータと DayoftheWeek パラメータを変更し、単一値ではなく複数値をとるようにします。複数値をとるパラメータを使用すると、レポート パラメータに複数の値を選択できるようになります。ここではレポート パラメータ BusinessPersonID を変更するために、AdventureWorks2008 データセットに対するクエリを変更し、@BusinessPersonID を単一値に対してではなく選択された値集合の中で評価されるように、そのレポート パラメータの複数値プロパティを設定します。さらに、DayoftheWeek レポート パラメータを変更するため、複数値をとるプロパティを確認し、新しいデータセットから可能な値を複数取得して設定します。また、既定値を定義する式を指定します。さらに、DayoftheWeek パラメータに可能な値を提供する新しいデータセットを作成します。最後に、レポートにテキスト ボックスを追加して、DayoftheWeek で選択したパラメータの値が表示されるようにします。
既存のデータセットを置き換えるには
レポート データ ペインで AdventureWorksDataset というデータセットを右クリックし、[データセットのプロパティ] をクリックします。
[データ ソース] で AdventureWorks_Ref が選択されていることを確認します。
[クエリの種類] で [テキスト] が選択されていることを確認します。
[クエリ デザイナ] ボタンをクリックして、クエリ デザイナを開きます。
テキスト ボックスのテキストを次のクエリで置き換えます。
SELECT soh.OrderDate AS [Date], DATENAME(weekday, soh.OrderDate) as Weekday, soh.SalesOrderNumber AS [Order], pps.Name AS Subcat, pp.Name as Product, SUM(sd.OrderQty) AS Qty, SUM(sd.LineTotal) AS LineTotal FROM Sales.SalesPerson sp INNER JOIN Sales.SalesOrderHeader AS soh ON sp.BusinessEntityID = soh.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS sd ON sd.SalesOrderID = soh.SalesOrderID INNER JOIN Production.Product AS pp ON sd.ProductID = pp.ProductID INNER JOIN Production.ProductSubcategory AS pps ON pp.ProductSubcategoryID = pps.ProductSubcategoryID INNER JOIN Production.ProductCategory AS ppc ON ppc.ProductCategoryID = pps.ProductCategoryID GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, pps.Name, pp.Name, soh.SalesPersonID HAVING ppc.Name = 'Clothing' AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate)) AND soh.SalesPersonID IN (@BusinessPersonID)
これは、次のように条件が等式から包含に変更された他は、以前のクエリと同じです。
AND soh.SalesPersonID IN (@BusinessPersonID)
[実行] (!) ボタンをクリックします。クエリ パラメータの入力画面が表示されたら、次の表にある値を入力します。クエリ デザイナでは、複数値をとるパラメータを評価することはできません。
@StartDate
20010101
@EndDate
20030101
@BusinessPersonID
290
[OK] をクリックします。
BusinessPersonID = 290 の販売担当者 Ranjit Varkey Chudakatil の結果セットが表示されます。
BusinessPersonID レポート パラメータを複数値をとるように編集するには
レポート データ ペインで、[パラメータ] を展開し、BusinessPersonID パラメータをダブルクリックします。
[複数の値を許可] オプションを選択します。
[OK] をクリックします。
[プレビュー] をクリックします。レポートは自動的に実行されます。BusinessPersonID ボックスの一覧にすべての営業担当者名が表示されます。
注意 |
---|
複数値をとるパラメータの可能な値の一覧には、先頭に [(すべて選択)] という値が表示されます。すべての値を選択または選択解除するにはこのチェック ボックスを使用します。既定では、すべての値が選択されています。 |
レポート パラメータの有効な値として新しいデータセットを追加するには
デザイン ビューに切り替えます。
レポート データ ペインで AdventureWorks_Ref を右クリックし、[データセットの追加] をクリックします。[データセットのプロパティ] ダイアログ ボックスが表示されます。
"名前" フィールドに、「WeekDaysfromQuery」と入力します。
[クエリの種類] で [テキスト] が選択されていることを確認します。
[クエリ] で、次のクエリ文字列を入力するか貼り付けます。
SET DATEFIRST 1; SELECT DISTINCT DATEPART(weekday, S.OrderDate) as WeekDayNumber, DATENAME(weekday, S.OrderDate) as Weekday FROM Sales.SalesOrderHeader S Order by WeekDayNumber
クエリ デザイナのツール バーの [実行]([!]) ボタンをクリックします。結果セットに番号と曜日が表示されます。
[OK] を 2 度クリックして [データベースのプロパティ] ダイアログ ボックスを閉じます。
WeekDaysfromQuery データセットがレポート データ ペインに表示されます。
複数値、既定値、および有効な値をとるようにパラメータを編集するには
レポート データ ペインで、[パラメータ] を展開し、DayoftheWeek をダブルクリックします。[レポート パラメータのプロパティ] ダイアログ ボックスが表示されます。
[複数の値を許可] を選択します。
[使用できる値] をクリックします。
[クエリから値を取得] を選択します。
[データセット] ボックスの一覧から、[WeekDaysfromQuery] を選択します。
[値フィールド] ボックスの一覧から [Weekday] を選択します。
[ラベル フィールド] ボックスの一覧から [Weekday] を選択します。
[既定値] をクリックします。
[値の指定] を選択します。
(省略可能) 既存の値 "金曜日" を選択し、[削除] をクリックします。
[追加] をクリックします。
[値] の中で「土曜日」と入力します。
[追加] をクリックします。
[値] の中で「日曜日」と入力します。
[OK] をクリックします。
DayoftheWeek パラメータが複数値をとるようになったため、レポートをプレビューする前に、表のデータ領域に対して定義されているフィルタ式を変更し、IN 演算子を使用するよう指定する必要があります。
複数値パラメータを使用するようにフィルタを変更するには
[デザイン] ビューで、表を右クリックし、[Tablix のプロパティ] をクリックします。[Tablix のプロパティ] ダイアログ ボックスが表示されます。
[フィルタ] をクリックします。DaysoftheWeek には、既にレッスン 1 で追加したフィルタがあります。
[式] ボックスの一覧で、値が [Weekday] となっていることを確認します。
[テキスト] が選択されていることを確認します。
[演算子] を、等号 (=) から [In] 演算子に変更します。
[値] ボックスの一覧で、値が [@DayoftheWeek] となっていることを確認します。
[OK] をクリックします。
これで表のフィルタは、Weekday フィールドの値と DayoftheWeek パラメータの値が In 演算子を使って比較されるように設定されました。レポート パラメータで複数の値を選択すると、フィルタ処理により表の各行が評価され、Weekday フィールドの値が DayoftheWeek コレクション内に存在するかどうかが確認されます。
[プレビュー] をクリックします。レポートに、DaysoftheWeek レポート パラメータが既定値 "土曜日" および "日曜日" と共に表示されます。ドロップダウン リストを使って DayoftheWeek パラメータの複数の値を選択します。
次の手順
ここでは、レポート パラメータのプロパティを変更し、単一値ではなく複数値をとるようにしました。また、クエリ、フィルタ、式に変更を加え、複数値をとるパラメータのコレクションを使用するようにしました。複数値をとるパラメータを式の中で使用する方法がわかったところで、次に、前のパラメータで選択された値に基づいて値が決まる条件依存パラメータの作成方法を学習します。「レッスン 4 : カスケード型パラメータの追加」を参照してください。