Rounding dates in Elasticsearch using the mapping.calendar_interval property

Mapping configuration

by Flexmonster Pivot Table

HTML

<script src="https://cdn.flexmonster.com/flexmonster.js"></script>

<button onclick="roundDates('1m')">Default dates</button>
<button onclick="roundDates('1d')">Rounded dates</button>

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

CSS

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

JavaScript

let pivot = new Flexmonster({
  container: "pivot-container",
  componentFolder: "https://cdn.flexmonster.com/",
  toolbar: true,
  report: {
  	dataSource: {
    	type: "elasticsearch",
      node: "https://olap.flexmonster.com:9200",
      index: "kibana_sample_data_flights",
      mapping: {
      	"timestamp": {
        	format: "dd/MM/yyyy HH:mm",
          calendar_interval: "day",
          caption: "Arrival date"
        },
        "DestCityName": {
        	caption: "Destination city"
        },
        "DistanceMiles": {
        	caption: "Distance"
        }
      }
    },
    slice: {
    	rows: [
      	{
        	uniqueName: "timestamp"
        }
      ],
      columns: [
      	{
      		uniqueName: "DestCityName",
        	filter: {
        		members: ["destcityname.[chitose / tomakomai]", "destcityname.[paris]"]  
        	}
      	},
      	{
      		uniqueName: "[Measures]"
      	}
      ],
      measures: [
      	{
        	uniqueName: "DistanceMiles",
          aggregation: "sum"
        }
      ]
    },
    formats: [
    	{
      	name: "",
        decimalPlaces: 2
      }
    ]
  }
});

function roundDates(interval) {
	let report = pivot.getReport();
  report.dataSource.mapping["timestamp"].calendar_interval = interval;
  pivot.setReport(report);
}