Matrixを使ったレポートの動作
以上の手順で作成したレポートをプレビュー表示させると、以下のようになります。
集計表の列が日付(注文日)ごとになるため、数十ページのレポートになります。また、使用しているサンプルデータベースには、同じ注文日で発送先が異なるデータが少ないため、空白マスが大量に存在します。
このように、このレイアウトでは集計表としてはあまり実用的ではありませんが、この表を元にMatrixの動作を見てみましょう。
縦・横方向への伸長
最初に述べた通り、Matrixは縦と横の両方向に伸長できるデータ領域です。
行数(縦方向)は、Matrixの「行ヘッダ」に設定したフィールドに対してグループ化した時に得られるデータ数です。今回の場合、「行ヘッダ」に設定したフィールド「ShipCountry」に対してグループ化した時に得られるデータ数が”24”であり、これが集計結果全体の行数です。
一方、列数(横方向)は、Matrixの「列ヘッダ」に設定したフィールドに対してグループ化した時に得られるデータ数です。今回の場合、「列ヘッダ」に設定したフィールド「OrderDate」に対してグループ化した時に得られるデータ数は”228”となり、これが集計結果全体の列数です。
ただし、1ページに表示できる行数・列数は、MatrixコントロールのFixedSizeプロパティで決定されます。今回作成したレポートの場合、1ページに表示できる行数は最大27行、列数は最大5列になります(ヘッダ部分は除く)。
従って、縦方向(24行)は1ページに収まりますが、横方向(228列)は1ページに収まらず46ページに分かれることになります。
なお、今回作成したレポートでは、行ヘッダに設定したフィールドのデータ数(24)が、1ページで表示できる行数(27行)以下でしたが、このデータ数が多くなれば、縦方向も複数ページに分かれて表示されます。
例えば、行ヘッダにフィールド「ShipCity」を指定した場合、そのフィールドをグループ化した時のデータ数は”49”になり、これは縦方向に2ページ必要なデータ数です。
従って、フィールド「ShipCountry」を行ヘッダに設定した時に比べて、ページ数が倍になります。
このように、Matrixによって生成された集計結果の行数・列数が1ページに収まりきらない場合、各ページに分割されてレポートが生成されます。集計結果がどのように分割されるかは、以下の図をご覧ください。
集計値が表示される
行ヘッダや列ヘッダにフィールドを設定したときは、TextBoxコントロールのValueプロパティにはフィールドの値をそのまま出力するような式(例:=Fields!ShipCountry.Value)が設定されました。
一方、集計詳細セルにフィールドを設定したときは、集計関数Sum()を含む式が自動的に設定されました。このように、集計詳細セルには集計した値を表示することになっています。これは行と列が同じ組み合わせのレコードが複数存在しうるからです。例えば、今回のレポートで使用している売上データで言えば「ShipCountry=東京、OrderDate=4月1日というレコードが複数存在する」ということです。
集計詳細セルに設定したフィールドの型が数値型の場合、デフォルトで設定される集計関数は合計値を取得するSum()ですが、他にも任意の集計関数が設定できます。例えば、件数を取得するCount()、平均を取得するAvg()なども設定できます。
設定したフィールドの型が数値型でない場合、デフォルトで設定される集計関数は、最初のレコードの値を表示するFirst()です。従って、行と列の組み合わせに対して対象データが1レコードしか存在しない、または行と列の組み合わせが一致するすべてのレコードについてフィールドの値が常に同じであると保証されている場合以外には、意図した結果になりません。