Introduction
In this article, I am going to explain how to create Pivoting table in Angular. In this article, I will give example for pivoting table for better understanding.
Pivoting allows you to take columns values and turn them into columns. For example, you can pivot on Student marksheet to make columns for Subject like Math, English, Hindi, Science, etc.
Pivot Mode
Pivot mode is needed to be True on for pivoting to work.
Pivot Columns
To pivot rows by a particular column, we should allow pivot=true
to the column you want to group with. You can set n number of columns that the grid can pivot by.
<ag-grid-angular
[columnDefs]="columnDefs"
/* other grid options ... */>
</ag-grid-angular>
this.columnDefs = [
{ field: "country", pivot: true },
{ field: "sport", pivot: true }
];
Pivot Column Groups
Multiple group columns will be shown in the grid when there is more than one active pivot column. These columns can be collapsed, expanded or fixed as described in the sections below:
Expandable Pivot Column Groups
When there is more than one active pivot column, multiple group columns will appear in a collapsed state by default. Each value column will be aggregated based on the configured colDef.aggFunc
at each column group level.
Example
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
import { ColDef, GridReadyEvent } from 'ag-grid-community';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
import 'ag-grid-enterprise';
@Component({
selector: 'my-app',
template: `<ag-grid-angular
style="width: 100%; height: 100%;"
class="ag-theme-alpine"
[columnDefs]="columnDefs"
[defaultColDef]="defaultColDef"
[autoGroupColumnDef]="autoGroupColumnDef"
[pivotMode]="true"
[rowData]="rowData"
(gridReady)="onGridReady($event)"
></ag-grid-angular>`,
})
export class AppComponent {
public columnDefs: ColDef[] = [
{ field: 'country', rowGroup: true, enableRowGroup: true },
{ field: 'athlete' },
{ field: 'sport', pivot: true, enablePivot: true },
{ field: 'year', pivot: true, enablePivot: true },
{ field: 'gold', aggFunc: 'sum' },
{ field: 'silver', aggFunc: 'sum' },
{ field: 'bronze', aggFunc: 'sum' },
];
public defaultColDef: ColDef = {
maxWidth: 140,
filter: true,
resizable: true,
};
public autoGroupColumnDef: ColDef = {
minWidth: 180,
};
public rowData!: any[];
constructor(private http: HttpClient) {}
onGridReady(params: GridReadyEvent) {
this.http
.get<any[]>('https://www.ag-grid.com/example-assets/olympic-winners.json')
.subscribe((data) => (this.rowData = data));
}
}
Fixed Pivot Column Groups
To fix the pivot column groups without the ability to expand and collapse the column groups, enable the following grid option property: suppressExpandablePivotGroups=true
.
Example
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
import { ColDef, GridReadyEvent } from 'ag-grid-community';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
import 'ag-grid-enterprise';
@Component({
selector: 'my-app',
template: `<ag-grid-angular
style="width: 100%; height: 100%;"
class="ag-theme-alpine"
[columnDefs]="columnDefs"
[defaultColDef]="defaultColDef"
[autoGroupColumnDef]="autoGroupColumnDef"
[pivotMode]="true"
[suppressExpandablePivotGroups]="true"
[rowData]="rowData"
(gridReady)="onGridReady($event)"
></ag-grid-angular>`,
})
export class AppComponent {
public columnDefs: ColDef[] = [
{ field: 'country', rowGroup: true, enableRowGroup: true },
{ field: 'athlete' },
{ field: 'sport', pivot: true, enablePivot: true },
{ field: 'year', pivot: true, enablePivot: true },
{ field: 'gold', aggFunc: 'sum' },
{ field: 'silver', aggFunc: 'sum' },
{ field: 'bronze', aggFunc: 'sum' },
];
public defaultColDef: ColDef = {
maxWidth: 140,
filter: true,
resizable: true,
};
public autoGroupColumnDef: ColDef = {
minWidth: 180,
};
public rowData!: any[];
constructor(private http: HttpClient) {}
onGridReady(params: GridReadyEvent) {
this.http
.get<any[]>('https://www.ag-grid.com/example-assets/olympic-winners.json')
.subscribe((data) => (this.rowData = data));
}
}
Pivot Row Totals
When in pivot mode you can also include automatically calculated Row Total Columns. These total columns will use the provided aggregation function on the value columns to 'roll-up' each group level. To enable Pivot Row Totals, declare the following property: gridOption.pivotRowTotals = 'before' | 'after'
. The values before
and after
are used to control the position of the row total columns relative to the other pivot columns.
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
import { ColDef, GridReadyEvent } from 'ag-grid-community';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
import 'ag-grid-enterprise';
@Component({
selector: 'my-app',
template: `<ag-grid-angular
style="width: 100%; height: 100%;"
class="ag-theme-alpine"
[columnDefs]="columnDefs"
[defaultColDef]="defaultColDef"
[autoGroupColumnDef]="autoGroupColumnDef"
[pivotMode]="true"
[pivotRowTotals]="pivotRowTotals"
[rowData]="rowData"
(gridReady)="onGridReady($event)"
></ag-grid-angular>`,
})
export class AppComponent {
public columnDefs: ColDef[] = [
{ field: 'country', rowGroup: true, enableRowGroup: true },
{ field: 'athlete' },
{ field: 'sport', pivot: true, enablePivot: true },
{ field: 'year', pivot: true, enablePivot: true },
{ field: 'gold', aggFunc: 'sum' },
{ field: 'silver', aggFunc: 'sum' },
{ field: 'bronze', aggFunc: 'sum' },
];
public defaultColDef: ColDef = {
maxWidth: 140,
filter: true,
resizable: true,
};
public autoGroupColumnDef: ColDef = {
minWidth: 180,
};
public pivotRowTotals = 'before';
public rowData!: any[];
constructor(private http: HttpClient) {}
onGridReady(params: GridReadyEvent) {
this.http
.get<any[]>('https://www.ag-grid.com/example-assets/olympic-winners.json')
.subscribe((data) => (this.rowData = data));
}
}
Pivot Column Group Totals
When in pivot mode you can also include automatically calculated total pivot columns. These total columns will use the provided aggregation function on the value columns to 'roll-up' each group level. Pivot column groups that contain more than one child will have a total column included. Expanding this group will reveal the columns that make up this total value. To enable total columns set gridOptions.pivotColumnGroupTotals = 'before' | 'after'
.
The values before
and after
are used to control the relative position of the total column when the group is expanded.
Example
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
import { ColDef, GridReadyEvent } from 'ag-grid-community';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
import 'ag-grid-enterprise';
@Component({
selector: 'my-app',
template: `<ag-grid-angular
style="width: 100%; height: 100%;"
class="ag-theme-alpine"
[columnDefs]="columnDefs"
[defaultColDef]="defaultColDef"
[autoGroupColumnDef]="autoGroupColumnDef"
[pivotMode]="true"
[pivotColumnGroupTotals]="pivotColumnGroupTotals"
[rowData]="rowData"
(gridReady)="onGridReady($event)"
></ag-grid-angular>`,
})
export class AppComponent {
public columnDefs: ColDef[] = [
{ field: 'country', rowGroup: true, enableRowGroup: true },
{ field: 'athlete' },
{ field: 'sport', pivot: true, enablePivot: true },
{ field: 'year', pivot: true, enablePivot: true },
{ field: 'gold', aggFunc: 'sum' },
{ field: 'silver', aggFunc: 'sum' },
{ field: 'bronze', aggFunc: 'sum' },
];
public defaultColDef: ColDef = {
maxWidth: 140,
filter: true,
resizable: true,
};
public autoGroupColumnDef: ColDef = {
minWidth: 180,
};
public pivotColumnGroupTotals = 'before';
public rowData!: any[];
constructor(private http: HttpClient) {}
onGridReady(params: GridReadyEvent) {
this.http
.get<any[]>('https://www.ag-grid.com/example-assets/olympic-winners.json')
.subscribe((data) => (this.rowData = data));
}
}
Summary
In this article, I have discussed how to create Pivoting table in angular.
Reference
https://www.ag-grid.com/angular-data-grid/pivoting/#pivot-column-group-totals