function pivotTable(dataset) {
        var column_names = [];
        var xvalues = [];
        var values = {};
        var rows = {};
        for (rn in dataset.data) {
            // at first run fill the existing data (rows/columns/values)
            if (rn == 0) {
                // skip first row as it contains column names we don't need for pivot
                continue;
            }
            var val1 = dataset.data[rn][0];
            var val2 = dataset.data[rn][1];
            if (column_names.indexOf(val2) == -1) {
                column_names.push(val2);
            }
            if (xvalues.indexOf(val1) == -1) {
                xvalues.push(val1);
            }
            if (!(val1 in values)) {
                values[val1] = [];
            }
            values[val1][val2] = dataset.data[rn][2];
        }

        for (n in xvalues) {
            // at second run fill the missing values with nulls
            var val1 = xvalues[n];
            rows[val1] = [];
            for (m in column_names) {
                var val2 = column_names[m];
                if (val1 in values && val2 in values[val1]) {
                    rows[val1].push(values[val1][val2]);
                } else {
                    rows[val1].push(null);
                }
            }
        }

        var res = [];
        column_names.unshift(dataset.fields[0].name);
        res.push(column_names); // first row is pivot column names
        xvalues.forEach(function (item) {
            var r = [item].concat(rows[item]);
            res.push(r);
        });

        return res;
    }
function pivotTable(dataset) {
        var column_names = [];
        var xvalues = [];
        var values = {};
        var rows = {};
        for (rn in dataset.data) {
            
            if (rn == 0) {
                
                continue;
            }
            var val1 = dataset.data[rn][0];
            var val2 = dataset.data[rn][1];
            if (column_names.indexOf(val2) == -1) {
                column_names.push(val2);
            }
            if (xvalues.indexOf(val1) == -1) {
                xvalues.push(val1);
            }
            if (!(val1 in values)) {
                values[val1] = [];
            }
            values[val1][val2] = dataset.data[rn][2];
        }

        for (n in xvalues) {
            
            var val1 = xvalues[n];
            rows[val1] = [];
            for (m in column_names) {
                var val2 = column_names[m];
                if (val1 in values && val2 in values[val1]) {
                    rows[val1].push(values[val1][val2]);
                } else {
                    rows[val1].push(null);
                }
            }
        }

        var res = [];
        column_names.unshift(dataset.fields[0].name);
        res.push(column_names); 
        xvalues.forEach(function (item) {
            var r = [item].concat(rows[item]);
            res.push(r);
        });

        return res;
    }
function pivotTable ( dataset ) { var column_names = [ ] ; var xvalues = [ ] ; var values = { } ; var rows = { } ; for ( rn in dataset . data ) { // at first run fill the existing data (rows/columns/values) if ( rn == 0 ) { // skip first row as it contains column names we don't need for pivot continue ; } var val1 = dataset . data [ rn ] [ 0 ] ; var val2 = dataset . data [ rn ] [ 1 ] ; if ( column_names . indexOf ( val2 ) == - 1 ) { column_names . push ( val2 ) ; } if ( xvalues . indexOf ( val1 ) == - 1 ) { xvalues . push ( val1 ) ; } if ( ! ( val1 in values ) ) { values [ val1 ] = [ ] ; } values [ val1 ] [ val2 ] = dataset . data [ rn ] [ 2 ] ; } for ( n in xvalues ) { // at second run fill the missing values with nulls var val1 = xvalues [ n ] ; rows [ val1 ] = [ ] ; for ( m in column_names ) { var val2 = column_names [ m ] ; if ( val1 in values && val2 in values [ val1 ] ) { rows [ val1 ] . push ( values [ val1 ] [ val2 ] ) ; } else { rows [ val1 ] . push ( null ) ; } } } var res = [ ] ; column_names . unshift ( dataset . fields [ 0 ] . name ) ; res . push ( column_names ) ; // first row is pivot column names xvalues . forEach ( function ( item ) { var r = [ item ] . concat ( rows [ item ] ) ; res . push ( r ) ; } ) ; return res ; }
return a pivot data for a dataset
return a pivot data for a dataset