ActiveReports for .NET 18.0J
データのグループ化
ActiveReportsユーザーガイド > 基本操作 > ページレポート/RDLレポートの基本操作 > データの管理 > データのグループ化

ページレポート、RDLレポートでは、グループ化を設定してデータを整理することができます。もっとも一般的なグループ化のケースは、フィールドや式によってデータ領域でグループ化する方法です。
選択したデータ領域の種類により、以下の方法でデータをグループ化することができます。

ページでのグループ化(ページレポートのみ)

ページレポートでは、データをグループ化することができます。ページに設定したグループは、レポート内にあるすべてのコントロールに対して適用されます。そのため、レポート全体にグループ化を設定した場合は、個々のデータ領域をグループ化する必要はありません。

ここでは、ページでグループ化を設定する方法について説明します。以下の手順は、ページレポートのテンプレートをデータソースに接続し、データセットが作成されていることを前提としています。それぞれの詳細については、「クイックスタート」および「データソースとの接続」を参照してください。

メモ: 以下の手順は、Reelsデータベース(Reels.mdb)のMovieテーブルを使用しています。データの使用にはReelsデータベース(..\ActiveReportsNET18\Samples\Data\Reels.mdb)へのアクセス権限が必要です。
  1. デザイナ面の周囲にあるグレーの領域を右クリックし、コンテキストメニューから[プロパティ]を選択します。
  2. [プロパティ]ウインドウの下部にあるコマンドから[ページレイアウトの設定]リンクをクリックします。
  3. [ページ]ダイアログの[グループ化]ページにある[グループ化の条件]オプションで、データをグループ化したいフィールド名または式を入力します(例 =Fields!YearReleased.Value)。
    メモ: グループ化を設定すると、[名前]フィールドに「FixedPage1_Group」のようなグループ名がデフォルトで表示されます。グループ名を変更するには、[グループ化の条件]でフィールド名または式を入力して[名前]オプションを有効にします。
  4. [見出しマップラベル]フィールドで、見出しマップに項目を追加するためにラベルを設定できます。追加方法の詳細については、「見出しマップ」を参照してください。
  5. [OK]をクリックしてダイアログを閉じます。
  6. デザイナ面上にデータ領域(例 Table)をドラッグ&ドロップし、セル内にデータを設定します。
  7.  [プレビュー]タブへ移動して結果を確認します。各レポートページのデータが「公開(年)」に基づいてグループ化されていることがわかります。

データ領域でのグループ化

ページレポートまたはRDLレポートでは、データ領域のデータを指定したフィールドまたは式に基づいてグループ化することができます。データ領域の種類によってグループ化の処理が異なります。

ここでは、各データ領域でグループ化する方法について説明します。以下の手順は、Visual Studioのプロジェクトにページレポート/RDLレポートのテンプレートを追加し、レポートがデータソースに接続されていることを前提としています。それぞれの詳細については、「プロジェクトにレポートを追加する」、「データソースとの接続」および「データセットの追加」を参照してください。

メモ: 以下の手順は、Reelsデータベース(Reels.mdb)のMovieテーブルを使用しています。データの使用にはReelsデータベース(..\ActiveReportsNET18\Data\Reels.mdb)へのアクセス権限が必要です。

Tableでグループ化を設定する

Tableデータ領域でデータをグループ化するには、グループヘッダまたはグループフッタの行を追加するか、詳細行のグループ化を設定します。

Tableでグループ化を追加する

  1. Visual Studioのツールボックスから、Tableデータ領域をデザイナ面上にドラッグ&ドロップします。
  2. レポートでTableを選択した状態で、[プロパティ]ウィンドウの下部にあるコマンドから[プロパティ設定ダイアログ]リンクをクリックします。
  3. [Table]ダイアログで、[グループ]ページへ移動し、[追加](+)ボタンをクリックして、手動でグループを作成します。
  4. このダイアログの[全般]タブにある[グループ化の条件]オプションで、データをグループ化したいフィールド名または式を入力します(例 =Fields!YearReleased.Value)。

    メモ: グループを追加すると、[名前]フィールドに「Table1_Group1」のようなグループ名がデフォルトで表示されます。グループ名を変更するには、[グループ化の条件]でフィールド名または式を入力して[名前]オプションを有効にします。
  5. [見出しマップラベル]フィールドでは、ラベルを設定して見出しマップに項目を追加することができます。追加方法の詳細については、「見出しマップ」を参照してください。
  6. [親グループ]フィールドでは、親グループを設定して再帰的階層を作成することができます。
  7. [OK]をクリックしてダイアログを閉じます。グループヘッダとグループフッタの行は、Tableの詳細行の上と下に表示されます。
  8. Tableデータ領域にフィールドをドラッグ&ドロップし、グループヘッダの行に、グループ化が設定されているフィールドをドラッグします。
  9. レポートをプレビューして結果を確認します。

ヒント:[Table - グループ]ダイアログの他のタブを使用し、グループ化されたデータに対して、並べ替え、フィルタ、改ページおよびヘッダの繰り返しなどを設定することができます。

Tableで詳細行のグループ化を設定する

[詳細行のグループ化]オプションは、データの値をレポートに繰り返し表示したくない場合に便利です。

  1. Visual Studioのツールボックスから、Tableデータ領域をデザイナ面上にドラッグ&ドロップします。
  2. レポートでTableを選択した状態で、[プロパティ]ウィンドウの下部にあるコマンドから[プロパティ設定ダイアログ]リンクをクリックします。
  3. [Table]ダイアログの[詳細行のグループ化]ページへ移動します。グループ化の条件]フィールドで、データをグループ化したい式を入力します(例 =Fields!YearReleased.Value)。

    メモ: グループを追加すると、[名前]フィールドに「Table1_Detail_Group」のようなグループ名がデフォルトで表示されます。グループ名を変更するには、[グループ化の条件]でフィールド名または式を入力して[名前]オプションを有効にします。

Listで詳細行のグループ化を設定する

Listデータ領域でデータをグループ化するには、詳細のグループ化を設定します。[詳細行のグループ化]オプションは、レポートでデータの値を繰り返し表示したくない場合に便利です。

  1. Visual Studioのツールボックスから、Listデータ領域をデザイナ面上にドラッグ&ドロップします。
  2. レポートでListを選択した状態で、[プロパティ]ウィンドウの下部にあるコマンドから[プロパティ設定ダイアログ]リンクをクリックします。
  3. [List]ダイアログの[詳細行のグループ化]ページへ移動します。[グループ化の条件]フィールドでデータをグループ化したい式を入力します(例 =Fields!YearReleased.Value)。

    メモ: グループを追加すると、[名前]フィールドに「List1_Detail_Group」のようなグループ名がデフォルトで表示されます。グループ名を変更するには、[グループ化の条件]でフィールド名または式を入力して[名前]オプションを有効にします。
  4. [見出しマップラベル]フィールドでは、ラベルを設定して見出しマップに項目を追加することができます。追加方法の詳細については、「見出しマップ」を参照してください。
  5. [親グループ]フィールドでは、親グループを設定して再帰的階層を作成することができます。
  6. [OK]をクリックしてダイアログを閉じます。
  7. Listデータ領域にフィールドまたは他のデータ領域をドラッグ&ドロップし、プレビュータブへ移動してデータがグループ化されていることを確認します。

ヒント: Listの中に別のListを配置して入れ子式のグループ化を作成することも可能です。また、[List - 詳細行のグループ化]ダイアログの他のタブを使用し、グループ化されたデータに対して、フィルタ、改ページまたは並べ替えを設定できます。

BandedListでグループ化を設定する

BandedListデータ領域でデータをグループ化するには、グループのヘッダとフッタの行を追加します。

  1. Visual Studioのツールボックスから、BandedListデータ領域をデザイナ面上にドラッグ&ドロップします。
  2. BandedListデータ領域を右クリックし、[グループの挿入]を選択して、[BandedList - グループ]ダイアログを開きます。
    または
    レポートでBandedListを選択した状態で、[プロパティ]ウィンドウの下部にあるコマンドから[プロパティ設定ダイアログ]リンクをクリックします。
  3. [BandedList]ダイアログで[グループ化]ページへ移動し、[追加](+)ボタンをクリックして、手動でグループを作成します。
  4. [グループ化の条件]フィールドで、データをグループ化したいフィールド名または式を入力します(例 =Fields!YearReleased.Value)。

    メモ: グループを追加すると、[名前]フィールドに「BandedList1_Group1」のようなデフォルトのグループ名が表示されます。グループ名を変更するには、[グループ化の条件]でフィールド名または式を入力して[名前]オプションを有効にします。
  5. [見出しマップラベル]フィールドでは、ラベルを設定して見出しマップに項目を追加することができます。追加方法の詳細については、「見出しマップ」を参照してください。
  6. [親グループ]フィールドでは、親グループを設定して再帰的階層を作成することができます。
  7. [OK]をクリックしてダイアログを閉じます。
  8. BandedListデータ領域にフィールドをドラッグ&ドロップし、[プレビュー]タブへ移動してデータがグループ化されていることを確認します。

Tablixでグループ化を設定する

Tablixデータ領域でデータをグループ化するには、手動で、あるいは動的に行と列のグループを設定する必要があります。

  1. Visual Studioのツールボックスから、Tablixデータ領域をデザイナ面上にドラッグ&ドロップします。
  2. グループを入力する行または列を右クリックし、[列グループの追加]を選択します。これによりグループが追加され、[グループエディタ]ウインドウに表示されます。

    メモ: Tablixデータ領域をデザイナ面上に配置すると、デフォルトで行グループおよび列グループが1つずつ作成されます。詳細については、Tablixを参照してください。
  3. [グループエディタ]で、新しいグループを選択してそのプロパティを[プロパティ]ウィンドウで表示します。
  4. [プロパティ]ウィンドウで[Group]プロパティノードを開き、[GroupExpression]プロパティに表示される<...>ボタンをクリックして[式]を開きます。
  5. [式]が表示されたら、[追加]をクリックし、新しいグループ階層メンバを作成します。

  6. メンバリストからグループメンバを選択します。右側のプロパティグリッドにデータをグループ化したい式を入力します(例 式 =Fields!YearReleased.Value)。
  7. [OK]をクリックしてダイアログを閉じます。
  8. Tablixデータ領域の本体領域のセルにフィールドをドラッグ&ドロップし、[プレビュー]タブへ移動して結果を確認します。

詳細行のグループ化

詳細行のグループ化は、Listデータ領域とTableデータ領域で使用可能です。詳細の値を繰り返したくない場合に便利です。

たとえば、ReelsデータベースのMovieテーブルのデータを使用して詳細行のグループ化を設定せずに公開(年)を基に映画名をグループ化した場合、作成された各映画に対して該当する公開(年)がすべて表示されます。

これに対して、「=Fields!YearReleased.Value」へ詳細行のグループ化を設定した場合、各年が一度のみ表示されます。

メモ: 使用している詳細行のグループ化の式の結果が、データの各行に対して一意である場合(例 MovieID)は変化はありません。

再帰的階層

データで親子の関係を示したい場合、再帰的階層を作成することができます。実装するには、子グループに対する一意のIDフィールドと、親グループに対するIDフィールドが必要になります。

例:以下のSQLクエリを使用してReelsデータベースからデータを取得した場合。

SQLクエリ
コードのコピー
SELECT EmployeePosition.*, Employee.*, Employee_1.PositionID AS ManagerPosition FROM Employee AS Employee_1 RIGHT JOIN (EmployeePosition INNER JOIN Employee ON EmployeePosition.PositionID = Employee.PositionID) ON Employee_1.EmployeeID = Employee.ManagementID;

Tableデータ領域で、=Fields.Item("EmployeePosition.PositionID").Value フィールドを使用して詳細行のグループ化を設定することができます。さらに、 =Fields!ManagerPosition.Value フィールドを親グループとして、データで親子関係を示すことが可能です。

メモ: 親グループを設定する際は、単一のグループ式のみが使用可能です。

レベル関数

再帰的階層を用いてデータをよりわかりやすいかたちで表示するには、レベル関数を使用します。この関数はテキストにインデントを追加し、親データと子データの関係をさらに明確にします。実装するには、インデントしたいテキストボックスのPadding - Leftプロパティに式を設定します。

たとえば、Tableデータ領域で上記の再帰的階層の例を実現するには、レベルによってインデントを設定したタイトルを持つテキストボックスのPadding - Leftプロパティに次の式を設定することができます。

=Convert.ToString(2 + (Level()*10)) & "pt"