次の方法で共有


レッスン 2 : 日付によるフィルタ処理を行うパラメータの追加

新規 : 2006 年 7 月 17 日

レポート用のクエリに開始日と終了日のパラメータを含めることによって、データ ソースから取得するデータの日付範囲を指定できます。また、さらにパラメータを作成し、データ ソースから取得したデータをフィルタ処理することができます。

このレッスンでは、最初にクエリ パラメータ @StartDate および @EndDate を追加します。追加すると、クエリ パラメータを示す @ がないレポート パラメータ StartDate および EndDate が自動的に作成されます (これらのパラメータ名の大文字と小文字は区別されます)。データ プロバイダによっては、クエリ パラメータを表す記号が異なることに注意してください。たとえば Oracle データ プロバイダの場合、アット (@) マークではなくコロン (:) になります。

次に、自動作成されたパラメータにデータ型 DateTime を設定します。こうすると、ツール バーにはパラメータのテキスト ボックスと共にカレンダー コントロールが表示されます。さらに、パラメータに既定値を設定して、レポートが自動的に実行されるようにします。最後に、クエリ パラメータとは関連しないレポート パラメータ DayofWeek を作成します。このパラメータは、データ ソースから取得したデータをフィルタ処理するために使用します。

クエリに日付パラメータを追加するには

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

  2. 既存のクエリを次のクエリで置き換えます。

    SELECT S.OrderDate, 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))
    -- Accurate Enddate would be '20020228 23:59:59.997'
    
    Aa337401.note(ja-jp,SQL.90).gifメモ :
    SQL Server では、DATETIME データが 1/300 秒の精度で格納されます。詳細については、「日付と時刻 (Transact-SQL)」を参照してください。DateTime 変数を使用しても結果が思いどおりにフィルタ選択されない場合は、さらに精度の高い時間をクエリ パラメータに使用する必要があります。

    このチュートリアルでは、datetime の概算値を使用します。

  3. ツール バーの [実行] (!) をクリックします。[クエリ パラメータの定義] ダイアログ ボックスが表示されます。

  4. [パラメータ値] 列に、@StartDate に使用する値を入力します。たとえば、「20010101」と指定します。

  5. [パラメータ値] 列に、@EndDate に使用する値を入力します。たとえば、「20030101」と指定します。

  6. [OK] をクリックします。これで、レポート パラメータ StartDate および EndDate が自動的に作成されます。これらのパラメータの既定のデータ型は String です。次の 3 つのステップでは、これらのパラメータのデータ型を DateTime に設定します。

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

  8. [パラメータ] ボックスの一覧で、[StartDate] が強調表示されていることを確認します。[データ型] の一覧で [DateTime] を選択します。

  9. [パラメータ] ボックスの一覧で、[EndDate] を選択します。[データ型] の一覧で [DateTime] を選択します。

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

  11. [プレビュー] をクリックします。ツール バーに、パラメータ StartDate および EndDate がそれぞれのカレンダー コントロールと共に表示されます。カレンダー コントロールが自動的に表示されるのは、パラメータのデータ型が DateTime で、可能な値の一覧が未定義の場合です。可能な値の一覧を定義すると、カレンダー コントロールの代わりに値の一覧が作成されます。

    このチュートリアルでは、カレンダー コントロールを使用する代わりにデータに対する値を入力します。

  12. [StartDate] パラメータのテキスト ボックスに、「2001-01-01」と入力します。

  13. [EndDate] パラメータのテキスト ボックスに、「2003-01-01」と入力します。

  14. [レポートの表示] をクリックします。レポートに、レポート パラメータ値の範囲に含まれるデータ レコードだけが表示されます。

レポート用のクエリ パラメータを作成したら、それらのパラメータに既定値を追加できます。既定のパラメータを使用すると、レポートが自動的に実行されます。既定のパラメータを使用しない場合は、ユーザーがパラメータ値を入力してレポートを実行する必要があります。

日付パラメータに既定値を設定するには

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

  2. [パラメータ] ボックスの一覧で、[StartDate] が強調表示されていることを確認します。

  3. [既定値] で [クエリなし] を選択し、「2001-01-01」と入力します。次に、Tab キーを押して、テキスト ボックスの編集を終了します。

  4. [パラメータ] ボックスの一覧で、[EndDate] を選択します。

  5. [既定値] で [クエリなし] を選択し、「01.01.03」と入力します。Tab キーを押して、テキスト ボックスの編集を終了します。

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

  7. [プレビュー] をクリックします。すべてのパラメータに既定値が定義されているので、レポートがすぐに実行されます。

    ユーザーがレポートを実行する場合、クエリ パラメータのスコープ内に収まる既定のパラメータ値を設定できます。たとえば、表示データを 1 か月に限定するレポート パラメータ値をユーザーに提示することができます。

クエリにフィルタ処理用の新しいフィールドを追加するには

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

  2. クエリ内に、注文のあった曜日を取得する追加の集計列を定義します。そのためには、SELECT ステートメントに DATENAME(weekday, S.OrderDate) as Weekday というコマンドを追加します。

    既存のクエリを次の文字列で置き換えます。

    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))
    
  3. [実行] (!) をクリックします。"Weekday" というラベルの新しい列と曜日名が表示されます。

  4. [データセット] ウィンドウで、Weekday がフィールドであることを確認します。

    Aa337401.note(ja-jp,SQL.90).gifメモ :
    [データセット] ウィンドウが表示されない場合は、[表示] メニューの [データセット] をクリックします。

    これで、データセット フィールド Weekday を追加できました。手動でレポート パラメータを生成し、このフィールドに関連付けると、ユーザーはレポート データを曜日でフィルタ選択できます。

新しいレポート パラメータを追加するには

  1. [レイアウト] タブをクリックします。

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

  3. [追加] をクリックします。新しいパラメータ Report_Parameter_2 が既定値と共に表示されます。

  4. [プロパティ][名前] ボックスで、Report_Parameter_2 の代わりに「DayoftheWeek」と入力します。データ型が String であることを確認します。

  5. [表示名] に、「曜日を選択してください :」と入力します。

  6. [空白の値を許可] チェック ボックスをオフにします。

  7. [使用できる値] で、[クエリなし] をクリックします。エントリは空白のままにしておきます。

  8. [既定値][クエリなし] をクリックし、テキスト ボックスに「Sunday」と入力します。

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

パラメータ式を使ってテーブル フィルタを設定するには

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

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

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

  4. [式] 列の一覧で、[=Fields!Weekday.Value] を選択します。

  5. [演算子] が等号 (=) になっていることを確認します。

  6. [値] ボックス内をクリックし、一覧から [<式>] を選択します。[式の編集] ダイアログ ボックスが表示されます。

  7. グローバル変数ペインで、[パラメータ] をクリックします。現在のパラメータ一覧が反対側のペインに表示されます。

  8. [DayoftheWeek] をダブルクリックします。パラメータ式が [式] ボックスに追加され、[式] ボックスの内容は "=Parameters!DayoftheWeek.Value" となります。

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

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

    これで、テーブルのフィルタでは、Weekday フィールドの値が DayoftheWeek のパラメータ値と比較されるようになります。たとえば、レポート ツール バーで DayoftheWeek の値に「Sunday」と入力してレポートを実行すると、Weekday フィールドの値が「Sunday」となっているテーブル行だけが処理されます。

  11. [プレビュー] をクリックします。すべてのパラメータに既定値が定義されているので、レポートは自動的に実行されます。この結果、テーブルには StartDateEndDate で定義した日付範囲の日曜日に該当する値のみが表示されます。

  12. さらに、次の手順でテーブル ヘッダーに書式を追加することもできます。

(省略可) テーブル ヘッダー行の背景とフォントの色を設定するには

  1. [レイアウト] タブをクリックします。

  2. テーブル内をクリックします。テーブル ハンドルが表示されます。

  3. テーブル ヘッダー行をクリックし、レイアウト ツール バーの [背景色] ボタンをクリックします。[色の選択] ダイアログ ボックスが表示されます。

  4. [Web] タブで、[DarkRed] を選択します。

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

    次に、フォントの色を選択します。

  6. レイアウト ツール バーの [前景色] ボタンをクリックします。[色の選択] ダイアログ ボックスが表示されます。

  7. [Web] タブで、[White] を選択します。

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

  9. [プレビュー] をクリックします。テーブル ヘッダー行に指定した色がテーブルに適用されます。

次の手順

ここでは、クエリ パラメータとレポート パラメータを定義し、パラメータに既定値を設定して、レポート パラメータを集計フィールドに関連付けました。次のレッスンでは、パラメータに可能な値 (有効な値) の一覧を作成する方法を学習します。「レッスン 3: 選択可能な値一覧が割り当てられた単一値パラメータの追加」を参照してください。

参照

処理手順

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

その他の技術情報

ISO 8601 形式

ヘルプおよび情報

SQL Server 2005 の参考資料の入手