Arithmetic Measure
Arithmetic measures allow you to perform simple calculations with measures in a visualization. A calculated arithmetic measure always references two measures, therefore the visualization must contain two measures at least.
Supported operations
Although a visualization can contain multiple measures, you can perform arithmetic operations with exactly only two measures.
The following arithmetic operations are supported:
Operation | Arithmetic measure operator | Expression formula | Example |
---|---|---|---|
Sum | sum | =A+B | = Q1 revenue + Q2 revenue |
Difference | difference | =A-B | = revenue in 2017 - revenue in 2016 |
Product (Multiplication) | multiplication | =A*B | = price per unit * number of units |
Ratio | ratio | =A÷B | = gross profit / net sales |
Change | change | =(A-B)÷B | = (this month revenue - last month revenue) / last month revenue |
By default, the result data of a change
operation is returned as a percentage in the #,##0.00%
format. The format cannot be overridden.
All the other operations return data in the default #,##0.00
format.
To change the format, use the format
attribute of the measure (see the examples).
Arithmetic measure structure
To add an arithmetic measure to a visualization, use the newArithmeticMeasure
factory function:
newArithmeticMeasure(operands, operator, modifications)
An arithmetic measure can reference the following as its operand:
- Simple measures
- Derived measures (see Time Over Time Comparison)
- Another arithmetic measures
You can specify operands either by their localIdentifier
or by their value, and the factory function will extract
the local identifier for you.
The operator can be one of the following:
sum
difference
multiplication
ratio
change
The modifications part is optional and is a function with a single parameter, which is an object with functions that you can use to override the measure’s format()
or alias()
.
If arithmetic measures reference each other in an infinite loop or the referenced measure is not found in the visualization (there is no measure with the referenced localIdentifier), the error message is rendered instead of the visualization.
Examples
A difference between two measures - arithmetic measure constructed using localIdentifier references
import { newMeasure, newArithmeticMeasure } from "@gooddata/sdk-model";
import { PivotTable } from "@gooddata/sdk-ui-pivot";
const measures = [
// the first simple measure (operand)
newMeasure("boughtProductsIdentifier", m => m.alias("Bought products from supplier")),
newMeasure("soldProductsLocalIdentifier", m => m.alias("Sold products to customers")),
newArithmeticMeasure(
["boughtProductsLocalIdentifier", "soldProductsLocalIdentifier"],
"difference",
m => m.alias("Products remaining in warehouse")
)
];
<PivotTable
measures={measures}
/>
Calculation with a derived measure (percentage change between two years)
The result of a change
operation is returned as a percentage value in the default #,##0.00%
format. This example
demonstrates passing measures by value to the different measure factory functions.
import { newMeasure, newPopMeasure, newArithmeticMeasure } from "@gooddata/sdk-model";
import { PivotTable } from "@gooddata/sdk-ui-pivot";
const currentYear = newMeasure("measureIdentifier", m => m.alias("Current Year"));
// derived - data from previous year
const previousYear = newPopMeasure(currentYear, "attributeDisplayFormYearIdentifier", m => m.alias("Previous Year"));
// arithmetic measure with custom format
const change = newArithmeticMeasure(previousYear, currentYear, "change", m => m.alias("Change between years").format("$#,#0.0%"));
const measures = [
currentYear,
previousYear,
change
];
<PivotTable
measures={measures}
/>