Expressions allow new columns to be generated off of the source data.
const expressionFields = [
{
id: 'revenue',
isMeasure: false,
expression: {
operator: 'multiply',
inputs: [
{ id: 'sales.unitPrice' },
{ id: 'sales.quantity' },
],
},
},
];
Expression fields are defined on the Data Source as an array of AgExpressionFieldDefinitions. Each expression field consists of an field definition (similar to a normal Field Definition), along with the expression itself.
See Below for the expression field API.
Calculated Columns & Measures Copy Link
An Expression Field can produce two different outputs:
- Calculated Column - For example
Profit = Revenue - Cost. - Measure - For example
Total Profit = SUM(Revenue - Cost).
Calculated Columns Copy Link
Calculated columns produce multiple outputs for multiple inputs, and can therefore be aggregated in the UI.
You must specify isMeasure: false for Calculated Columns.
const expressionFields = [
{
id: 'profit',
isMeasure: false,
expression: {
operator: 'multiply',
inputs: [
{
operator: 'subtract',
inputs: [
{ id: 'sales.unitPrice' },
{ id: 'sales.unitCost' },
],
},
{ id: 'sales.quantity' },
],
},
},
// ...
];
Measures Copy Link
Measure columns produces a single output when given multiple inputs and therefore cannot be aggregated in the UI.
You must specify isMeasure: true for Measures.
const expressionFields = [
{
id: 'totalProfit',
isMeasure: true,
expression: {
operator: 'subtract',
inputs: [
{ id: 'sales.unitPrice', aggregation: 'sum' },
{ id: 'sales.unitCost', aggregation: 'sum' },
],
},
},
// ...
]
Expression Types Copy Link
An expression is of one of three types:
- Function - A function applies an operator to one or more inputs.
- Value - A value is a fixed value (e.g. number, string, etc.).
- Field - A field refers to another field (either in the source data, or another expression field).
Function Expression Copy Link
const functionExpression = {
operator: 'multiply',
inputs: [
{ id: 'sales.unitPrice' },
{ value: 100 },
],
};
A function expression applies an operator to one or more inputs. Each input is another expression - a function, value or field.
|
See Below for the list of function expression operators.
Value Expression Copy Link
const valueExpression = {
type: 'number',
value: 100,
};
A value expression is a fixed value (e.g. number, string, etc.). |
Field Expression Copy Link
const fieldExpression = {
id: 'sale.profit',
aggregation: 'sum,
};
A field expression refers to another field (either in the source data, or another expression field). |
API Copy Link
Expression Field Definition Copy Link
The format type of the field (provides default formatting, etc.). If not provided, will be inferred from the expression.
|
Whether this expression creates a Measure or a Calculated Column. A Calculated Column produces a list of values, e.g. quantity × cost, even without a grouping. A Measure produces a single value e.g. SUM(quantity).
|
The expression for the field. |
Field ID. |
Display name. |
Field description. Displayed in the Field Panel |
Set to true to hide from being selected in the UI. Field can still be used for joins. |
Optional. How the field values will be serialized into state. Defaults to format serializer. |
Optional. How the field values will be deserialized from state. Defaults to format deserializer. |
Optional. How the field values will be displayed. Defaults to format value formatter. |
Optional. How blank values will be displayed. Defaults to format blank value. |
Optional. Will be passed to the value formatter. |
Function Expression Operators Copy Link
Add two values together. ['number', 'number'] => 'number' ['string', 'string'] => 'string' |
Subtract the second value from the first. ['number', 'number'] => 'number' |
Multiply two values together. ['number', 'number'] => 'number' |
Divide the first value by the second. ['number', 'number'] => 'number' |
Remainder of the first value divided by the second. ['number', 'number'] => 'number' |
Are the two values equal? ['number', 'number'] => 'boolean' ['date', 'date'] => 'boolean' ['datetime', 'datetime'] => 'boolean' ['boolean', 'boolean'] => 'boolean' ['string', 'string'] => 'boolean' |
Are the two values not equal? ['number', 'number'] => 'boolean' ['date', 'date'] => 'boolean' ['datetime', 'datetime'] => 'boolean' ['boolean', 'boolean'] => 'boolean' ['string', 'string'] => 'boolean' |
Is the first value less than the second? ['number', 'number'] => 'boolean' |
Is the first value greater than the second? ['number', 'number'] => 'boolean' |
Is the first value less than or equal to the second? ['number', 'number'] => 'boolean' |
Is the first value greater than or equal to the second? ['number', 'number'] => 'boolean' |
Are both the values true? ['boolean', 'boolean'] => 'boolean' |
Are either of the values true? ['boolean', 'boolean'] => 'boolean' |
Negates the value. ['boolean'] => 'boolean' |
Negates the value. ['number'] => 'number' |
If the first value is true then return the second value, else return the third value. ['boolean', 'string', 'string'] => 'string' ['boolean', 'number', 'number'] => 'number' ['boolean', 'boolean', 'boolean'] => 'boolean' ['boolean', 'date', 'date'] => 'date' ['boolean', 'datetime', 'datetime'] => 'datetime' |
Is the first value in any of the subsequent values? ['string', ...'string'] => 'boolean' ['number', ...'number'] => 'boolean' ['boolean', ...'boolean'] => 'boolean' ['date', ...'date'] => 'boolean' ['datetime', ...'datetime'] => 'boolean' |
Is the value true? ['boolean'] => 'boolean' |
Is the value false? ['boolean'] => 'boolean' |
Is the value null? ['string'] => 'boolean' ['number'] => 'boolean' ['boolean'] => 'boolean' ['date'] => 'boolean' ['datetime'] => 'boolean' |
Is the value not null? ['string'] => 'boolean' ['number'] => 'boolean' ['boolean'] => 'boolean' ['date'] => 'boolean' ['datetime'] => 'boolean' |
Return the number of units defined by the first value that are between the second and third values. 'millisecond' | 'ms' 'second' | 'ss' | 's' 'minute' | 'mi' | 'n' 'hour' | 'hh' 'day' | 'dy' | 'y' 'week' | 'ww' | 'wk' 'weekday' | 'dw' | 'w' 'month' | 'mm' | 'm' 'quarter' | 'qq' | 'q' 'year' | 'yyyy' | 'yy' 'dayofyear' |