JS Days 2025 is now live – Join 5,000+ devs for the premier virtual JavaScript event. Register Now

5 Powerful Ext JS Pivot Grid Features

July 7, 2020 4107 Views
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

Guide to Estimating ROI When Switching From DIY Libraries to Full Software Development Platforms Like Ext JS

Teams started with Do It Yourself, or DIY, JavaScript tools like jQuery and Bootstrap. But those fall apart as projects scale. Scattered code, user interface…

Top Frameworks Developers Are Using for Custom Software Development in 2025

We’re seeing it more every year; teams aren’t settling for plug-and-play tools anymore. In healthcare, finance, logistics, and other data-heavy industries, there’s a clear shift.…

Meet Sencha AI Coding Companion: Your AI-Powered Assistant for Faster Ext JS Development

Building modern web applications should be exciting. But too often, developers find themselves buried in documentation, endlessly Googling framework quirks, or stuck solving the same…

Ext JS 7.9 & Rapid Ext JS V1.1 Have Arrived

The Sencha team is excited to announce the latest Ext JS version 7.9 and Rapid Ext JS 1.1 release – designed to accelerate development, enhance…

Top 10 JS Grid Customization Tips for a Better UI Experience

Grids are pretty much everywhere in web apps. Working with financial sheets, product details, or users? Then you’ve probably used a JavaScript grid. It makes…

Why Ext JS Framework is the Go-To Framework for Building Scalable and Data-Intensive Web Apps

Web apps are much more advanced now. They deal with large amounts of data and need to stay fast, even with many users. If you’re…

View More

Trusted by Top Developers: Learn how to enhance your development journey — for free

Get the latest newsletter keeping thousands of developers in the loop.

Loved by developers at