Flexmonster - Pivot Table demo

Demos

HTML

<link rel="stylesheet" href="https://s3.amazonaws.com/flexmonster/2.3/demo.css">
<script src="https://cdn.flexmonster.com/flexmonster.js"></script>

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

CSS

.fm-custom-cell {
  display: flex !important;
  align-items: center !important;
  font-size: 12px !important;
}

.fm-custom-cell .flag-icon {
  width: 21px !important;
  height: 16px !important;
  margin-left: 0 !important;
  margin-right: 2px !important;
}

#fm-pivot-view .fm-grid-layout .fm-custom-cell.fm-expanded .fm-expanded-icon::before,
#fm-pivot-view .fm-grid-layout .fm-custom-cell.fm-collapsed .fm-collapsed-icon::before {
  top: -2px;
  height: 16px;
}

JavaScript

new Flexmonster({
  container: "#pivot-container",
  componentFolder: "https://cdn.flexmonster.com/",
  width: "100%",
  height: 550,
  customizeCell: customizeCell,
  toolbar: true,
  report: {
    "dataSource": {
      "type": "json",
      "filename": "https://cdn.flexmonster.com/data/retail-data.json",
      "mapping": {
        "Price": {
          "type": "number"
        },
        "Country": {
          "type": "string",
          "folder": "Location"
        },
      }
    },
    "slice": {
        "rows": [
            {
                "uniqueName": "Country",
            }
        ],
        "columns": [
            {
                "uniqueName": "[Measures]"
            }
        ],
        "measures": [
            {
                "uniqueName": "Price",
                "aggregation": "sum",
            }
        ]
     },
     "options": {
     		"showAggregationLabels": true
     }
  }
});

function customizeCell(cell, data) {
  if (data.hierarchy && data.type == "header") {
    if (data.hierarchy.caption == "Country" && data.member && data.member.properties) {
      let name = data.member.properties.CurrencyID;
      let flag = `<i class="fm-icon ${data.expanded?"fm-expanded-icon":"fm-collapsed-icon"}" 
        title="${data.expanded?"Click to collapse":"Click to expand"}"></i>
        <img class="flag-icon" src="https://cdn.flexmonster.com/flags/${name.toLowerCase()}.svg">`;
      cell.text = `${flag}<span style="margin-left: 2px; line-height: 16px">${data.member.caption}</span>`;
      cell.addClass('fm-custom-cell');

    }
  }
}