レッスン 4 : "すべて選択" を含む複数値をとるパラメータの追加

更新 : 2006 年 12 月 12 日

このレッスンでは、SalesOrderID パラメータと DayoftheWeek パラメータを変更し、単一値ではなく複数値をとるようにします。複数値をとるパラメータを使用すると、レポート パラメータに複数の値を選択できるようになります。ここではレポート パラメータ SalesOrderID を変更するため、AdventureWorks データセット用のクエリを変更し、@SalesPersonID を単一値に対してではなく選択した値セットの中で評価するようにします。また、レポート パラメータの複数値をとるプロパティを確認します。さらに、DayoftheWeek レポート パラメータを変更するため、複数値をとるプロパティを確認し、新しいデータセットから可能な値を複数取得して設定します。また、既定値を定義する式を指定します。さらに、DayoftheWeek パラメータに可能な値を提供する新しいデータセットを作成します。最後に、レポートにテキスト ボックスを追加して、DayoftheWeek で選択されたパラメータの値を表示するようにします。

Sales Orders レポートを開くには

  1. SQL Server Business Intelligence Development Studio で、前のレッスンで作成した Tutorial Report Server プロジェクトを開きます。

  2. ソリューション エクスプローラで、Sales Orders レポートをダブルクリックします。レポートが [レイアウト] ビューに表示されます。

  3. [データ] タブをクリックします。

パラメータを値セットに対して評価するようデータセット クエリを変更するには

  1. [データセット] の一覧で、[AdventureWorks] を選択します。

  2. 既存のクエリの WHERE 句を修正し、@SalesPersonID の評価を等式 (= (@SalesPersonID)) から包含 ((IN (@SalesPersonID)) に変更します。

    このデータセット用のクエリ文字列を、次のクエリで置き換えます。

    SELECT S.OrderDate, DATENAME(weekday, S.OrderDate) as Weekday,
        S.SalesOrderNumber, S.TotalDue, C.FirstName, C.LastName
    FROM    HumanResources.Employee E INNER JOIN
            Person.Contact C ON E.ContactID = C.ContactID INNER JOIN
            Sales.SalesOrderHeader S ON E.EmployeeID = S.SalesPersonID
    WHERE
       (
       S.OrderDate BETWEEN (@StartDate) AND (@EndDate) 
       AND
       S.SalesPersonID IN (@SalesPersonID)
       )
    
  3. [実行] ([!]) ボタンをクリックします。クエリ パラメータの入力画面が表示されたら、次の表にある値を入力します。クエリ デザイナでは、複数値をとるパラメータを評価することはできません。

    @StartDate

    20010101

    @EndDate

    20030101

    @SalesPersonID

    286

  4. [OK] をクリックします。SalesPersonID = 286 の販売担当者 Ranjit Varkey Chudakatil の結果セットが表示されます。

レポート パラメータ SalesPersonID のプロパティを設定するには

  1. [レポート] メニューの [レポート パラメータ] をクリックします。[レポート パラメータ] ダイアログ ボックスが表示されます。

  2. [パラメータ] ペインで、[SalesPersonID] を選択します。

  3. [プロパティ] で、[複数値] チェック ボックスをオンにします。

  4. [表示名] ボックスに「販売担当者を選択してください : 」と入力します。

  5. [OK] をクリックします。

  6. [プレビュー] タブをクリックします。レポートに、販売担当者名の一覧が表示されます。

Aa337396.note(ja-jp,SQL.90).gifメモ :
複数値をとるパラメータの可能な値の一覧には、先頭に [(すべて選択)] という値が表示されます。すべての値を選択または選択解除するにはこのチェック ボックスを使用します。
Aa337396.note(ja-jp,SQL.90).gifメモ :
[すべて選択] オプションは、SQL Server 2005 Service Pack 1 では無効になっていましたが、SQL Server 2005 Service Pack 2 で復活しました。

DaysoftheWeek の可能な値を提供する新しいデータセットを追加するには

  1. [データ] タブの [データセット] の一覧で、[<新しいデータセット>] を選択します。

  2. データ ソースを AdventureWorks データ ソースに設定します。

  3. [名前] フィールドに、「WeekDaysfromQuery」と入力します。

  4. 次のクエリ文字列をクエリ ペインに貼り付けます。

    SET DATEFIRST 1;
    SELECT DISTINCT 
       DATEPART(weekday, S.OrderDate) as WeekDayNumber,
       DATENAME(weekday, S.OrderDate) as Weekday
       FROM Sales.SalesOrderHeader S
    Order by WeekDayNumber
    

    DATEFIRST では、週の最初の曜日が設定されます。たとえば、「SET DATEFIRST 7」と指定した場合は、週の最初の曜日は日曜日に変更されます。詳細については、「SET DATEFIRST (Transact-SQL)」を参照してください。

    このチュートリアルでは、週の最初の曜日を月曜日とします。

  5. [OK] をクリックします。

  6. クエリ デザイナのツール バーの [実行] ([!]) ボタンをクリックします。結果セットに週の序数と曜日が表示されます。

レポート パラメータ DayoftheWeek のプロパティを設定するには

  1. [レポート] メニューの [レポート パラメータ] をクリックします。[レポート パラメータ] ダイアログ ボックスが表示されます。

  2. [パラメータ] ペインで、[DayoftheWeek] を選択します。このパラメータは、レッスン 2 で作成したものです。

  3. [プロパティ] で、[複数値] チェック ボックスをオンにします。

  4. [表示名] ボックスに「曜日のフィルタ : 」と入力します。

  5. [使用できる値] の [データセット] の一覧で、[WeekDaysfromQuery] を選択します。

  6. [値フィールド] の一覧で、[平日] を選択します。

  7. [ラベル フィールド] の一覧で、[平日] を選択します。

    既定値として、最初の [値] ボックスに「土曜日」、2 番目の [値] ボックスに「日曜日」と入力します。

  8. [OK] をクリックします。

    現在 DayoftheWeek パラメータは複数値をとるようになったため、レポートをプレビューする前に、テーブル データ領域用に定義されているフィルタ式を変更し、IN 演算子を使用するよう指定する必要があります。

複数値をとるパラメータを使用するようフィルタを変更するには

  1. [レイアウト] ビューで、対象テーブルを選択します。テーブルの外枠がグレー表示になります。

  2. テーブルの外枠を右クリックし、[プロパティ] をクリックします。[テーブルのプロパティ] ダイアログ ボックスが表示されます。

  3. [フィルタ] タブをクリックします。

  4. [式] 列の一覧で、値が "=Fields!Weekday.Value" となっていることを確認します。

  5. 演算子を、等号 (=) から In 演算子に変更します。

  6. [値] ボックスの一覧で、値が "=Parameters!DayoftheWeek.Value" となっていることを確認します。

  7. [OK] をクリックします。

    これでテーブルのフィルタが設定され、フィールド Weekday の値とパラメータ DayoftheWeek の値が In 演算子によって比較されるようになりました。レポート パラメータで複数の値を選択すると、フィルタ処理によりテーブルの各行が評価され、Weekday フィールドの値が DayoftheWeek コレクション内に存在するかどうかが確認されます。

  8. [プレビュー] タブをクリックします。レポートに、レポート パラメータ DaysoftheWeek が既定値 "土曜日" および "日曜日" と共に表示されます。

Aa337396.note(ja-jp,SQL.90).gifメモ :
複数値をとるパラメータの可能な値の一覧には、前の手順で記した例外を除き、先頭に [(すべて選択)] という値が表示されます。すべての値を選択または選択解除するにはこのチェック ボックスを使用します。

パラメータの値を表示するテキスト ボックスを追加するには

  1. [レイアウト] ビューで、対象テーブルを選択します。下方向キーを数回押してテーブルを下に移動し、レポートの高さを延ばします。

  2. ツール ボックスからテキスト ボックスをドラッグし、テーブルの上部にドロップします。テキスト ボックスの 1 辺を選び、テーブルの幅まで広げます。

  3. テキスト ボックス内に次の式を貼り付けます。

    ="From " & Parameters!StartDate.Value & " to " & 
    Parameters!EndDate.Value & vbCrLf & "For the following " & 
    Parameters!DayoftheWeek.Count & " days of the week: " & 
    Join(Parameters!DayoftheWeek.Value,", ") & vbCrLf &
    "First and last selected salespersons: " & 
    Parameters!SalesPersonID.Label(0) & " and " & 
    Parameters!SalesPersonID.Label(Parameters!SalesPersonID.Count-1)
    

    式に関しては、次の点に注意してください。

    • パラメータの値の代わりにパラメータのラベルを参照できます。たとえば、「Parameters!SalesPersonID.Value」の代わりに「Parameters!SalesPersonID.Label」を指定できます。
    • パラメータ コレクション内の個々のメンバを指定するには、0 から始まるインデックスを使用します。たとえば、「Parameters!SalesPersonID.Label(0)」のように指定します。
    • コレクション全体を指定するには、インデックスなしで指定します。たとえば、「Parameters!SalesPersonID.Value」のように指定します。
    • 値の数を調べるには、「Parameters!SalesPersonID.Count」と指定します。
    • パラメータが複数値をとるかどうかも調べることができます。たとえば、「Parameters!SalesPersonID.IsMultivalue」のように指定します。
    • Visual Basic の Join 関数を使用すると、複数値をとるパラメータで選択された値をすべて連結できます。たとえば、「Join(Parameters!DayoftheWeek.Value,", ")」と指定します。
  4. [プレビュー] をクリックします。[レポートの表示] をクリックしたときに、パラメータで選択した値がテキスト ボックスに表示されるかどうかを確認します。

次の手順

ここでは、レポート パラメータのプロパティを変更し、単一値ではなく複数値をとるようにしました。また、クエリ、フィルタ、式に変更を加え、複数値をとるパラメータのコレクションを使用するようにしました。複数値をとるパラメータを式の中で使用する方法がわかったところで、次のレッスンでは、ブール値をとるパラメータを作成し、レポートに表示する詳細レベルを設定する方法について学習します。「レッスン 5 : 行の表示を制御するパラメータの追加」を参照してください。

変更履歴

リリース 履歴

2006 年 12 月 12 日

変更内容 :
  • SP2 で [すべて選択] オプションが復活。

参照

処理手順

レッスン 1 : パラメータのチュートリアルで使用するレポート サーバー プロジェクトの作成

その他の技術情報

Reporting Services でのパラメータを使用した作業

ヘルプおよび情報

SQL Server 2005 の参考資料の入手