Hello,
I have pivot grid control and I'm trying to display several charts according to this pivot.
when the data is expanded the charts present correct data but when I start collapsing the columns the data in the charts starts freaking out and some of the data is missing and the other one is incorrect or displaying duplicated values.
I have tried the solutions proposed in the following thread: but seems like it still doesn't work.
any idea?
Please see the code below.
functionloadPivotWWvsBoard() {
$(
"#divPivot"
).html(
""
);
$(
"#divConfigurator"
).html(
""
);
var
collapsed = {
columns: [],
rows: []
};
/*define the data source*/
var
DataSource;
jQuery.ajaxSetup({
async:
false
});
$.get(
"/Report/GetDeliveredReportJSON"
, { fromWW: $(
"#FromWW"
).val(), toWW: $(
"#ToWW"
).val() }).done(
function
(data) {
DataSource = data;
})
var
dataSource =
new
kendo.data.PivotDataSource({
data: DataSource
, type:
"xmla"
, schema: {
model: {
fields: {
"Project"
: {
type:
"string"
}
, Board: {
type:
"string"
}
, WW: {
type:
"string"
}
,
"ApproveDate"
: {
field:
"ApproveDate"
, type:
"date"
}
, ReceiverName: {
field:
"ReceiverName"
}
, RequestorName: {
field:
"RequestorName"
}
, ApprovingManager: {
field:
"ApprovingManager"
}
, PartTrans: {
field:
"PartTrans"
}
, SerialNumber: {
field:
"SerialNumber"
}
, OpeningDate: {
field:
"OpeningDate"
}
, DeliveredDate: {
field:
"DeliveredDate"
}
, ApprovalType: {
field:
"ApprovalType"
}
, DateDifference: {
field:
"DateDifference"
}
, ReportType: {
field:
"ReportType"
}
, BusinessLine: {
field:
"BusinessLine"
}
, Branch: {
field:
"Branch"
}
, ManagerType: {
field:
"ManagerType"
}
, CostCenter: {
field:
"CostCenter"
}
, SapOrder: {
field:
"SapOrder"
}
,
}
}
, cube: {
dimensions: {
"Project"
: {
caption:
"Project"
}
, Board: {
caption:
"Board"
}
, WW: {
caption:
"WW"
}
,
"ApproveDate"
: {
caption:
"Approve Date"
}
}
, measures: {
"Delivered Quantity"
: {
field:
"SerialNumber"
, aggregate:
"count"
}
}
}
}
, columns: [{
name:
"Project"
, expand:
true
},
{
name:
"Board"
, expand:
true
}]
, rows: [{
name:
"WW"
}]
, measures: [
"Delivered Quantity"
]
});
dataSource.filter(loadFiltersForGrid(
false
))
dataSource.fetch(
function
() {
console.log(
"data source created successfuly"
, dataSource);
});
/*define the pivot*/
var
pivotgrid = $(
"#divPivot"
)
.kendoPivotGrid({
filterable:
true
,
sortable:
true
,
collapseMember:
function
(e) {
var
axis = collapsed[e.axis];
var
path = e.path[0];
if
(axis.indexOf(path) === -1) {
axis.push(path);
}
},
expandMember:
function
(e) {
var
axis = collapsed[e.axis];
var
index = axis.indexOf(e.path[0]);
if
(index !== -1) {
axis.splice(index, 1);
}
},
dataSource: dataSource
, dataBound:
function
() {
this
.dataSource.expandColumn([
"Project"
,
"Board"
]);
this
.dataSource.expandColumn([
"Project"
]);
this
.dataSource.expandRow([
"WW"
]);
// this.dataSource.filter(filters);
initChart(convertData(
this
.dataSource, collapsed,
"Project"
));
initChart2(convertData(
this
.dataSource, collapsed,
"Board"
));
}
})
.data(
"kendoPivotGrid"
);
/*define the chart*/
functioninitChart(data) {
$(
"#divChart1"
).kendoChart({
dataSource: {
data: data,
group:
"column"
},
title: {
text:
"Delivered quantity by project"
},
legend: {
position:
"top"
},
seriesDefaults: {
type:
"bar"
},
series: [{
type:
"column"
,
field:
"measure"
,
}],
categoryAxis: {
field:
"row"
, padding: {
top: 135
}
, majorGridLines: {
visible:
true
}
},
valueAxis: {
majorGridLines: {
visible:
true
}
},
tooltip: {
visible:
true
,
format:
"{0}"
,
template:
"#= series.name #: #= value #"
},
dataBound:
function
(e) {
// e.sender.options.categoryAxis.categories.sort()
}
});
}
functioninitChart2(data) {
$(
"#divChart2"
).kendoChart({
dataSource: {
data: data,
group:
"column"
},
title: {
text:
"Delivered quantity by board"
},
legend: {
position:
"top"
},
seriesDefaults: {
type:
"bar"
},
series: [{
type:
"column"
,
field:
"measure"
,
}],
categoryAxis: {
field:
"row"
, padding: {
top: 135
}
, majorGridLines: {
visible:
true
}
},
valueAxis: {
majorGridLines: {
visible:
true
}
},
tooltip: {
visible:
true
,
format:
"{0}"
,
template:
"#= series.name #: #= value #"
},
dataBound:
function
(e) {
// e.sender.options.categoryAxis.categories.sort()
}
});
}
}
functionflattenTree(tuples) {
tuples = tuples.slice();
var
result = [];
var
tuple = tuples.shift();
var
idx, length, spliceIndex, children, member;
while
(tuple) {
//required for multiple measuresif (tuple.dataIndex !== undefined) {
result.push(tuple);
}
spliceIndex = 0;
for
(idx = 0, length = tuple.members.length; idx < length; idx++) {
member = tuple.members[idx];
children = member.children;
if
(member.measure) {
[].splice.apply(tuples, [0, 0].concat(children));
}
else
{
[].splice.apply(tuples, [spliceIndex, 0].concat(children));
}
spliceIndex += children.length;
}
tuple = tuples.shift();
}
return
result;
}
functionisCollapsed(tuple, collapsed) {
var
name = tuple.members[0].parentName;
for
(
var
idx = 0, length = collapsed.length; idx < length; idx++) {
if
(collapsed[idx] === name) {
console.log(name);
returntrue;
}
}
returnfalse;
}
functionconvertData(dataSource, collapsed, type) {
var
columnTuples = flattenTree(dataSource.axes().columns.tuples || [], collapsed.columns);
var
rowTuples = flattenTree(dataSource.axes().rows.tuples || [], collapsed.rows);
var
data = dataSource.data();
var
rowTuple, columnTuple;
var
idx = 0;
var
result = [];
var
columnsLength = columnTuples.length;
for
(
var
i = 0; i < rowTuples.length; i++) {
rowTuple = rowTuples[i];
if
(!isCollapsed(rowTuple, collapsed.rows)) {
for
(
var
j = 0; j < columnsLength; j++) {
columnTuple = columnTuples[j];
if
(!isCollapsed(columnTuple, collapsed.columns)) {
if
(idx > columnsLength && idx % columnsLength !== 0) {
var
memebrtype;
if
(type ==
"Board"
) {
memebrtype = 1
}
else
{
memebrtype = 0
}
var
columninfo = GetChildren(columnTuple.members[memebrtype], type);
if
(columninfo) {
result.push({
measure: Number(data[idx].value),
column: columninfo,
row: rowTuple.members[0].caption
});
}
}
}
idx += 1;
}
}
}
return
result;
}
functionGetChildren(parent, type) {
var
result = undefined;
if
(parent.hasChildren || result != undefined) {
for
(
var
i = 0; i < parent.children.length; i++) {
result = GetChildren(parent.children[i], type);
}
}
else
{
result = parent.caption;
}
if
(result == type) {
result = undefined;
}
return
result;
}