Get Free Trial
  1. API reference
Connecting to Data Source
Configuring the component
  • Documentation for older versions
  • Table of contents

    Integration with amCharts

    This guide describes how to integrate Flexmonster with amCharts – a JavaScript library for interactive data visualization.

    This tutorial is split into the following sections:

    Prerequisites

    • amCharts 4 or 5

    Supported chart types

    Data preprocessed by Flexmonster Connector for amCharts is represented as an array of objects. All amCharts chart types accept this data format, so Flexmonster supports all of them.

    See how to integrate the component with different chart types:

    • Area chart (demo)
    • Bar chart (demo)
    • Bubble chart (demo)
    • Clustered bar chart (demo)
    • Clustered column chart (demo)
    • Column chart (demo)
    • Donut chart (demo)
    • Line chart (demo)
    • Nested donut (demo)
    • Pie chart (demo)
    • Polar area chart (demo)
    • Radar chart (demo)
    • Radar chart with switched axes (demo)
    • Semi-circle pie chart (demo)
    • Stacked bar chart (demo)
    • Stacked column chart (demo)
    • 3d Donut chart (demo)

    More ready-to-use examples of integration with amCharts are available on the Examples page.

    Adding amCharts

    The steps below describe how to create a pie chart based on data received from the component. To integrate Flexmonster with other chart types, refer to the amCharts documentation.

    Step 1. Embed the component into your webpage

    Add Flexmonster to your webpage and configure a simple report (e.g., based on a JSON or CSV data source). Replace "XXXX-XXXX-XXXX-XXXX-XXXX" with your license key. If you don’t have a license key, contact our team and request a special trial key.

    <div id="pivotContainer">The component will appear here</div>
    <script src="https://cdn.flexmonster.com/flexmonster.js"></script>
    
    <script>
        let pivot = new Flexmonster({
            container: "pivotContainer",
            componentFolder: "https://cdn.flexmonster.com/",
            height: 300,
            report: {
                dataSource: {
                    filename: "data/data.csv"
                },
                slice: {
                    rows: [
                        { uniqueName: "Country" }
                    ],
                    columns: [
                        { uniqueName: "Color" },
                        { uniqueName: "[Measures]" }
                    ],
                    measures: [
                        { uniqueName: "Price" }
                    ]
                }
            },
            licenseKey: "XXXX-XXXX-XXXX-XXXX-XXXX"
        });
    </script>

    Step 2. Add amCharts files

    Include the amCharts files to your webpage:

    <script src="https://www.amcharts.com/lib/4/core.js"></script>
    <script src="https://www.amcharts.com/lib/4/charts.js"></script>
    <script src="https://www.amcharts.com/lib/4/themes/animated.js"></script>

    Including files directly to the webpage is one of the possible ways to add amCharts. Refer to the amCharts installation guide for other ways of adding amCharts.

    Step 3. Add Flexmonster Connector for amCharts

    Flexmonster Connector for amCharts provides ready-to-use methods for easy and smooth integration with amCharts. Add it to your webpage with the following lines of code:

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

    Step 4. Add a container for amCharts

    Add a container for the chart:

    <div id="amchartsContainer"></div>

    Step 5. Add a reportcomplete event handler

    A chart should be created only when the component is ready to provide the data. To track this, use the reportcomplete event:

    let pivot = new Flexmonster({
        container: "#pivotContainer",
        componentFolder: "https://cdn.flexmonster.com/",
        report: {
           // the report from the 1st step
        },
        licenseKey: "XXXX-XXXX-XXXX-XXXX-XXXX",
        reportcomplete: function() {
            pivot.off("reportcomplete");
            createChart();
        }
    });  

    When data loading is complete, the event handler will invoke the createChart() function to draw the chart.

    The implementation of the createChart() function is given below.

    Step 6. Create a variable for the chart

    Declare a variable to work with the chart instance:

    let chart;

    Note The variable should be visible to functions that draw and redraw the chart.

    Step 7. Request data from the component

    The Connector for amCharts extends the Flexmonster API with the amcharts.getData() method, which requests data from the component and structures it to the format required by amCharts. Call the amcharts.getData() method to get data from the component:

    function createChart() {
        pivot.amcharts.getData({}, drawChart, updateChart);
    }

    Note Data returned by the amcharts.getData() method contains fields specified in the report.slice object. If the amcharts.getData() method gets a slice as a parameter, the data is prepared according to it.

    See more details about the amcharts.getData() method.

    Step 8. Create a function to draw the chart

    The drawChart() function initializes the chart, configures it, and fills the chart with data provided by the amcharts.getData() method:

    function drawChart(chartData, rawData) {
        // initialize the chart
        let chart = am4core.create("amchartsContainer", am4charts.PieChart);
        //fill the chart with the data from Flexmonster
        chart.data = chartData.data;
        chart.legend = new am4charts.Legend();
        // Create pie series
        let series = chart.series.push(new am4charts.PieSeries());
        series.dataFields.category = pivot.amcharts.getCategoryName(rawData);
        series.dataFields.value = pivot.amcharts.getMeasureNameByIndex(rawData, 0);
    }

    Notice the following lines in the code snippet:

    series.dataFields.category = pivot.amcharts.getCategoryName(rawData);
    series.dataFields.value = pivot.amcharts.getMeasureNameByIndex(rawData, 0);

    The amcharts.getCategoryName() method is used to set the category name for the amCharts Category axis. Learn more about how the method chooses the category name.

    Then, getMeasureNameByIndex() sets the value for the Value axis.

    For more details on how the pie chart is created, see the amCharts documentation.

    Step 9. Create a function to update the chart

    Create a function that will redraw the chart once the report is updated (e.g., when the data is filtered, sorted, etc.):

    function updateChart(chartData, rawData) { 
    chart.dispose();
    drawChart(chartData, rawData);
    }

    When the data is updated, this function will dispose of the current chart and draw a new chart based on the updated data.

    Step 10. See the results

    Launch your webpage from a browser and see an interactive pie chart displaying data from the component. Check out a live example on JSFiddle.

    Preparing data for the chart

    This section explains how Flexmonster Connector for amCharts preprocesses data for the chart.

    The amcharts.getData() method returns data as an array of objects. It is the format required by amCharts. For example:

    [
        {
            "categoryName": "value",
            "measureName 1": "value",
             …
            "measureName n": "value",
        }
        …
    ]

    The object contains only one category field as well as all the measures from the slice.

    A field to represent the category is chosen as follows:

    1. If the slice.rows array contains some fields, the first field from rows is chosen to be the category.
    2. If the slice.rows array is empty and the slice.columns array contains some fields, the first field from columns is chosen as the category.

    If both slice.rows and slice.columns are empty, then no category is available, and amcharts.getCategoryName() will return undefined.

    In such cases, the getMeasureNameByIndex() method can be used to select the category for the series.

    Configuring number formatting

    The Connector allows using a number format set via the FormatObject for amCharts as well. The amcharts.getNumberFormatPattern() method converts the FormatObject received from the component to the amCharts number formatting string.

    When the formatting string is prepared by the method, the following properties of the FormatObject are considered:

    • decimalPlaces
    • maxDecimalPlaces
    • negativeNumberFormat (only the -1 and (1) formats are available)
    • currencySymbol
    • positiveCurrencyFormat
    • negativeCurrencyFormat (only the $-1, -1$, ($1), (1$) formats are available)
    • isPercent

    Regardless of the configuration set in the FormatObject, the thousandsSeparator and decimalSeparator format parameters always have constant values. These values are , for thousandsSeparator and . for decimalSeparator. amCharts imposes this limitation as it uses predefined separators for decimals and thousands.

    Here is an example of the formatting string returned by the amcharts.getNumberFormatPattern() method:

    '$'#,###.00|'($'#,###.00')'

    The part of the string before | defines the positive number format. The part of the string after | defines the negative number format. For example, 1205 will be shown as $1,205.00, and -1205 will be shown as ($1,205.00).

    What’s next?

    You may be interested in the following articles: