SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

5分でわかるActiveReports帳票

5分でわかるActiveReports帳票(2013年度版)-Matrixデータ領域を使用したクロス集計表の作成

ActiveReports for .NET 7.0Jで作るサンプル帳票(6)

  • このエントリーをはてなブックマークに追加

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”)を選択してください。

複数の行グループが存在するプロパティ設定ダイアログ
複数の行グループが存在するプロパティ設定ダイアログ

次のページ
まとめ

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
5分でわかるActiveReports帳票連載記事一覧

もっと読む

この記事の著者

グレープシティ株式会社 ActiveReportsチーム(グレープシティカブシキガイシャ アクティブレポートチーム)

 宮城県仙台市に本社を構えるグレープシティでは、日本の業務に適したシステムをより早く開発するためのソフトウェアを提供しています。エンドユーザーの利用しやすさ、幅広いユーザー環境への対応、そして何よりプログラマの作業を軽減することを一番に目指しています。 ActiveReportsは、帳票開発に必要なあらゆる機能を備えた当社を代表するコンポーネントの1つ。1998年の発売以来、日本だけでなく全世界で多数の帳票開発者に使用されています。製品開発は同チームが中心になり、「日本仕様」の厳しい要望を実現することを目指しています。...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7542 2015/07/23 16:16

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング