グループヘッダ・フッタのレイアウト
グループヘッダ・フッタに配置できるものは「グループを通じて変化しないもの」か「グループ全体の集計値」です。
上記の例では、グループのキーとなっているCategoryIDがグループで変化しないフィールドです。この場合、CategoryIDごとのカテゴリー名を格納しているCategoryNameもそのグループを通じて変化しないので、グループヘッダにCategoryNameを表示させることが可能です。
グループフッタ上の左端のTextBoxコントロール上にマウスカーソルをあわせ、表示される選択装飾アイコンから「CategoryName」を選択すると、以下のような式がValueプロパティに設定されます。
=First(Fields!CategoryName.Value)
詳細行でCategoryNameを選択したときは「=Fields!CategoryName.Value」と設定されますが、グループヘッダ上でアイコンから選択すると、グループの最初のデータを得る「First」関数が自動的に付きます。グループ化された複数のレコードの内、どのレコードをグループヘッダ上に表示するか、明確に設定するためです。
グループの集計
次に、グループで集計を取ってみましょう。グループフッタ上の右端のTextBoxコントロール上にマウスカーソルをあわせ、表示される選択装飾アイコンから「ProductSales」を選択すると、以下のような式がValueプロパティに設定されます。
=Sum(Fields!ProductSales.Value)
今度は、値の合計を得る集計関数である「Sum」関数が自動的に付きました。これで、グループごとの「ProductSales」の合計が表示されるようになります。
このようにグループヘッダ/フッタ上で選択装飾アイコンからフィールドを選択すると、自動的に集計関数が付加されます。付加される関数は、数値型なら合計を表す「Sum」、それ以外なら最初の項目を表す「First」です。
グループ化とデータの並び順
ここまでの説明で作成した、グループ化していない単純なレポートとグループ化されたレポートをご覧ください。
グループ化されたレポートは、CategoryIDでグループ化されており、CategoryIDの順番で出力されています。しかしながら、これらのレポートのデータソースとして設定しているSQL文は、グループ化していない単純なレポートと同じものです。
セクションレポートでグループ化する場合、データを抽出するSQL文にORDER BY句を設定するなどして、あらかじめグループ化したい順番にデータを整列させておく必要がありました。
それに対して、ページレポートでグループ化する場合、レポート側の機能で自動的にデータのグループ化を行います。データソースをあらかじめ整列させておく必要はありません。
グループのソート
また、値に従って並べ替え(ソート)が可能です。Tableのプロパティ設定ダイアログを開き、「グループ」の項目から「並べ替え」のタブを開きます。
「並べ替え」のための式を追加するパネルがあります(複数設定可能)。ここに、並べ替えの基準となる数値(番号や日付など)となる式を設定すれば、グループ単位で自動的に並べ替えが行われます。ここではCategoryIDフィールドを設定してみます。実行させるとCategoryIDの数値が小さい順にグループが並びます。なお、並び順を「降順」に設定して数値が大きい順に並ばせることも可能です。
グループのフィルタ
式を使ってフィルタリングし、特定の条件を満たすデータのみ出力することも可能です。Tableのプロパティ設定ダイアログを開き、「グループ」の項目から、「フィルタ」のタブを開きます。
例えば「CategoryID=3のデータは表示しない。それ以外のデータは表示する」という要件を満たしたい場合、以下のように設定します。
- 緑の+ボタンを押して、フィルタ式を追加する。
- 式欄にCategoryIDを設定する。
- 演算子欄に「NotEqual」を設定する。
- 値欄に「3」を設定する。
これで「CategoryID=3のデータは表示しない(CategoryIDが3と等しくないデータのみ表示する)」フィルタが設定されます。このレポートを実行するとCategoryID=3のデータはTableに表示されません。