Matrixの機能を使ったデータのグループ化
最初に作成したレポートは、日付項目(OrderDate)を列ヘッダに設定したため、列が日付ごとに生成され、大量の空白マスが発生してしまいました。
そこで、月単位の集計に変更したいと思います。
データセットのSQLを変更して、「OrderDate」をあらかじめ月単位のデータに変換することで月単位の集計にすることは可能です。しかしながら、Matrixのグループ化の機能を使用すると、SQL文を変更しなくても集計単位を変更できます。
列グループを設定する
まず、「行ヘッダ」と「集計詳細」には、最初のレポートと同じように”ShipCountry”と”Subtotal”を設定します。
次にデザイナ上でMatrixを選択した状態で「プロパティ設定ダイアログ」を開き、「列グループ」タブを開きます(「プロパティ設定ダイアログ」はプロパティウィンドウの[コマンド]ペインから開くことが可能です)。
「グループ化の条件」の「式」に、「年」と「月」を組み合わせたデータを取得するため、以下のように式を記述します(式の記述方法については第4回をご参照ください)。
=Year(Fields!OrderDate.Value) & "/" & Month(Fields!OrderDate.Value)
なお、画面上には「=Year([OrderDate]) & "/" & Month([OrderDate])」のように短縮形で表示されます。
また、列ヘッダのTextBoxのValueプロパティも、同じ式を設定しておきます。
以上のように編集することで「列」が月単位になり、月ごとの集計値が表示されるようになります。
ここで、最初に作成したレポートに戻り、「プロパティ設定ダイアログ」の「列グループ」を開いてみてください。列ヘッダにフィールドを設定しただけですが、今回設定した「グループ化の条件」の「式」として「=[OrderDate]」が設定されていることが確認できると思います。
「列グループ」「行グループ」を設定していない場合、列ヘッダ、行ヘッダに設定したフィールドが自動的にグループ化の式になります。同時に、同じ式が、列ヘッダ、行ヘッダ自体のTextBoxコントロールのValueプロパティに設定されます。これがフィールドを設定しただけで(行/列グループを設定しなくても)、集計表が生成される仕組みです。
ただし、このように動作するのは空のMatrixに対して行った最初の設定の時のみです。いったん、設定したMatrixに対して同じ操作で編集を加えた場合、意図した結果にならないことに注意が必要です。
例えば、列ヘッダに一回フィールドを設定したあと、列ヘッダの式(Valueプロパティ)だけを変更した場合、ヘッダの表示は変更されますが、グループ化の式は変更されません。
集計するグループも変更したい場合、列グループのグループ化の条件の式と、列ヘッダのValueプロパティをそれぞれ別個に変更する必要があります。これは、行グループを変更する場合も同じです。
ソートとフィルタ
行グループや列グループについて、式の設定によって項目順のソート(並べ替え)や、フィルタ処理をすることができます。こちらの設定について今回は割愛いたしますが、基本的に第4回のTableのソートやフィルタ処理と同じなので、そちらをご覧ください。
グループを階層化する
行グループや列グループは、階層構造とすることも可能です。
例えば、行ヘッダに「ShipCountry(発送先の地域名)」のみを設定している表に「ShipCity(発送先の区市町村)」を行グループとして追加する方法を説明します。
レポートエクスプローラを開き、データセットの中の「ShipCity」を行ヘッダ上にドラッグ&ドロップしてください。このときはすでに「ShipCountry」のセルの右側にバーが表示されている状態でドロップしてください(下図、参照)。このように設定することで行ヘッダが階層化され、大分類に地域名が、小分類に区市町村名が表示されるようになります。
地域名と区市町村名が実際と異なる行がありますが、これはNwind.mdbのデータがこのように設定されているためです。
なお、行グループの追加はプロパティ設定ダイアログからも行うことが可能です。
デザイナ上でMatrixを選択した状態で「プロパティ設定ダイアログ」を開き、「行グループ」タブを開いてください。一番上の行グループ一覧の上にある「+」ボタンをクリックし、行グループを追加したら、「式」のコンボボックスから追加したいフィールド(今回の場合、”=Fields!ShipCity.Value”)を選択してください。