1. API reference
  2. Welcome
    1. Component overview
    2. Quick start
    3. System requirements
    4. Troubleshooting
    5. Managing license keys
  3. Connecting to Data Source
    1. JSON
      1. Connecting to JSON
      2. Connecting to JSON using the Data Compressor
      3. Data types in JSON
    2. CSV
      1. Connecting to CSV
      2. Connecting to CSV using the Data Compressor
      3. Data types in CSV
    3. Database
      1. Connecting to SQL databases
      2. Connecting to other databases
      3. Connecting to a database with Node.js
      4. Connecting to a database with .NET
      5. Connecting to a database with .NET Core
      6. Connecting to a database with Java
      7. Connecting to a database with PHP
    4. Microsoft Analysis Services
      1. Connecting to Microsoft Analysis Services
      2. Getting started with the Accelerator
      3. Installing the Accelerator as a Windows service
      4. Referring the Accelerator as a DLL
      5. Configuring the authentication process
      6. Configuring a secure HTTPS connection
      7. Troubleshooting
    5. Pentaho Mondrian
      1. Connecting to Pentaho Mondrian
      2. Getting started with the Accelerator
      3. Configuring Mondrian roles
      4. Configuring username/password protection
      5. Configuring a secure HTTPS connection
      6. Troubleshooting
    6. Elasticsearch
      1. Connecting to Elasticsearch
      2. Configuring the mapping
  4. Security
    1. Security in Flexmonster
    2. Security aspects when connecting to an OLAP cube
      1. The data transfer process
      2. Data security
      3. Data access management
    3. Security aspects when connecting to a database
      1. The data transfer process
      2. Data access management
  5. Configuring report
    1. What is a report
    2. Data source
    3. Slice
    4. Options
    5. Number formatting
    6. Conditional formatting
    7. Set the report for the component
    8. Get the report from the component
    9. Date and time formatting
    10. Configuring global options
    11. Export and print
    12. Calculated values
    13. Custom sorting
  6. Integration with frameworks
    1. Available tutorials
    2. Integration with AngularJS (v1.x)
    3. Integration with Angular
    4. Integration with React
    5. Integration with Webpack
    6. Integration with ASP.NET
    7. Integration with jQuery
    8. Integration with JSP
    9. Integration with TypeScript
    10. Integration with RequireJS
    11. Integration with PhoneGap
  7. Integration with charts
    1. Integration with Highcharts
    2. Integration with Google Charts
    3. Integration with FusionCharts
    4. Integration with any charting library
  8. Customizing
    1. Customizing toolbar
    2. Customizing appearance
    3. Customizing context menu
    4. Localizing component
  9. Updating to the latest version
    1. Updating to the latest version
    2. Release notes
    3. Migration guide from 2.6 to 2.7
    4. Migration guide from 2.5 to 2.6
    5. Migration guide from 2.4 to 2.5
    6. Migration guide from 2.3 to 2.4
    7. Migration guide from 2.2 to 2.3
    8. Documentation for older versions
Table of contents

Calculated values

Calculated values give you the option to add measures that were missing in the original data. They can be saved and restored within the report. This feature is available for JSON, CSV, and OCSV data sources. Each calculated measure is described inside a measure object. It can have the following parameters:

  • uniqueName – String. The measure’s unique name. This property will be used as an identifier for the measure inside Flexmonster and as an identifier to remove the measure via API.
  • formula – String. Represents the formula. It can contain the following operators:+, -, *, / and the following functions:isNaN(), !isNaN() (check a full list). Other measures can be addressed using the measure’s unique name and aggregation function, for example sum("Price") or max("Order"). Flexmonster supports the following aggregation functions for CSV, OCSV, and JSON data sources: "sum", "count", "distinctcount", "average", "median", "product", "min", "max", "percent", "percentofcolumn", "percentofrow", "index", "difference", "%difference", "runningtotals", "stdevp", and "stdevs".
  • caption (optional) – String. The measure’s caption.
  • grandTotalCaption (optional) – String. The measure’s grand total caption.
  • active (optional) – Boolean. Indicates whether the measure will be selected for the report (true) or not (false). active: false can be useful if the measure has non-default properties, but should not be selected for the grid or the chart.
  • individual (optional) – Boolean. Defines whether the formula is calculated using raw values (true) or using aggregated values (false). Default value: false.
  • calculateNaN (optional) – Boolean. Defines whether the formula is calculated using NaN values (true) or using null values (false). Default value: true.
  • format (optional) – String. The name of the number formatting that will be applied to the measure. Measure values can be formatted according to the number formatting defined in the report. All available number formattings are stored in the formats array in the report. More information about the number formatting part of the report can be found in the number formatting article.

This example on JSFiddle illustrates how to define a calculated measure with the minimum price for each color. The slice is defined like this:

slice: {
	rows: [
		{ uniqueName: "Color" }
	],
	measures: [
		{ uniqueName: "Price", aggregation: "sum"},
		{
			formula: 'min("Price")',
			uniqueName: "Min Price",
			caption: "Min Price",
			active: true
		} 
	]
}

The next example illustrates how to define a calculated measure with a more complex formula. To highlight the values you can add conditional formatting for the Top Category measure:

slice: {
	rows: [
		{ uniqueName: "Color" }
	],
	measures: [
		{ uniqueName: "Price", aggregation: "sum"},
		{
			uniqueName: "Top Category",
			formula: 'average("Price") < 4000 and sum("Quantity") > 100',
			caption: "Top Category",
			active: true
		} 
	]
},
conditions: [
    {
        formula: "#value = 1",
        measure: "Top Category",
        format: {
            backgroundColor: "#66FF99",
            color: "#000000",
            fontFamily: "Arial",
            fontSize: "12px"
        }
    }
]

This JSFiddle example shows how to specify the number formatting for your calculated measure.

The individual property allows the formula to be calculated using raw values. In the example the formula sum('Price') * sum('Amount') will be calculated like this:
set individual: true: 174 * 36 + 225 * 44
set individual: false: (174 + 225) * (36 + 44)

The following report illustrates how to use the individual property:

{
	dataSource: {
		data: [
	        {
	            "Country" : "Canada",
	            "Amount" : 36,
	            "Price" : 174
	        },
	        {
	            "Country" : "Canada",
	            "Amount" : 44,
	            "Price" : 225
	        }
	    ]
	},
	slice: {
		rows: [
		    {
		        uniqueName: "Country"
		    }
		],
		measures: [
		    {
		        uniqueName: "Price",
		        aggregation: "sum",
		        active: true
		    },
		    {
		        uniqueName: "Overall price",
		        formula: "sum('Price') * sum('Amount')",
		        individual: true,
		        caption: "Overall price",
		        active: true
		    }
		]
	}
}

A full list of operators and functions for calculated values

Below is a list of all operators and functions supported in formula:

  • + – arithmetic addition operator. Syntax: a + b
  • - – arithmetic subtraction operator. Syntax: a - b
  • * – arithmetic multiplication operator. Syntax: a * b
  • / – arithmetic division operator. Syntax: a / b
  • ^ – arithmetic power operator. Syntax: a^2
  • < – comparison less operator. Syntax: a < b
  • <= – comparison less or equal operator. Syntax: a <= b
  • > – comparison greater operator. Syntax: a > b
  • >= – comparison greater or equal operator. Syntax: a >= b
  • == – comparison equal operator. Syntax: a == b
  • != – comparison not equal operator. Syntax: a != b
  • or – logical OR operator. Syntax: a or b
  • and – logical AND operator. Syntax: a and b
  • if – conditional operator. Syntax: if(condition, then, else)
  • abs – function that returns the absolute value of a number. Syntax: abs(number)
  • min – function that returns the minimum value. Syntax: min(number1, number2)
  • max – function that returns the maximum value. Syntax: max(number1, number2)
  • isNaN – function that checks if the value is not a number. Syntax: isNaN(value)
  • !isNaN – function that checks if the value is a number. Syntax: !isNaN(value)

Add calculated values using the Field List

Use Add calculated value in the Field List to add the calculated measure at runtime.

add calculated value

Сalculated values via API

Calculated measures can be defined within the report or added via the addCalculatedMeasure() API call. To remove a calculated measure use the removeCalculatedMeasure() API call. removeAllCalculatedMeasures() removes all calculated measures.