|
PIN |
TYPES |
MINUse | |||
|
00123 |
Sleep (21.51%) |
40274 | |||
|
00123 |
Unknown (19.75%) |
36993 | |||
|
00123 |
Exercise (13.89%) |
26012 | |||
|
00123 |
Email & messaging (6.91%) |
12943 | |||
|
45000 |
Sleep (0.47%) |
882 | |||
|
45000 |
Unknown (0.77%) |
1433 | |||
|
45000 |
Exercise (0.04%) |
76 | |||
|
45000 |
Email & messaging (2.94%) |
5503 | |||
Hi,
I have a Google visualization dashboard with a table (as a chart
wrapper) a categoryfilter (as a controlwrapper).
The dashboard works fine.
My Table looks like this.
I have created pieChart using TYPES and MINUse values from the table and the PIN as Category picker.
As you can see for every PIN the TYPES are repeating . And in my pie chart I see repeating TYPEs. But what I want is when the Category picker value is ‘Choose a Value’ the MINUse will be sum of all MINUse for that perticular TYPEs, for example, for ‘sleep’ Type ,instead of displaying 2 chart sections in the pie chart for
|
00123 |
Sleep (21.51%) |
and
|
45000 |
Sleep (0.47%) |
There would be only one pie section for sleep (40274+882=41156).
And when I will select individual PIN I will see the TYPES related to this. (Which is working now.)
Hope I explained it properly.
I Really need help on this.
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'mdn');
data.addColumn('string', 'category');
data.addColumn('number', 'kbUsage');
//alert("inside drawChart");
for(var i=0;i<queryObjectLen;i++)
{
var category = queryObject.empdetails[i].category;
//alert(category);
var kbUsage = queryObject.empdetails[i].kbUsage;
//alert(kbUsage);
var mdn = queryObject.empdetails[i].mdn;
//alert(mdn);
data.addRows([
[mdn,category,parseInt(kbUsage)]
]);
}
var options = {
title: 'Category Information',
legend: {position: 'right', textStyle: {color: 'black', fontSize: 9}},
is3D: true,
pieSliceText: 'percentage',
sliceVisibilityThreshold:0,
vAxis: {maxValue: 70},
chartArea: {height: '85%', top: '13%'},
tooltip: { text: 'percentage'},
left:30,top:20,width:"100%",height:"100%"
/*backgroundColor: {
stroke: 'gray',
strokeWidth: 1
}*/
};
var total = 0;
for (var i = 0; i < data.getNumberOfRows(); i++) {
total += data.getValue(i, 2);
}
//alert(total);
var legend = document.getElementById("legend");
var legItem = [];
var colors = ['#e0440e', '#e6693e', '#ec8f6e', '#f3b49f', '#f6c7b6', '#f3aaaa', '#f6cccc'];
for (var i = 0; i < data.getNumberOfRows(); i++) {
var label = data.getValue(i, 1);
var value = data.getValue(i, 2);
//alert(value);
var percent = Number(100 * value / total).toFixed(2);
data.setFormattedValue(i, 1, label + ' (' + percent + '%)');
}
var categoryPicker = new google.visualization.ControlWrapper({
controlType: 'CategoryFilter',
containerId: 'control3',
options: {
filterColumnLabel: 'mdn',
ui: {
labelStacking: 'vertical',
allowTyping: false,
allowMultiple: false,
caption : 'All MDNs'
}
}
});
// Define a table
var table = new google.visualization.ChartWrapper({
chartType: 'Table',
containerId: 'chart2',
options: {
width: '500px'
}
});
// Define a Pie chart
var pie = new google.visualization.ChartWrapper({
chartType: 'PieChart',
containerId: 'chart1',
options: options,
// Instruct the piechart to use colums 1 (Category) and 2 (KB)
// from the 'data' DataTable.
view: {
columns: [1, 2]
}
});
// get average values
google.visualization.events.addListener(table, 'ready', function () {
var group = google.visualization.data.group(table.getDataTable(), [1] [{
// we need a key column to group on, but since we want all rows grouped into 1,
// then it needs a constant value
column: 2,
aggregation: google.visualization.data.sum,
type: 'number',
modifier: function () {
return 1;
}
}]);
document.getElementById('avg').innerHTML = group.getValue(0, 1);
//document.getElementById('geomean').innerHTML = group.getValue(0, 2);
});
//var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
var chart = new google.visualization.Dashboard(document.getElementById('dashboard')). bind([categoryPicker], [table,pie]);
google.visualization.events.addListener(chart, 'error', function (err) {
google.visualization.errors.removeError(err.id);
});
chart.draw(data);
}
var queryObject="";
var queryObjectLen="";
// google.load("visualization", "1", {packages:["corechart"]});
google.load('visualization', '1', { 'packages': ['corechart', 'controls']});
$(document).ready(function(){
$("#ajaxform").on('submit', function(e)
{
spinner.spin(target);
$("#contact-submit").prop('disabled', true);
$("#reset").prop('disabled', true);
$("#print").prop('disabled', true);
$("#saveAs").prop('disabled', true);
e.preventDefault();
// getting the values of both firstname and lastname
var beginDate = $('input[name="txtBeginDate"]').val();
var endDate = $('input[name="txtEndDate"]').val();
// var mdnVal = $('input[name="txtMsid"]').val();
var val3gOr4g = $('input:radio[name="3gOr4g"]:checked').val();
var midVal= jQuery("textarea#txtMIDID").val();
var DataMid = JSON.stringify({midVal: midVal});
// posting the values
var dataString = 'beginDate=' + beginDate + '&endDate=' + endDate+ '&val3gOr4g=' + val3gOr4g+'&DataMid=' + DataMid;
//alert(dataString)
var formURL = $(this).attr("action");
//alert(formURL);
$.ajax(
{
url : formURL,
dataType:'json',
data: dataString,
success:function(data){
queryObject = eval('(' + JSON.stringify(data) + ')');
queryObjectLen = queryObject.empdetails.length;
//alert("here");
drawChart();
//ajaxindicatorstop();
spinner.stop();
document.getElementById("label").style.display = "inline";
$("#contact-submit").prop('disabled', false);
$("#reset").prop('disabled', false);
$("#print").prop('disabled', false);
$("#saveAs").prop('disabled', false);
},
error : function(data, xhr, type) {
var msg = data.responseText;
//alert($.trim(msg))
//ajaxindicatorstop();
spinner.stop();
$("#contact-submit").prop('disabled', false);
$("#reset").prop('disabled', false);
$("#print").prop('disabled', false);
$("#saveAs").prop('disabled', false);
}
});
e.preventDefault(); //STOP default action
e.unbind(); //unbind. to stop multiple form submit.
});
});
function getImgData(chartContainer) {
var chartArea = chartContainer.getElementsByTagName('svg')[0].parentNode;
var svg = chartArea.innerHTML;
var doc = chartContainer.ownerDocument;
var canvas = doc.createElement('canvas');
canvas.setAttribute('width', chartArea.offsetWidth);
canvas.setAttribute('height', chartArea.offsetHeight);
canvas.setAttribute(
'style',
'position: absolute; ' +
'top: ' + (-chartArea.offsetHeight * 2) + 'px;' +
'left: ' + (-chartArea.offsetWidth * 2) + 'px;');
doc.body.appendChild(canvas);
canvg(canvas, svg);
var imgData = canvas.toDataURL("image/png");
canvas.parentNode.removeChild(canvas);
return imgData;
}
function saveAsImg(chartContainer) {
var imgData = getImgData(chartContainer);
// triggering download doesn't work in IE 9, so we open the img in a <img> tag instead
// uses jQuery for browser detection
jQuery.browser={};
(function(){
jQuery.browser.msie=false;
jQuery.browser.version=0;
if(navigator.userAgent.match(/MSIE ([0-9]+)\./)){
jQuery.browser.msie=true;
jQuery.browser.version=RegExp.$1;}
})();
if ($.browser.msie) {
if ($.browser.version == 9) {
var w = open();
var img = w.document.createElement('img');
img.src = imgData;
w.document.body.appendChild(img);
setTimeout(function() {
w.alert('Right-click image and select "Save As"');
}, 500);
}
else if ($.browser.version < 9) {
alert('Saving charts is not possible in versions of IE older than 9');
}
}
else {
// Replacing the mime-type will force the browser to trigger a download
// rather than displaying the image in the browser window.
window.location = imgData.replace('image/png', 'image/octet-stream');
}
}
</script>
...containerId: 'chart2',</font
...&nbs