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]);
					      }
				     ...