How can I help you?
Group and Caption Aggregate in Angular Grid Component
19 Mar 202612 minutes to read
Group footer and caption aggregates display summary values calculated from the records within each group.
To configure this in the grid, use the following properties on the AggregateColumnDirective:
- groupFooterTemplate: Display aggregate values in the group footer section.
- groupCaptionTemplate: Renders aggregate values in the group caption section.
- Set allowGrouping to
truein the grid to enable column grouping.- Set showGroupedColumn to
trueingroupSettingsto display grouped columns in the grid.
Group footer aggregates
Group footer aggregates appear in the footer row of each group and display summary values calculated from that group’s records. To render values in the group footer, use the groupFooterTemplate property in the AggregateColumnDirective.
The following example displays the sum of the “Freight” field in the footer of each group using the Syncfusion® Angular Grid:
import { data } from './datasource';
import { Component, OnInit } from '@angular/core';
import { AggregateService, GridModule, GroupService, GroupSettingsModel } from '@syncfusion/ej2-angular-grids';
@Component({
imports: [ GridModule ],
providers: [AggregateService, GroupService],
standalone: true,
selector: 'app-root',
templateUrl: 'app.template.html'
})
export class AppComponent implements OnInit {
public data?: Object[];
public groupOptions: GroupSettingsModel = { showDropArea: false, columns: ['ShipCountry'] };
ngOnInit(): void {
this.data = data;
}
}<ejs-grid [dataSource]='data' height='290px' [allowGrouping]="true" [groupSettings]="groupOptions">
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='right' width=120></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=150></e-column>
<e-column field='OrderDate' headerText='Order Date' format='yMd' width=120></e-column>
<e-column field='Freight' format='C2' width=150></e-column>
<e-column field='ShipCountry' headerText='Ship Country' width=150></e-column>
</e-columns>
<e-aggregates>
<e-aggregate>
<e-columns>
<e-column field="Freight" type="sum">
<ng-template #groupFooterTemplate let-data>Sum: {{data.sum}}</ng-template>
</e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-grid>import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));Inside the template, access each aggregate value using its type name. For example, use
data.sumto access the sum aggregate anddata.maxto access the maximum aggregate.
Group caption aggregates
Group caption aggregates are displayed in the caption cells at the top of each group, providing a quick summary of the grouped data. To render these aggregates, use the groupCaptionTemplate property, which allows to display aggregate values in the group caption cells.
The following example displays the max of the “Freight” field in the each group caption cell using the Syncfusion® Angular Grid:
import { data } from './datasource';
import { Component, OnInit } from '@angular/core';
import { AggregateService, GridModule, GroupService, GroupSettingsModel } from '@syncfusion/ej2-angular-grids';
@Component({
imports: [ GridModule ],
providers: [AggregateService, GroupService],
standalone: true,
selector: 'app-root',
templateUrl: 'app.template.html'
})
export class AppComponent implements OnInit {
public data?: Object[];
public groupOptions: GroupSettingsModel = { showDropArea: false, columns: ['ShipCountry'] };
ngOnInit(): void {
this.data = data;
}
}<ejs-grid [dataSource]='data' height='290px' [allowGrouping]="true" [groupSettings]="groupOptions">
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='right' width=120></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=150></e-column>
<e-column field='OrderDate' headerText='Order Date' format='yMd' width=120></e-column>
<e-column field='Freight' format='C2' width=150></e-column>
<e-column field='ShipCountry' headerText='Ship Country' width=150></e-column>
</e-columns>
<e-aggregates>
<e-aggregate>
<e-columns>
<e-column field="Freight" type="max">
<ng-template #groupCaptionTemplate let-data>Max: {{data.max}}</ng-template>
</e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-grid>import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));By default, the group total summary is calculated for the current page records within each group. Set groupSettings.disablePageWiseAggregates to
trueto calculate aggregates using all records in the grouped dataset.
Disable page wise aggregates for grouping
In some cases, disabling the page-wise aggregates for grouping is necessary. By default, when grouping is enables with pagination, the Syncfusion® Angular Grid calculates group aggregates only for the current page.
To calculate aggregates across the entire grouped data, set the groupSettings.disablePageWiseAggregates property to true.
import { data } from './datasource';
import { Component, OnInit } from '@angular/core';
import { AggregateService, GridModule, GroupService, GroupSettingsModel, PageService, PageSettingsModel } from '@syncfusion/ej2-angular-grids';
@Component({
imports: [ GridModule ],
providers: [AggregateService, GroupService, PageService],
standalone: true,
selector: 'app-root',
templateUrl: 'app.template.html'
})
export class AppComponent implements OnInit {
public data?: Object[];
public groupOptions: GroupSettingsModel = { showDropArea: false, columns: ['ShipCountry'], disablePageWiseAggregates: true, };
public pageOptions: PageSettingsModel = { pageSize: 5 };
ngOnInit(): void {
this.data = data;
}
}<ejs-grid [dataSource]='data' height='255px' [allowPaging]="true" [allowGrouping]="true" [groupSettings]="groupOptions" [pageSettings]="pageOptions">
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='right' width=120></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=150></e-column>
<e-column field='OrderDate' headerText='Order Date' format='yMd' width=120></e-column>
<e-column field='Freight' format='C2' width=150></e-column>
<e-column field='ShipCountry' headerText='Ship Country' width=150></e-column>
</e-columns>
<e-aggregates>
<e-aggregate>
<e-columns>
<e-column field="Freight" type="sum">
<ng-template #groupFooterTemplate let-data>Sum: {{data.sum}}</ng-template>
</e-column>
<e-column field="Freight" type="max">
<ng-template #groupCaptionTemplate let-data>Max: {{data.max}}</ng-template>
</e-column>
<e-column field="Freight" type="sum">
<ng-template #footerTemplate let-data>Sum: {{data.sum}}</ng-template>
</e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-grid>import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));