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