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. |
Controls whether the field can be edited in the UI. |
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. Build a value formatter bound to the field's format options and the runtime API. Defaults to format factory. |
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' |
Add a signed integer interval to a date or datetime. ['date', 'number'] => 'date' ['datetime', 'number'] => 'datetime' options.unit. Supported units: 'year' | 'quarter' | 'month' | 'week' | 'day' (and 'hour' | 'minute' for datetime only). Month-end clamping applies: adding one month to Jan 31 yields Feb 28/29.
|
Construct a date from integer year, 1-based month, and day components. Spine-internal - not valid in calendar range expressions. ['number', 'number', 'number'] => 'date' |
Truncate a date or datetime to the start of a given unit. ['string', 'date'] => 'date' ['string', 'datetime'] => 'datetime' 'year' | 'quarter' | 'month' | 'week' | 'day' (and 'hour' for datetime only)
|
Return the end of a date or datetime period for a given unit. ['string', 'date'] => 'date' ['string', 'datetime'] => 'datetime' 'year' | 'quarter' | 'month' | 'week' | 'day' (and 'hour' for datetime only)
|
Extract a single integer component from a date or datetime. ['string', 'date'] => 'number' ['string', 'datetime'] => 'number' 'year' | 'isoYear' | 'quarter' | 'month' | 'week' | 'day' | 'hour' | 'dayOfYear' | 'dayOfWeek' | 'monthOfQuarter' | 'weekOfMonth' | 'weekend' | 'timeOfDay' | 'minute' | 'second' | 'dayOfMonth'
|
Compute multiple percentiles of the grouped values of the target numeric field. The query compiler fans this out into one output column per p value. Planning-level pseudo-function - never evaluated directly. |
Compute the value at percentile p (0-1) of the grouped values of the target numeric field. This is a planning-level pseudo-function: the query compiler rewrites it into a groupSorted + percentileOf pair before execution. It is never evaluated directly.['number', 'number'] => 'number' |
Shorthand for percentile(field, 0.5). Planning-level pseudo-function.['number'] => 'number' |
Returns the current date as a DATE value. Session-constant: all rows in a single query receive the same value. [] => 'date' |
Returns the current date and time as a TIMESTAMP value. Session-constant: all rows in a single query receive the same value. [] => 'datetime' |
Returns the absolute value of a number. ['number'] => 'number' |
Returns the remainder when the first number is divided by the second (modulo). The sign of the result follows the sign of the dividend. ['number', 'number'] => 'number' |
Returns the largest integer less than or equal to the given number. ['number'] => 'number' |
Returns the smallest integer greater than or equal to the given number. ['number'] => 'number' |
Rounds a number to the nearest integer at the specified scale. Uses round-half-away-from-zero semantics. ['number', 'number'] => 'number' ['number'] => 'number' (scale defaults to 0) |
Truncates a number to the specified scale toward zero. ['number', 'number'] => 'number' ['number'] => 'number' (scale defaults to 0) |
Raises the base to the power of the exponent. ['number', 'number'] => 'number' |
Returns e raised to the power of the given number. ['number'] => 'number' |
Returns the sine of a number in radians. ['number'] => 'number' |
Returns the cosine of a number in radians. ['number'] => 'number' |
Returns the tangent of a number in radians. ['number'] => 'number' |
Returns the arcsine of a number (inverse sine) in radians. Result is in the range [-π/2, π/2]. Input must be in the range [-1, 1]. ['number'] => 'number' |
Returns the arccosine of a number (inverse cosine) in radians. Result is in the range [0, π]. Input must be in the range [-1, 1]. ['number'] => 'number' |
Returns the arctangent of a number (inverse tangent) in radians. Result is in the range [-π/2, π/2]. ['number'] => 'number' |
Returns the arctangent of the quotient of two numbers (two-argument arctangent) in radians. Result is in the range [-π, π]. ['number', 'number'] => 'number' |
Returns the natural logarithm (base e) of a number. ['number'] => 'number' |
Returns the logarithm of the second number to the base specified by the first number. ['number', 'number'] => 'number' |
Returns the base-10 logarithm of a number. ['number'] => 'number' |
Returns the maximum value of two or more numbers. Returns NULL if any argument is NULL. ['number', ...'number'] => 'number' |
Returns the minimum value of two or more numbers. Returns NULL if any argument is NULL. ['number', ...'number'] => 'number' |
Converts a string to uppercase. ['string'] => 'string' |
Converts a string to lowercase. ['string'] => 'string' |
Extracts a substring from a string. ['string', 'number'] => 'string' (FROM start position to end of string) ['string', 'number', 'number'] => 'string' (FROM start position FOR length) |
Returns the 1-indexed position of the first occurrence of needle in haystack. ['string', 'string'] => 'number' |
Removes the specified characters from the left side of a string. ['string', 'string'] => 'string' |
Removes the specified characters from the right side of a string. ['string', 'string'] => 'string' |
Removes the specified characters from both sides of a string. ['string', 'string'] => 'string' |
Replaces a substring with another string at a specified position. ['string', 'string', 'number'] => 'string' (FROM start, replace to end of replacement) ['string', 'string', 'number', 'number'] => 'string' (FROM start FOR length) |
Returns the sign of a number (-1, 0, or 1). ['number'] => 'number' |