Share via


レッスン 1: レポートを日付でフィルター処理するためのパラメーターの追加 (SSRS)

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

このレッスンでは、パラメーターの @StartDate@EndDate をクエリに追加してデータ ソースから取り出すデータを制限します。StartDate と EndDate という 2 つのレポート パラメーターは自動的に作成され、レポート データ ペインに表示されます。パラメーターには大文字と小文字の区別があります。クエリ パラメーターは @ シンボルで始まりますが、レポート パラメーターにはこのシンボルは付きません。

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

このチュートリアルを行うには、「チュートリアル : 基本的なテーブル レポートの作成」を完了している必要があります。

既存のレポート サーバー プロジェクトを開くには

  1. [スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft SQL Server 2008 R2] の順にポイントして、[Business Intelligence Development Studio] をクリックします。

  2. [ファイル] メニューの [開く] をポイントし、[プロジェクト/ソリューション] をクリックします。

  3. [チュートリアル] をクリックし、Tutorial.sln をクリックします。これは、「チュートリアル : 基本的なテーブル レポートの作成」で作成された、チュートリアルです。

  4. [OK] をクリックすると、プロジェクトが開きます。そのチュートリアル プロジェクトには Sales Orders.rdl というレポートがあり、ソリューション エクスプローラーに表示されます。

       ソリューション エクスプローラーが表示されていない場合は、[表示] メニューの [ソリューション エクスプローラー] をクリックします。

埋め込みデータ ソースを共有データ ソースに変換するには

  1. レポート データ ペインで AdventureWorks というデータ ソースを右クリックし、[共有データ ソースに変換] をクリックします。ソリューション エクスプローラーに AdventureWorks.rds と呼ばれるデータ ソースが追加されます。

  2. レポート データ ペインで AdventureWorks というデータ ソースを右クリックし、[データ ソース プロパティ] を選択します。

  3. [名前] に、「AdventureWorks_Ref」と入力します。

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

既存のデータセットを置き換えるには

  1. レポート データ ペインで AdventureWorksDataset というデータセットを右クリックし、[データセットのプロパティ] をクリックします。

    注意

    レポート データ ペインが表示されていない場合は、[表示] メニューの [レポート データ] をクリックします。

  2. [データ ソース] で AdventureWorks_Ref が選択されていることを確認します。

  3. [クエリの種類][テキスト] が選択されていることを確認します。

  4. [クエリ デザイナー] をクリックして、クエリ デザイナーを開きます。

  5. テキスト ボックスのテキストを次のクエリで置き換えます。

    SELECT 
       soh.OrderDate AS [Date], 
       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)))
    

    これは、次の 2 つの制限パラメーターを持つ条件が追加されている他は、以前のクエリと同じです。

    AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate))

  6. ツール バーの [実行] ([!]) をクリックします。[クエリ パラメーターの定義] ダイアログ ボックスが表示され、パラメーターの値を入力できるようになります。

  7. フィルター処理された結果セットを表示するために 2 つの値を入力します。

    1. [パラメーター値] の列で、@StartDate の値を入力します。たとえば「1/31/2001」と入力します。

    2. [パラメーター値] の列で、@EndDate の値を入力します。たとえば「1/31/2003」と入力します。

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

  9. 結果セットにはフィルターで絞った 2001 年と 2002 年の注文データセットが表示されます。

  10. [OK] を 2 度クリックします。レポート データ ペインにデータセット フィールドが表示されます。2 つのパラメーター、StartDate と EndDate が自動的に作成されてパラメーター ノードに表示されることに注意してください。

レポートのクエリ パラメーターを定義したら、レポート パラメーターのデータ型をソース データのデータ型に一致するように変更する必要があります。デフォルトはテキストです。これはほとんどのデータ ソースで文字列データ型にマップされます。ソース データが数値、真偽、または日付/時刻の場合は、レポート パラメーターのデータ型を変更する必要があります。

レポート パラメーターのデータ型と既定値を変更するには

  1. レポート データ ペインで、パラメーターを展開し、StartDate をダブルクリックします。[レポート パラメーターのプロパティ] ダイアログ ボックスが表示されます。

  2. パラメーター名が StartDate であり、プロンプトが「開始日」であることを確認します。

  3. [データ型] から [日付/時刻] を選択します。

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

  5. レポート データ ペインで EndDate をダブルクリックします。名前とプロンプト値を確認します。

  6. [データ型] から [日付/時刻] を選択します。

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

  8. [プレビュー] をクリックします。レポート ツール バーに、パラメーターの StartDate および EndDate がそれぞれカレンダー コントロール付きで表示されます。カレンダー コントロールが自動的に表示されるのは、パラメーターのデータ型が Date/Time で、可能な値の一覧が未定義の場合です。可能な値の一覧が定義されている場合は、値がドロップダウン リストに表示されます。

  9. 2 つのパラメーター値を指定してレポートを実行します。

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

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

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

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

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

  1. レポート データ ペインのデザイン ビューで、[パラメーター] を展開し、StartDate をダブルクリックします。[レポート パラメーターのプロパティ] ダイアログ ボックスが表示されます。

  2. [既定値] をクリックします。

  3. [値の指定] オプションを選択します。[追加] ボタンと、空の [値] グリッドが表示されます。

  4. [追加] をクリックします。グリッドに、空の行が追加されます。

  5. [値] ボックスをクリックし、既定テキストの「(NULL)」を削除します。

  6. 「1/31/2001」と入力します。[OK] をクリックします。 

  7. レポート デザイン ペインで EndDate をダブルクリックします。

  8. [既定値] をクリックします。

  9. [値の指定] オプションを選択します。

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

  11. 「1/31/2003」と入力します。[OK] をクリックします。

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

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

  1. デザイン ビューに切り替えます。

  2. AdventureWorksDataset データセットを右クリックし、[データセットのプロパティ] を選択します。クエリ デザイナーを開いてクエリを次の新しいクエリで置き換えます。

    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)))
    

    このクエリにはさらに、売り上げのあった曜日の計算列が、次のような SELECT ステートメントによって定義されています。

    DATENAME(weekday, soh.OrderDate) as Weekday.

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

  4. [パラメーター値] の列で、@StartDate の値を入力します。たとえば「1/31/2001」と入力します。

  5. [パラメーター値] の列で、@EndDate の値を入力します。たとえば「1/31/2003」と入力します。

  6. [OK] をクリックします。結果セットに Weekday というラベルが付いた新しい列が表示されます。

  7. [OK] を 2 度クリックします。レポート データ ペインで Weekday がフィールドになっていることを確認します。

(省略可) 表データ内のフィルター処理される日付の形式を設定するには

  1. [デザイン] タブをクリックします。

  2. [Date] フィールド式が入力されているセルを右クリックし、[テキスト ボックスのプロパティ] をクリックします。

  3. [数値] をクリックし、[カテゴリ] フィールドで [日付] を選択します。

  4. [型] ボックスで [2000 年 1 月 31 日、月曜日] を選択します。

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

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

  1. デザイン ビューのレポート データ ペインで [新規作成][パラメーター] の順にクリックします。[レポート パラメーターのプロパティ] ダイアログ ボックスが表示されます。

  2. [名前] に「DayoftheWeek」と入力します。

  3. [プロンプト] に、「曜日を選択してください : 」と入力します。

  4. データ型が Text であることを確認します。

  5. [既定値] をクリックします。

  6. [値の指定] オプションを選択します。[追加] ボタンと、空の [値] グリッドが表示されます。

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

  8. 「金曜日」と入力します。

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

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

  1. [デザイン] ビューで表の行または列ハンドルを右クリックして、[Tablix のプロパティ] を選択します。

    注意

    表のデータ領域は Tablix データ領域に基づいたテンプレートです。

  2. [フィルター] をクリックします。空のフィルター グリッドが表示されます。

  3. [追加] をクリックします。グリッドに、空の行が追加されます。

  4. [式] ボックスの一覧から [Weekday] を選択します。

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

  6. [値] ボックスの横にある式 ([Fx]) ボタンをクリックします。[式] ダイアログ ボックスが表示されます。

  7. [カテゴリ] で [パラメーター] をクリックします。現在のパラメーター一覧が値ペインに表示されます。DayoftheWeek をダブルクリックします。パラメーター式が [式] ボックスに追加され、これで、式のテキスト ボックスに「=Parameters!DayoftheWeek.Value」という式が表示されます。

  8. [OK] をクリックします。もう一度 [OK] をクリックして [Tablix のプロパティ] ダイアログ ボックスを閉じます。

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

    [プレビュー] をクリックします。すべてのパラメーターに既定値が定義されているので、レポートは自動的に実行されます。表には StartDate と EndDate で定義した日付範囲の金曜日の値のみが表示されます。

次の手順

これで、クエリ パラメーターとレポート パラメーターの定義、パラメーターの既定値の設定、および表のフィルター設定ができました。次のレッスンでは、パラメーターの選択可能な値 (有効な値) の一覧を作成する方法を学習します。「レッスン 2: 使用可能な値の一覧を作成するパラメーターの追加 (SSRS)」を参照してください。