Integration with ApexCharts: Stacked column chart

Other charting libraries

by Flexmonster Pivot Table

HTML

<script src="https://cdn.flexmonster.com/flexmonster.js"></script>
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>

<div id="pivot-container"></div>

<div id="chart"></div>

CSS

@import url(https://cdn.flexmonster.com/assets/jsfiddle-styles.css);

#chart {
  margin-top: 20px;
}

JavaScript

const pivot = new Flexmonster({
  container: "pivot-container",
  componentFolder: "https://cdn.flexmonster.com/",
  licenseFilePath: "https://cdn.flexmonster.com/jsfiddle.charts.key",
  toolbar: true,
  height: 350,
  report: {
    dataSource: {
      filename: "data/data.json",
    },
    slice: {
      rows: [
        {
          uniqueName: "Category",
          filter: {
            exclude: ["Cars"],
          },
        },
      ],
      columns: [
        {
          uniqueName: "Country",
        },
        {
          uniqueName: "[Measures]",
        },
      ],
      measures: [
        {
          uniqueName: "Price",
          aggregation: "sum",
        },
      ],
    },
  },
  reportcomplete: function () {
    pivot.off("reportcomplete");
    pivot.getData({}, drawChart, updateChart);
  },
});

// Preprocess the data from Flexmonster
function prepareDataFunction(rawData) {
  const addCategory = (list, c) => {
    if (!list.includes(c)) list.push(c);
    return list;
  };

  const addSeries = (list, key, value) => {
    let seriesItemIdx = list.findIndex((el, idx, arr) => el.name === key);
    if (seriesItemIdx === -1) {
      list.push({
        name: key,
        data: [value],
      });
    } else {
      list[seriesItemIdx].data.push(value);
    }
    return list;
  };

  let data = {
    series: [],
    categories: [],
  };

  for (let element of rawData.data) {
    if (element.c0 && element.r0) {
      data.categories = addCategory(data.categories, element.c0);
      data.series = addSeries(data.series, element.r0, element.v0);
    }
  }

  return data;
}

// Store chart variable
let chart;

// Draw chart when the data is ready
function drawChart(rawData) {
  let data = prepareDataFunction(rawData);
  const options = {
    series: data.series,
    chart: {
      type: "bar",
      height: 400,
      stacked: true,
      toolbar: {
        show: true,
  ...