Need a special offer?Find out if your project fits.
+
List of all demos

React Pivot Table with Google Charts

Flexmonster Pivot Table & Charts for React seamlessly integrates with Google Charts — a web service for data visualization. Using these tools together, you can create a well-designed interactive dashboard and embed it into any React application.

Dashboard analytics is a comprehensive instrument to assist in making data-driven decisions. With its help, end-users can highlight particular insights, find complex business solutions, and present the results.

Income, Expenses, and Profit

Dashboards with React Flexmonster Pivot and Google Charts are very interactive: changes applied to the pivot grid configuration are reflected in charts in an instant. Because of this real-time behavior, end-users can look at the data from different points right away.

Top 5 Countries by Sales

    import React from "react";
    import * as FlexmonsterReact from "react-flexmonster";
    
    import "flexmonster/lib/flexmonster.googlecharts.js";
    import { Chart } from "react-google-charts";
    
    class PivotTableDemo extends React.Component {
      constructor(props) {
        super(props);
        this.myRef = React.createRef();
        this.state = {};
        this.colors = [
          "#4cbf8b",
          "#e8734c",
          "#ffcd4c",
          "#9875e3",
          "#4c9eff",
          "#8acfc3",
          "#cd97e6",
          "#f1d34c",
          "#65d2e7",
        ];
      }
    
      render() {
        return (
          <>
            <FlexmonsterReact.Pivot
              ref={this.myRef}
              height={350}
              componentFolder="https://cdn.flexmonster.com/"
              report={{
                dataSource: {
                  type: "json",
                  filename: "data/demos/googlecharts-demo-data.json",
                },
                slice: {
                  rows: [
                    {
                      uniqueName: "Date.Month",
                    },
                  ],
                  columns: [
                    {
                      uniqueName: "[Measures]",
                    },
                  ],
                  measures: [
                    {
                      uniqueName: "Income",
                      formula: 'sum("Sales") * sum("Unit Price")',
                      individual: true,
                      caption: "Income",
                      format: "currency",
                    },
                    {
                      uniqueName: "Sales",
                      active: false,
                      format: "currency",
                    },
                    {
                      uniqueName: "Expenses",
                      format: "currency",
                    },
                    {
                      uniqueName: "Profit",
                      formula: 'sum("Income") - sum("Expenses")',
                      individual: true,
                      caption: "Profit",
                      format: "currency",
                    },
                  ],
                },
                formats: [
                  {
                    name: "",
                    thousandsSeparator: ",",
                    decimalSeparator: ".",
                    decimalPlaces: 2,
                  },
                  {
                    name: "currency",
                    currencySymbol: "$",
                  },
                ],
                options: {
                  grid: {
                    showHeaders: false,
                  },
                  showAggregationLabels: false,
                },
              }}
              licenseFilePath="https://cdn.flexmonster.com/jsfiddle.charts.key"
              reportcomplete={this.onReportComplete}
            />
    
            <div class="demo-box">
              <div class="demo-title">
                <strong>Income, Expenses, and Profit</strong>
              </div>
              <div id="googlechart-column-container">
                <Chart
                  chartType="ColumnChart"
                  data={this.state.googlechartsdataColumn}
                  options={{
                    fontName: "SERIF TYPEFACE",
                    chartArea: {
                      height: "90%",
                    },
                    height: 300,
                    colors: this.colors,
                  }}
                  legendToggle
                />
              </div>
            </div>
    
            <div class="demo-box">
              <div class="demo-title">
                <strong>Top 5 Countries by Sales</strong>
              </div>
              <div id="googlechart-pie-container">
                <Chart
                  chartType="PieChart"
                  data={this.state.googlechartsdataPie}
                  options={{
                    legend: {
                      position: "bottom",
                    },
                    height: 300,
                    pieSliceText: "none", // Remove text from pie slices
                    pieHole: 0.35,
                    chartArea: {
                      height: "85%",
                      top: 0,
                    },
                    pieSliceBorderColor: "none",
                    colors: this.colors,
                  }}
                  legendToggle
                />
              </div>
            </div>
          </>
        );
      }
    
      onReportComplete = () => {
        this.myRef.current.flexmonster.off(this.reportComplete);
        this.createColumnChart();
        this.createPieChart();
      };
    
      createColumnChart = () => {
        this.myRef.current.flexmonster.googlecharts.getData(
          {
            type: "column",
          },
          (chartConfig) =>
            this.setState({ googlechartsdataColumn: chartConfig.data }),
          (chartConfig) =>
            this.setState({ googlechartsdataColumn: chartConfig.data }),
        );
      };
    
      createPieChart = () => {
        this.myRef.current.flexmonster.googlecharts.getData(
          {
            type: "pie",
            slice: {
              rows: [
                {
                  uniqueName: "Country",
                  filter: {
                    measure: {
                      uniqueName: "Sales",
                    },
                    query: {
                      top: 5,
                    },
                  },
                },
              ],
              columns: [
                {
                  uniqueName: "[Measures]",
                },
              ],
              measures: [
                {
                  uniqueName: "Sales",
                },
              ],
            },
          },
          (chartConfig) => this.setState({ googlechartsdataPie: chartConfig.data }),
          (chartConfig) => this.setState({ googlechartsdataPie: chartConfig.data }),
        );
      };
    }
    
    export default PivotTableDemo;
    
    .demo-box {
      background-color: #fafafa;
      position: relative;
      padding: 20px 20px 20px 20px;
      border: 1px solid #e9e9e9;
      margin-bottom: 20px;
    }
    
    .demo-title {
      font-size: 18px;
      margin-bottom: 30px;
      white-space: nowrap;
      text-overflow: ellipsis;
      color: #555;
    }
    
    #pivot-container {
      margin-bottom: 20px;
    }
    
    /** For the background color of Google Charts 
     * (for material design charts, it can't be changed via options, only via CSS)
     */
    #googlechart-column-container > div > div > div > div > div > svg > rect {
      fill: #fafafa !important;
    }
    
    #googlechart-pie-container > div > div > div > div > div > svg > rect {
      fill: #fafafa !important;
    }
    
    /* For text on xAxis of the column chart */
    #googlechart-column-container > div > div > div > div > div > svg > g:nth-child(n) > g:nth-child(n) > g > text {
      color: #555;
      fill: rgb(117, 117, 117);
      font-family: Roboto;
      font-size: 12px;
    }
    
    #googlechart-pie-container > div > div > div > div > div > svg > g:nth-child(n) > g:nth-child(n) > g > text {
      color: #555;
      fill: rgb(117, 117, 117);
      font-family: Roboto;
      font-size: 12px;
    }
    

    With our Integration with Google Charts guide, you can learn how to configure a dashboard with Flexmonster and Google Charts just in a few steps.

    The process is straightforward: add the pivot table and charts to the web page and make both components communicate via the specially prepared charting connector.