次の方法で共有


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

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

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

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

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

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

  1. [スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft SQL Server 2008] の順にポイントして、[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, の値を入力します。たとえば「20010101」と入力します。

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

  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] パラメータのテキスト ボックスに、「2001-01-01」と入力します。

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

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

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

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

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

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

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

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

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

  6. 「2001-01-01」と入力します。 [OK] をクリックします。

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

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

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

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

  11. 「2003-01-01」と入力します。 [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 の値を入力します。たとえば「20010101」と入力します。

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

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

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

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

  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 のプロパティ] ダイアログ ボックスを閉じます。

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

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

次の手順

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