Try Upgrade Adviser – Scan Your Ext JS Codebase for V8 App Upgrade

5 Powerful Ext JS Pivot Grid Features

July 7, 2020 5902 Views

Get a summary of this article:

Show

The Ext JS Pivot Grid provides a simple way to condense many data points into a format to quickly draw insights and trends from data. In this post we cover 5 powerful Ext JS Pivot Grid features.

1. Axis and Aggregation

 The Pivot Grid relies on two pieces that extend the native grid panel:

  • Axis: allows you to determine row and column placement
  • Aggregation: manages the grouping calculations

 These pieces need to be defined on the pivot matrix object used by the Pivot Grid.
Simple Pivot
How to:
1. Create a Pivot Grid with “matrix” object

Ext.define('Fiddle.view.pivot.Grid', {
	extend: 'Ext.pivot.Grid',
	xtype: 'configurable-pivot-grid',
	controller: 'pivotgrid',
 
	title: 'Pivot Grid',
 
	matrix: {
    	store: {
            type: 'sales'
    	}
	}
});

2. Add axis configuration

 
matrix: {
	store: {
    	type: 'sales'
	},
	leftAxis: [{
    	dataIndex: 'person',
    	header: 'Person'
	},{
    	dataIndex: 'year',
    	header: 'Year'
	}],
	topAxis: [{
    	dataIndex: 'continent',
    	header: 'Continent'
	}, {
    	dataIndex: 'country',
    	header: 'Country'
	}]
}

3. Add aggregation configuration

 
matrix: {
	store: {
    	type: 'sales'
	},
	leftAxis: [{
    	dataIndex: 'person',
    	header: 'Person'
	},{
    	dataIndex: 'year',
    	header: 'Year'
	}],
	topAxis: [{
    	dataIndex: 'continent',
    	header: 'Continent'
	}, {
    	dataIndex: 'country',
    	header: 'Country'
	}],
	aggregate: [{
    	dataIndex: 'value',
    	header: 'Total',
    	aggregator: 'sum'
	}]
}

Sencha Fiddle:

Many in-built methods are available such as sum, average, min and so on but it is possible to define a custom method to aggregate data:

 
aggregator: 'myOwnFn'

2. Filtering

  • Filtering by label

Filtering to display the year 2016.

Pivot Grid

 
leftAxis: [{
    dataIndex: 'person',
    header: 'Person'
}, {
    dataIndex: 'year',
    header: 'Year',
    filter: {
        type: 'label',
        operator: '=',
        value: 2016
    }
}]

Sencha Fiddle:

  • Filtering by value

Filtering to display the 3-best year

 
matrix: {
	store: {
    	type: 'sales'
	},
	aggregate: [{
    	dataIndex: 'value',
    	header: 'Total',
    	aggregator: 'sum',
    	id: 'agg',
	}],
	leftAxis: [{
    	dataIndex: 'person',
    	header: 'Person'
	}],
	topAxis: [{
    	dataIndex: 'year',
    	header: 'Year',
    	filter: {
            type: 'value',
            operator: 'top10',
            topType: 'items',
            topOrder: 'top',
            dimensionId: 'agg',
            value: 3
     	}
	}]
}

Sencha Fiddle:

3. Multiple Grand Totals

With a Pivot Grid it’s possible to add multiple grand totals.
How to:

 
listeners: {
	pivotbuildtotals: function (matrix, totals) {
    	var dataAvg = {},
            dataMax = {};
        Ext.Array.each(matrix.model, function (field) {
            var result,
                agg;
            if (field.col && field.agg) {
                agg = matrix.aggregate.getByKey(field.agg);
                result = matrix.results.get(matrix.grandTotalKey, field.col);
                if (result && agg) {
                    dataAvg = result.calculateByFn(
                        'totalavg',
                        agg.dataIndex,
                        Ext.pivot.Aggregators.avg);
                    dataMax = result.calculateByFn(
                        'totalmax',
                        agg.dataIndex,
                        Ext.pivot.Aggregators.max);
                }
            }
    	});
    	totals.push({
            title: 'Grand total (avg)',
            values: dataAvg
    	}, {
            title: 'Grand total (max)',
            values: dataMax
    	});
	}
}

Sencha Fiddle:

4. Range Grouping

How to:

 
{
	dataIndex: 'year',
	header: 'Year',
	grouperFn: function (record) {
 
    	var dataIndex = this.dataIndex,
 
            recIndex = record.get(dataIndex);
 
    	if (recIndex >= 1980 && recIndex < 1990) return "80'"; if (recIndex >= 1990 && recIndex < 2000) return "90'"; if (recIndex >= 2000 && recIndex < 2010) return "00'";
 
    	return 'Rest';
	}
}

Sencha Fiddle:

5. Drill Down

Drilldown

How to:

 
Ext.define('Fiddle.view.pivot.Grid', {
    extend: 'Ext.pivot.Grid',
    xtype: 'configurable-pivot-grid',
    controller: 'pivotgrid',
    title: 'Pivot Grid',
    //Add drill down plugin
    plugins: {
        pivotdrilldown: true
    },
    matrix: {
        /* Matrix configuration */
    }
});

Sencha Fiddle:

Build Your Pivot Grid with Ext JS 7.2

The free 30-day trial of Ext JS 7.2 provides full access to the product features. Get started today and see how you can build a powerful pivot grid to make insights from data more apparent.

Recommended Articles

Creating a Mobile Application with Ext JS and Capacitor

Introduction Modern mobile applications demand rich user experiences, cross-platform compatibility, and rapid development cycles. In this document, you will learn how Ext JS and Capacitor…

Building Real-Time Dashboards with WebSockets and Frontend Frameworks

Real-time dashboards have become essential in industries where users need instant visibility into changing data. Whether monitoring financial transactions, logistics operations, industrial systems, application health,…

Front-End Frameworks Compared in 2026: Performance, Use Cases, and Trade-offs

Front-end framework selection in 2026 centers on three critical decisions: complete platform versus ecosystem assembly, performance at enterprise scale, and long-term maintenance costs. Ext JS…

Enhancing Component Logic: A Developer’s Guide to Ext JS Plugins

In the world of Ext JS, reusability is king. While subclassing a component is a common approach to extend functionality, it often leads to rigid…

Upgrading Ext JS 7.x to 8.0: A Practical Enterprise Guide

For teams already running Ext JS 7.x, upgrading to Ext JS 8.0 is usually a manageable modernization step rather than a full-scale rebuild. Because the…

Upgrading Ext JS 6.x to 8.0: A Practical Guide

For organizations maintaining Ext JS 6.x applications, upgrading to Ext JS 8.0 is typically a modernization exercise focused on stability, maintainability, tooling alignment, and validation…

View More