I'm trying to group a datasource by two fields and get the average or sum of their values. But even if I specify both group and aggregate properties in the datasource, I can't get it.
Here is the code:
var dataSource = new kendo.data.DataSource({
data: [
{ id: 1, name: "Amazon US", stock: 15, year: 2015},
{id: 2,name: "Amazon US", stock: 20, year: 2016 },
{id: 3,name: "Amazon US", stock: 7, year: 2016 },
{ id: 4, name: "Amazon EU", stock: 30, year: 2015 },
{ id: 5, name: "Amazon EU", stock: 7, year: 2015 },
{ id: 6, name: "Amazon EU", stock: 12, year: 2016 },
{ id: 7, name: "Amazon EU", stock: 26 , year: 2016}
],
schema: { // required if get method will be used
model: {
id: "id"
}
}
})
dataSource.read();
dataSource.bind("change", function() {
var log = $("#log");
log.append("<P>total records in datasource is " + this.total() + "</p>" );
var A = this.aggregates();
log.append("<p>total stock is " + A.stock.sum + "</p>" );
})
.aggregate({ field: "stock", aggregate: "sum" });
And here a working example: http://jsfiddle.net/rusev/NwG9A/2/
The expected result for the sum should be:
- AmazonUS | 2015 | 15
- AmazonUS | 2016 | 27
- AmazonEU | 2015 | 37
- AmazonEU | 2016 | 38
Does anyone have a clue if this is possible with the KendoUI datasource?
The approach if calinaadi is correct. There is also a way to extract the aggregate information from the DataSource programmatically via recursion. Each grouped item has a
value
,aggregates
anditems
fields that you can use - see them in the debugger.