レッスン 1: レポートを日付でフィルター処理するためのパラメーターの追加 (SSRS)
レポート用のクエリに開始日と終了日のパラメーターを含めることによって、データ ソースから取得するデータの日付範囲を指定できます。さらに別のパラメーターを追加すれば、データ ソースから取得したデータをフィルター処理することができます。
このレッスンでは、パラメーターの @StartDate と @EndDate をクエリに追加してデータ ソースから取り出すデータを制限します。StartDate と EndDate という 2 つのレポート パラメーターは自動的に作成され、レポート データ ペインに表示されます。パラメーターには大文字と小文字の区別があります。クエリ パラメーターは @ シンボルで始まりますが、レポート パラメーターにはこのシンボルは付きません。
次に、自動作成されたパラメーターにデータ型として DateTime を設定します。こうすると、レポート ビューアーのツール バーにそのパラメーターのテキスト ボックスがカレンダー コントロール付きで表示されます。さらに、パラメーターに既定値を設定して、レポートが自動的に実行されるようにします。最後に、クエリ パラメーターとは関連しないレポート パラメーター DayofWeek を作成します。このパラメーターは、データ ソースから取得したデータをフィルター処理するために使用します。
このチュートリアルを行うには、「チュートリアル : 基本的なテーブル レポートの作成」を完了している必要があります。
既存のレポート サーバー プロジェクトを開くには
[スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft SQL Server 2008 R2] の順にポイントして、[Business Intelligence Development Studio] をクリックします。
[ファイル] メニューの [開く] をポイントし、[プロジェクト/ソリューション] をクリックします。
[チュートリアル] をクリックし、Tutorial.sln をクリックします。これは、「チュートリアル : 基本的なテーブル レポートの作成」で作成された、チュートリアルです。
[OK] をクリックすると、プロジェクトが開きます。そのチュートリアル プロジェクトには Sales Orders.rdl というレポートがあり、ソリューション エクスプローラーに表示されます。
注 ソリューション エクスプローラーが表示されていない場合は、[表示] メニューの [ソリューション エクスプローラー] をクリックします。
埋め込みデータ ソースを共有データ ソースに変換するには
レポート データ ペインで AdventureWorks というデータ ソースを右クリックし、[共有データ ソースに変換] をクリックします。ソリューション エクスプローラーに AdventureWorks.rds と呼ばれるデータ ソースが追加されます。
レポート データ ペインで AdventureWorks というデータ ソースを右クリックし、[データ ソース プロパティ] を選択します。
[名前] に、「AdventureWorks_Ref」と入力します。
[OK] をクリックします。
既存のデータセットを置き換えるには
レポート データ ペインで AdventureWorksDataset というデータセットを右クリックし、[データセットのプロパティ] をクリックします。
注 レポート データ ペインが表示されていない場合は、[表示] メニューの [レポート データ] をクリックします。
[データ ソース] で AdventureWorks_Ref が選択されていることを確認します。
[クエリの種類] で [テキスト] が選択されていることを確認します。
[クエリ デザイナー] をクリックして、クエリ デザイナーを開きます。
テキスト ボックスのテキストを次のクエリで置き換えます。
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))
ツール バーの [実行] ([!]) をクリックします。[クエリ パラメーターの定義] ダイアログ ボックスが表示され、パラメーターの値を入力できるようになります。
フィルター処理された結果セットを表示するために 2 つの値を入力します。
[パラメーター値] の列で、@StartDate の値を入力します。たとえば「1/31/2001」と入力します。
[パラメーター値] の列で、@EndDate の値を入力します。たとえば「1/31/2003」と入力します。
[OK] をクリックします。
結果セットにはフィルターで絞った 2001 年と 2002 年の注文データセットが表示されます。
[OK] を 2 度クリックします。レポート データ ペインにデータセット フィールドが表示されます。2 つのパラメーター、StartDate と EndDate が自動的に作成されてパラメーター ノードに表示されることに注意してください。
レポートのクエリ パラメーターを定義したら、レポート パラメーターのデータ型をソース データのデータ型に一致するように変更する必要があります。デフォルトはテキストです。これはほとんどのデータ ソースで文字列データ型にマップされます。ソース データが数値、真偽、または日付/時刻の場合は、レポート パラメーターのデータ型を変更する必要があります。
レポート パラメーターのデータ型と既定値を変更するには
レポート データ ペインで、パラメーターを展開し、StartDate をダブルクリックします。[レポート パラメーターのプロパティ] ダイアログ ボックスが表示されます。
パラメーター名が StartDate であり、プロンプトが「開始日」であることを確認します。
[データ型] から [日付/時刻] を選択します。
[OK] をクリックします。
レポート データ ペインで EndDate をダブルクリックします。名前とプロンプト値を確認します。
[データ型] から [日付/時刻] を選択します。
[OK] をクリックします。
[プレビュー] をクリックします。レポート ツール バーに、パラメーターの StartDate および EndDate がそれぞれカレンダー コントロール付きで表示されます。カレンダー コントロールが自動的に表示されるのは、パラメーターのデータ型が Date/Time で、可能な値の一覧が未定義の場合です。可能な値の一覧が定義されている場合は、値がドロップダウン リストに表示されます。
2 つのパラメーター値を指定してレポートを実行します。
[StartDate] パラメーターのテキスト ボックスに、「1/31/2001」と入力します。
[EndDate] パラメーターのテキスト ボックスに、「1/31/2003」と入力します。
[レポートの表示] をクリックします。レポートには、レポート パラメーター値の範囲内にあるデータ レコードだけが表示されます。
レポートのレポート パラメーターを作成したら、それらのパラメーターに既定値を追加できます。既定のパラメーターを指定すると、レポートを自動的に実行できます。既定のパラメーターが指定されていない場合は、ユーザーがパラメーター値を入力してレポートを実行する必要があります。
パラメーターに既定値を設定するには
レポート データ ペインのデザイン ビューで、[パラメーター] を展開し、StartDate をダブルクリックします。[レポート パラメーターのプロパティ] ダイアログ ボックスが表示されます。
[既定値] をクリックします。
[値の指定] オプションを選択します。[追加] ボタンと、空の [値] グリッドが表示されます。
[追加] をクリックします。グリッドに、空の行が追加されます。
[値] ボックスをクリックし、既定テキストの「(NULL)」を削除します。
「1/31/2001」と入力します。[OK] をクリックします。
レポート デザイン ペインで EndDate をダブルクリックします。
[既定値] をクリックします。
[値の指定] オプションを選択します。
[追加] をクリックします。
「1/31/2003」と入力します。[OK] をクリックします。
[プレビュー] をクリックします。すべてのパラメーターに既定値が定義されているので、レポートがすぐに実行されます。
クエリにフィルター処理用の新しいフィールドを追加するには
デザイン ビューに切り替えます。
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.
[実行] ([!]) をクリックすると、[クエリ パラメーターの定義] ダイアログ ボックスが表示されます。
[パラメーター値] の列で、@StartDate の値を入力します。たとえば「1/31/2001」と入力します。
[パラメーター値] の列で、@EndDate の値を入力します。たとえば「1/31/2003」と入力します。
[OK] をクリックします。結果セットに Weekday というラベルが付いた新しい列が表示されます。
[OK] を 2 度クリックします。レポート データ ペインで Weekday がフィールドになっていることを確認します。
(省略可) 表データ内のフィルター処理される日付の形式を設定するには
[デザイン] タブをクリックします。
[Date] フィールド式が入力されているセルを右クリックし、[テキスト ボックスのプロパティ] をクリックします。
[数値] をクリックし、[カテゴリ] フィールドで [日付] を選択します。
[型] ボックスで [2000 年 1 月 31 日、月曜日] を選択します。
[OK] をクリックします。
新しいレポート パラメーターを追加するには
デザイン ビューのレポート データ ペインで [新規作成]、[パラメーター] の順にクリックします。[レポート パラメーターのプロパティ] ダイアログ ボックスが表示されます。
[名前] に「DayoftheWeek」と入力します。
[プロンプト] に、「曜日を選択してください : 」と入力します。
データ型が Text であることを確認します。
[既定値] をクリックします。
[値の指定] オプションを選択します。[追加] ボタンと、空の [値] グリッドが表示されます。
[追加] をクリックします。
「金曜日」と入力します。
[OK] をクリックします。
パラメーター式を使って表フィルターを設定するには
[デザイン] ビューで表の行または列ハンドルを右クリックして、[Tablix のプロパティ] を選択します。
注 表のデータ領域は Tablix データ領域に基づいたテンプレートです。
[フィルター] をクリックします。空のフィルター グリッドが表示されます。
[追加] をクリックします。グリッドに、空の行が追加されます。
[式] ボックスの一覧から [Weekday] を選択します。
[演算子] に等号 (=) が表示されていることを確認します。
[値] ボックスの横にある式 ([Fx]) ボタンをクリックします。[式] ダイアログ ボックスが表示されます。
[カテゴリ] で [パラメーター] をクリックします。現在のパラメーター一覧が値ペインに表示されます。DayoftheWeek をダブルクリックします。パラメーター式が [式] ボックスに追加され、これで、式のテキスト ボックスに「=Parameters!DayoftheWeek.Value」という式が表示されます。
[OK] をクリックします。もう一度 [OK] をクリックして [Tablix のプロパティ] ダイアログ ボックスを閉じます。
これで、表のフィルター処理として、Weekday フィールドの値が DayoftheWeek のパラメーター値と比較されるようになります。たとえば、レポート ツール バーで DayoftheWeek の値に「金曜日」と入力してレポートを実行すると、表の中で Weekday フィールドの値が "金曜日" となっている行だけが処理されます。
[プレビュー] をクリックします。すべてのパラメーターに既定値が定義されているので、レポートは自動的に実行されます。表には StartDate と EndDate で定義した日付範囲の金曜日の値のみが表示されます。
次の手順
これで、クエリ パラメーターとレポート パラメーターの定義、パラメーターの既定値の設定、および表のフィルター設定ができました。次のレッスンでは、パラメーターの選択可能な値 (有効な値) の一覧を作成する方法を学習します。「レッスン 2: 使用可能な値の一覧を作成するパラメーターの追加 (SSRS)」を参照してください。