Column chart: prepareDataFunction for drill down to the lowest level
Integration with Google Charts
by Ravi A
HTML
<link rel="stylesheet" href="https://s3.amazonaws.com/flexmonster/2.3/demo.css">
<script src="https://cdn.flexmonster.com/flexmonster.js"></script>
<script src="https://cdn.flexmonster.com/lib/flexmonster.googlecharts.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<div id="pivot-container"></div>
<div id="googlechart-container" style="height:250px;"></div>
JavaScript
var pivot = new Flexmonster({
container: "pivot-container",
componentFolder: "https://cdn.flexmonster.com/",
report: {
dataSource: {
data: getJSONData()
},
slice: {
rows: [
{uniqueName: "Business Type"},
{uniqueName: "Category"}
],
columns: [
{uniqueName: "[Measures]"}
],
measures: [
{uniqueName: "Price"},
{uniqueName: "Quantity"},
{uniqueName: "Discount"}
]
}
},
height: 280,
toolbar: true,
reportcomplete: function() {
pivot.off("reportcomplete");
pivotTableReportComplete = true;
createGoogleChart();
}
});
var pivotTableReportComplete = false;
var googleChartsLoaded = false;
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(onGoogleChartsLoaded);
function onGoogleChartsLoaded() {
googleChartsLoaded = true;
if (pivotTableReportComplete) {
createGoogleChart();
}
}
function createGoogleChart() {
if (googleChartsLoaded) {
pivot.googlecharts.getData(
{
prepareDataFunction: function(data, options) {
var output = {};
var table = [];
var prevLevels = [];
for (var i = 0; i < data.data.length; i++) {
var j = 0;
var maxLevel = data.meta["rAmount"] - 1;
if (i == 0) {
var xAxisName = (data.meta["r"+maxLevel+"Name"] != undefined) ? data.meta["r"+maxLevel+"Name"] : "";
var headerRow = [xAxisName];
for (j = 0; j < data.meta["vAmount"]; j++) {
headerRow.push(data.meta["v"+j+ "Name"]);
}
table.push(headerRow);
}
var record = data.data[i];
if (record["r"+maxLevel] == undefined) {
continue; //skip if not the deepest level
} else {
if (prevLevels.length == 0) {
for (j = 0; j < maxLevel; j++) {
prevLevels.push(record["r"+j]);
}
...