Loading

Canvas function reference

Elastic Stack Serverless

Behind the scenes, Canvas is driven by a powerful expression language, with dozens of functions and other capabilities, including table transforms, type casting, and sub-expressions.

The Canvas expression language also supports TinyMath functions, which perform complex math calculations.

A * denotes a required argument.

A † denotes an argument can be passed multiple times.

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

Returns true if all of the conditions are met. See also any.

Expression syntax

all {neq "foo"} {neq "bar"} {neq "fizz"}
all condition={gt 10} condition={lt 20}

Code example

kibana
| selectFilter
| demodata
| math "mean(percent_uptime)"
| formatnumber "0.0%"
| metric "Average uptime"
  metricFont={
    font size=48 family="'Open Sans', Helvetica, Arial, sans-serif"
      color={
        if {all {gte 0} {lt 0.8}} then="red" else="green"
      }
      align="center" lHeight=48
  }
| render

This sets the color of the metric text to "red" if the context passed into metric is greater than or equal to 0 and less than 0.8. Otherwise, the color is set to "green".

Accepts: null

ArgumentTypeDescription
Unnamed *
Alias: condition
booleanThe conditions to check.

Returns: boolean

Converts between core types, including string, number, null, boolean, and date, and renames columns. See also mapColumn, mathColumn, and staticColumn.

Expression syntax

alterColumn "cost" type="string"
alterColumn column="@timestamp" name="foo"

Code example

kibana
| selectFilter
| demodata
| alterColumn "time" name="time_in_ms" type="number"
| table
| render

This renames the time column to time_in_ms and converts the type of the column’s values from date to number.

Accepts: datatable

ArgumentTypeDescription
Unnamed *
Alias: column
stringThe name of the column to alter.
namestringThe resultant column name. Leave blank to not rename.
typestringThe type to convert the column to. Leave blank to not change the type.

Returns: datatable

Returns true if at least one of the conditions is met. See also all.

Expression syntax

any {eq "foo"} {eq "bar"} {eq "fizz"}
any condition={lte 10} condition={gt 30}

Code example

kibana
| selectFilter
| demodata
| filterrows {
    getCell "project" | any {eq "elasticsearch"} {eq "kibana"} {eq "x-pack"}
  }
| pointseries color="project" size="max(price)"
| pie
| render

This filters out any rows that don’t contain "elasticsearch", "kibana" or "x-pack" in the project field.

Accepts: null

ArgumentTypeDescription
Unnamed *
Alias: condition
booleanThe conditions to check.

Returns: boolean

Creates a datatable with a single value. See also getCell.

Expression syntax

as
as "foo"
as name="bar"

Code example

kibana
| selectFilter
| demodata
| ply by="project" fn={math "count(username)" | as "num_users"} fn={math "mean(price)" | as "price"}
| pointseries x="project" y="num_users" size="price" color="project"
| plot
| render

as casts any primitive value (string, number, date, null) into a datatable with a single row and a single column with the given name (or defaults to "value" if no name is provided). This is useful when piping a primitive value into a function that only takes datatable as an input.

In the example, ply expects each fn subexpression to return a datatable in order to merge the results of each fn back into a datatable, but using a math aggregation in the subexpressions returns a single math value, which is then cast into a datatable using as.

Accepts: string, boolean, number, null

ArgumentTypeDescription
Unnamed
Alias: name
stringThe name to give the column.
Default: "value"

Returns: datatable

Retrieves Canvas workpad asset objects to provide as argument values. Usually images.

Expression syntax

asset "asset-52f14f2b-fee6-4072-92e8-cd2642665d02"
asset id="asset-498f7429-4d56-42a2-a7e4-8bf08d98d114"

Code example

image dataurl={asset "asset-c661a7cc-11be-45a1-a401-d7592ea7917a"} mode="contain"
| render

The image asset stored with the ID "asset-c661a7cc-11be-45a1-a401-d7592ea7917a" is passed into the dataurl argument of the image function to display the stored asset.

Accepts: null

ArgumentTypeDescription
Unnamed *
Alias: id
stringThe ID of the asset to retrieve.

Returns: string

Configures the axis of a visualization. Only used with plot.

Expression syntax

axisConfig show=false
axisConfig position="right" min=0 max=10 tickSize=1

Code example

kibana
| selectFilter
| demodata
| pointseries x="size(cost)" y="project" color="project"
| plot defaultStyle={seriesStyle bars=0.75 horizontalBars=true}
  legend=false
  xaxis={axisConfig position="top" min=0 max=400 tickSize=100}
  yaxis={axisConfig position="right"}
| render

This sets the x-axis to display on the top of the chart and sets the range of values to 0-400 with ticks displayed at 100 intervals. The y-axis is configured to display on the right.

Accepts: null

ArgumentTypeDescription
maxnumber, string, nullThe maximum value displayed in the axis. Must be a number, a date in milliseconds since epoch, or an ISO8601 string.
minnumber, string, nullThe minimum value displayed in the axis. Must be a number, a date in milliseconds since epoch, or an ISO8601 string.
positionstringThe position of the axis labels. For example, "top", "bottom", "left", or "right".
Default: "left"
showbooleanShow the axis labels?
Default: true
tickSizenumber, nullThe increment size between each tick. Use for number axes only.

Returns: axisConfig

Builds a case, including a condition and a result, to pass to the switch function.

Expression syntax

case 0 then="red"
case when=5 then="yellow"
case if={lte 50} then="green"

Code example

math "random()"
| progress shape="gauge" label={formatnumber "0%"}
  font={
    font size=24 family="'Open Sans', Helvetica, Arial, sans-serif" align="center"
      color={
        switch {case if={lte 0.5} then="green"}
          {case if={all {gt 0.5} {lte 0.75}} then="orange"}
          default="red"
      }
  }
  valueColor={
    switch {case if={lte 0.5} then="green"}
      {case if={all {gt 0.5} {lte 0.75}} then="orange"}
      default="red"
  }
| render

This sets the color of the progress indicator and the color of the label to "green" if the value is less than or equal to 0.5, "orange" if the value is greater than 0.5 and less than or equal to 0.75, and "red" if none of the case conditions are met.

Accepts: any

ArgumentTypeDescription
Unnamed
Alias: when
anyThe value compared to the context to see if they are equal. The when argument is ignored when the if argument is also specified.
ifbooleanThis value indicates whether the condition is met. The if argument overrides the when argument when both are provided.
then *anyThe value returned if the condition is met.

Returns: case

Clears the context, and returns null.

Accepts: null

Returns: null

Outputs the input in the console. This function is for debug purposes

Expression syntax

clog

Code example

kibana
| demodata
| clog
| filterrows fn={getCell "age" | gt 70}
| clog
| pointseries x="time" y="mean(price)"
| plot defaultStyle={seriesStyle lines=1 fill=1}
| render

This prints the datatable objects in the browser console before and after the filterrows function.

Accepts: any

Returns: Depends on your input and arguments

Includes or excludes columns from a datatable. When both arguments are specified, the excluded columns will be removed first.

Expression syntax

columns include="@timestamp, projects, cost"
columns exclude="username, country, age"

Code example

kibana
| selectFilter
| demodata
| columns include="price, cost, state, project"
| table
| render

This only keeps the price, cost, state, and project columns from the demodata data source and removes all other columns.

Accepts: datatable

ArgumentTypeDescription
Unnamed
Alias: include
stringA comma-separated list of column names to keep in the datatable.
excludestringA comma-separated list of column names to remove from the datatable.

Returns: datatable

Compares the context to specified value to determine true or false. Usually used in combination with <<if_fn>> or case. This only works with primitive types, such as number, string, boolean, null. See also eq, gt, gte, lt, lte, neq

Expression syntax

compare "neq" to="elasticsearch"
compare op="lte" to=100

Code example

kibana
| selectFilter
| demodata
| mapColumn project
  fn={getCell project |
    switch
      {case if={compare eq to=kibana} then=kibana}
      {case if={compare eq to=elasticsearch} then=elasticsearch}
      default="other"
  }
| pointseries size="size(cost)" color="project"
| pie
| render

This maps all project values that aren’t "kibana" and "elasticsearch" to "other". Alternatively, you can use the individual comparator functions instead of compare.

Accepts: string, number, boolean, null

ArgumentTypeDescription
Unnamed
Alias: op
stringThe operator to use in the comparison: "eq" (equal to), "gt" (greater than), "gte" (greater than or equal to), "lt" (less than), "lte" (less than or equal to), "ne" or "neq" (not equal to).
Default: "eq"
to
Aliases: b, this
anyThe value compared to the context.

Returns: boolean

Creates an object used for styling an element’s container, including background, border, and opacity.

Expression syntax

containerStyle backgroundColor="red"’
containerStyle borderRadius="50px"
containerStyle border="1px solid black"
containerStyle padding="5px"
containerStyle opacity="0.5"
containerStyle overflow="hidden"
containerStyle backgroundImage={asset id=asset-f40d2292-cf9e-4f2c-8c6f-a504a25e949c}
  backgroundRepeat="no-repeat"
  backgroundSize="cover"

Code example

shape "star" fill="#E61D35" maintainAspect=true
| render containerStyle={
    containerStyle backgroundColor="#F8D546"
      borderRadius="200px"
      border="4px solid #05509F"
      padding="0px"
      opacity="0.9"
      overflow="hidden"
  }

Accepts: null

ArgumentTypeDescription
backgroundColorstringA valid CSS background color.
backgroundImagestringA valid CSS background image.
backgroundRepeatstringA valid CSS background repeat.
Default: "no-repeat"
backgroundSizestringA valid CSS background size.
Default: "contain"
borderstringA valid CSS border.
borderRadiusstringThe number of pixels to use when rounding the corners.
opacitynumberA number between 0 and 1 that represents the degree of transparency of the element.
overflowstringA valid CSS overflow.
Default: "hidden"
paddingstringThe distance of the content, in pixels, from the border.

Returns: containerStyle

Returns whatever you pass into it. This can be useful when you need to use context as argument to a function as a sub-expression.

Expression syntax

context

Code example

date
| formatdate "LLLL"
| markdown "Last updated: " {context}
| render

Using the context function allows us to pass the output, or context, of the previous function as a value to an argument in the next function. Here we get the formatted date string from the previous function and pass it as content for the markdown element.

Accepts: any

Returns: Depends on your input and arguments

Creates a datatable with a list of columns, and 1 or more empty rows. To populate the rows, use mapColumn or mathColumn.

Expression syntax

createTable id="a" id="b"
createTable id="a" name="A" id="b" name="B" rowCount=5

Code example

var_set
name="logs" value={essql "select count(*) as a from kibana_sample_data_logs"}
name="commerce" value={essql "select count(*) as b from kibana_sample_data_ecommerce"}
| createTable ids="totalA" ids="totalB"
| staticColumn name="totalA" value={var "logs" | getCell "a"}
| alterColumn column="totalA" type="number"
| staticColumn name="totalB" value={var "commerce" | getCell "b"}
| alterColumn column="totalB" type="number"
| mathColumn id="percent" name="percent" expression="totalA / totalB"
| render

This creates a table based on the results of two essql queries, joined into one table.

Accepts: null

ArgumentTypeDescription
idsstringColumn ids to generate in positional order. ID represents the key in the row.
namesstringColumn names to generate in positional order. Names are not required to be unique, and default to the ID if not provided.
rowCountnumberThe number of empty rows to add to the table, to be assigned a value later
Default: 1

Returns: datatable

Creates a datatable from CSV input.

Expression syntax

csv "fruit, stock
  kiwi, 10
  Banana, 5"

Code example

csv "fruit,stock
  kiwi,10
  banana,5"
| pointseries color=fruit size=stock
| pie
| render

This creates a datatable with fruit and stock columns with two rows. This is useful for quickly mocking data.

Accepts: null

ArgumentTypeDescription
Unnamed *
Alias: data
stringThe CSV data to use.
delimiterstringThe data separation character.
newlinestringThe row separation character.

Returns: datatable

Returns the current time, or a time parsed from a specified string, as milliseconds since epoch.

Expression syntax

date
date value=1558735195
date "2019-05-24T21:59:55+0000"
date "01/31/2019" format="MM/DD/YYYY"

Code example

date
| formatdate "LLL"
| markdown {context}
  font={font family="Arial, sans-serif" size=30 align="left"
    color="#000000"
    weight="normal"
    underline=false
    italic=false}
| render

Using date without passing any arguments will return the current date and time.

Accepts: null

ArgumentTypeDescription
Unnamed
Alias: value
stringAn optional date string that is parsed into milliseconds since epoch. The date string can be either a valid JavaScript Date input or a string to parse using the format argument. Must be an ISO8601 string, or you must provide the format.
formatstringThe MomentJS format used to parse the specified date string. For more information, see https://momentjs.com/docs/#/displaying/.

Returns: number

A sample data set that includes project CI times with usernames, countries, and run phases.

Expression syntax

demodata
demodata "ci"
demodata type="shirts"

Code example

kibana
| selectFilter
| demodata
| table
| render

demodata is a mock data set that you can use to start playing around in Canvas.

Accepts: filter

ArgumentTypeDescription
Unnamed
Alias: type
stringThe name of the demo data set to use.
Default: "ci"

Returns: datatable

Executes multiple sub-expressions, then returns the original context. Use for running functions that produce an action or a side effect without changing the original context.

Accepts: any

ArgumentTypeDescription
Unnamed
Aliases: exp, expression, fn, function
anyThe sub-expressions to execute. The return values of these sub-expressions are not available in the root pipeline as this function simply returns the original context.

Returns: Depends on your input and arguments

Configures a dropdown filter control element.

Expression syntax

dropdownControl valueColumn=project filterColumn=project
dropdownControl valueColumn=agent filterColumn=agent.keyword filterGroup=group1

Code example

demodata
| dropdownControl valueColumn=project filterColumn=project
| render

This creates a dropdown filter element. It requires a data source and uses the unique values from the given valueColumn (i.e. project) and applies the filter to the project column. Note: filterColumn should point to a keyword type field for Elasticsearch data sources.

Accepts: datatable

ArgumentTypeDescription
filterColumn *stringThe column or field that you want to filter.
filterGroupstringThe group name for the filter.
labelColumnstringThe column or field to use as the label in the dropdown control
valueColumn *stringThe column or field from which to extract the unique values for the dropdown control.

Returns: render

Returns an embeddable with the provided configuration

Accepts: filter

ArgumentTypeDescription
Unnamed *
Alias: config
stringThe base64 encoded embeddable input object
type *stringThe embeddable type

Returns: embeddable

Returns whether the context is equal to the argument.

Expression syntax

eq true
eq null
eq 10
eq "foo"

Code example

kibana
| selectFilter
| demodata
| mapColumn project
  fn={getCell project |
    switch
      {case if={eq kibana} then=kibana}
      {case if={eq elasticsearch} then=elasticsearch}
      default="other"
  }
| pointseries size="size(cost)" color="project"
| pie
| render

This changes all values in the project column that don’t equal "kibana" or "elasticsearch" to "other".

Accepts: boolean, number, string, null

ArgumentTypeDescription
Unnamed *
Alias: value
boolean, number, string, nullThe value compared to the context.

Returns: boolean

Query Elasticsearch for the number of hits matching the specified query.

Expression syntax

escount index="logstash-*"
escount "currency:"EUR"" index="kibana_sample_data_ecommerce"
escount query="response:404" index="kibana_sample_data_logs"

Code example

kibana
| selectFilter
| escount "Cancelled:true" index="kibana_sample_data_flights"
| math "value"
| progress shape="semicircle"
  label={formatnumber 0,0}
  font={font size=24 family="'Open Sans', Helvetica, Arial, sans-serif" color="#000000" align=center}
  max={filters | escount index="kibana_sample_data_flights"}
| render

The first escount expression retrieves the number of flights that were cancelled. The second escount expression retrieves the total number of flights.

Accepts: filter

ArgumentTypeDescription
Unnamed
Aliases: q, query
stringA Lucene query string.
Default: "-_index:.kibana"
index
Alias: dataView
stringAn index or data view. For example, "logstash-*".
Default: "_all"

Returns: number

Query Elasticsearch for raw documents. Specify the fields you want to retrieve, especially if you are asking for a lot of rows.

Expression syntax

esdocs index="logstash-*"
esdocs "currency:"EUR"" index="kibana_sample_data_ecommerce"
esdocs query="response:404" index="kibana_sample_data_logs"
esdocs index="kibana_sample_data_flights" count=100
esdocs index="kibana_sample_data_flights" sort="AvgTicketPrice, asc"

Code example

kibana
| selectFilter
| esdocs index="kibana_sample_data_ecommerce"
  fields="customer_gender, taxful_total_price, order_date"
  sort="order_date, asc"
  count=10000
| mapColumn "order_date"
  fn={getCell "order_date" | date {context} | rounddate "YYYY-MM-DD"}
| alterColumn "order_date" type="date"
| pointseries x="order_date" y="sum(taxful_total_price)" color="customer_gender"
| plot defaultStyle={seriesStyle lines=3}
  palette={palette "#7ECAE3" "#003A4D" gradient=true}
| render

This retrieves the first 10000 documents data from the kibana_sample_data_ecommerce index sorted by order_date in ascending order, and only requests the customer_gender, taxful_total_price, and order_date fields.

Accepts: filter

ArgumentTypeDescription
Unnamed
Aliases: q, query
stringA Lucene query string.
Default: "-_index:.kibana"
countnumberThe number of documents to retrieve. For better performance, use a smaller data set.
Default: 1000
fieldsstringA comma-separated list of fields. For better performance, use fewer fields.
index
Alias: dataView
stringAn index or data view. For example, "logstash-*".
Default: "_all"
metaFieldsstringComma separated list of meta fields. For example, "_index,_type".
sortstringThe sort direction formatted as "field, direction". For example, "@timestamp, desc" or "bytes, asc".

Returns: datatable

Queries Elasticsearch using Elasticsearch SQL.

Expression syntax

essql query="SELECT * FROM "logstash*""
essql "SELECT * FROM "apm*"" count=10000

Code example

kibana
| selectFilter
| essql query="SELECT Carrier, FlightDelayMin, AvgTicketPrice FROM   "kibana_sample_data_flights""
| table
| render

This retrieves the Carrier, FlightDelayMin, and AvgTicketPrice fields from the "kibana_sample_data_flights" index.

Accepts: kibana_context, null

ArgumentTypeDescription
Unnamed
Aliases: q, query
stringAn Elasticsearch SQL query.
countnumberThe number of documents to retrieve. For better performance, use a smaller data set.
Default: 1000
parameter
Alias: param
string, number, booleanA parameter to be passed to the SQL query.
timeField
Alias: timeField
stringThe time field to use in the time range filter, which is set in the context.
timezone
Alias: tz
stringThe timezone to use for date operations. Valid ISO8601 formats and UTC offsets both work.
Default: "UTC"

Returns: datatable

Creates a filter that matches a given column to an exact value.

Expression syntax

exactly "state" value="running"
exactly "age" value=50 filterGroup="group2"
exactly column="project" value="beats"

Accepts: filter

ArgumentTypeDescription
column *
Aliases: c, field
stringThe column or field that you want to filter.
filterGroupstringThe group name for the filter.
value *
Aliases: v, val
stringThe value to match exactly, including white space and capitalization.

Returns: filter

Filters rows in a datatable based on the return value of a sub-expression.

Expression syntax

filterrows {getCell "project" | eq "kibana"}
filterrows fn={getCell "age" | gt 50}

Code example

kibana
| selectFilter
| demodata
| filterrows {getCell "country" | any {eq "IN"} {eq "US"} {eq "CN"}}
| mapColumn "@timestamp"
  fn={getCell "@timestamp" | rounddate "YYYY-MM"}
| alterColumn "@timestamp" type="date"
| pointseries x="@timestamp" y="mean(cost)" color="country"
| plot defaultStyle={seriesStyle points="2" lines="1"}
  palette={palette "#01A4A4" "#CC6666" "#D0D102" "#616161" "#00A1CB" "#32742C" "#F18D05" "#113F8C" "#61AE24" "#D70060" gradient=false}
| render

This uses filterrows to only keep data from India (IN), the United States (US), and China (CN).

Accepts: datatable

ArgumentTypeDescription
Unnamed *
Aliases: exp, expression, fn, function
booleanAn expression to pass into each row in the datatable. The expression should return a boolean. A true value preserves the row, and a false value removes it.

Returns: datatable

Aggregates element filters from the workpad for use elsewhere, usually a data source. filters is deprecated and will be removed in a future release. Use kibana | selectFilter instead.

Expression syntax

filters
filters group="timefilter1"
filters group="timefilter2" group="dropdownfilter1" ungrouped=true

Code example

filters group=group2 ungrouped=true
| demodata
| pointseries x="project" y="size(cost)" color="project"
| plot defaultStyle={seriesStyle bars=0.75} legend=false
  font={
    font size=14
    family="'Open Sans', Helvetica, Arial, sans-serif"
    align="left"
    color="#FFFFFF"
    weight="lighter"
    underline=true
    italic=true
  }
| render

filters sets the existing filters as context and accepts a group parameter to opt into specific filter groups. Setting ungrouped to true opts out of using global filters.

Accepts: null

ArgumentTypeDescription
Unnamed
Alias: group
stringThe name of the filter group to use.
ungrouped
Aliases: nogroup, nogroups
booleanExclude filters that belong to a filter group?
Default: false

Returns: filter

Create a font style.

Expression syntax

font size=12
font family=Arial
font align=middle
font color=pink
font weight=lighter
font underline=true
font italic=false
font lHeight=32

Code example

kibana
| selectFilter
| demodata
| pointseries x="project" y="size(cost)" color="project"
| plot defaultStyle={seriesStyle bars=0.75} legend=false
  font={
    font size=14
    family="'Open Sans', Helvetica, Arial, sans-serif"
    align="left"
    color="#FFFFFF"
    weight="lighter"
    underline=true
    italic=true
  }
| render

Accepts: null

ArgumentTypeDescription
alignstringThe horizontal text alignment.
Default: ${ theme "font.align" default="left" }
colorstringThe text color.
Default: ${ theme "font.color" }
familystringAn acceptable CSS web font string
Default: ${ theme "font.family" default="'Open Sans', Helvetica, Arial, sans-serif" }
italicbooleanItalicize the text?
Default: ${ theme "font.italic" default=false }
lHeight
Alias: lineHeight
number, nullThe line height in pixels
Default: ${ theme "font.lHeight" }
sizenumberThe font size
Default: ${ theme "font.size" default=14 }
sizeUnitstringThe font size unit
Default: "px"
underlinebooleanUnderline the text?
Default: ${ theme "font.underline" default=false }
weightstringThe font weight. For example, "normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", or "900".
Default: ${ theme "font.weight" default="normal" }

Returns: style

Formats an ISO8601 date string or a date in milliseconds since epoch using MomentJS. See https://momentjs.com/docs/#/displaying/.

Expression syntax

formatdate format="YYYY-MM-DD"
formatdate "MM/DD/YYYY"

Code example

kibana
| selectFilter
| demodata
| mapColumn "time" fn={getCell time | formatdate "MMM 'YY"}
| pointseries x="time" y="sum(price)" color="state"
| plot defaultStyle={seriesStyle points=5}
| render

This transforms the dates in the time field into strings that look like "Jan ‘19", "Feb ‘19", etc. using a MomentJS format.

Accepts: number, string

ArgumentTypeDescription
Unnamed *
Alias: format
stringA MomentJS format. For example, "MM/DD/YYYY". See https://momentjs.com/docs/#/displaying/.

Returns: string

Formats a number into a formatted number string using the Numeral pattern.

Expression syntax

formatnumber format="$0,0.00"
formatnumber "0.0a"

Code example

kibana
| selectFilter
| demodata
| math "mean(percent_uptime)"
| progress shape="gauge"
  label={formatnumber "0%"}
  font={font size=24 family="'Open Sans', Helvetica, Arial, sans-serif" color="#000000" align="center"}
| render

The formatnumber subexpression receives the same context as the progress function, which is the output of the math function. It formats the value into a percentage.

Accepts: number

ArgumentTypeDescription
Unnamed *
Alias: format
stringA Numeral pattern format string. For example, "0.0a" or "0%".

Returns: string

Fetches a single cell from a datatable.

Accepts: datatable

ArgumentTypeDescription
Unnamed
Aliases: c, column
stringThe name of the column to fetch the value from. If not provided, the value is retrieved from the first column.
row
Alias: r
numberThe row number, starting at 0.
Default: 0

Returns: Depends on your input and arguments

Returns whether the context is greater than the argument.

Accepts: number, string

ArgumentTypeDescription
Unnamed *
Alias: value
number, stringThe value compared to the context.

Returns: boolean

Returns whether the context is greater or equal to the argument.

Accepts: number, string

ArgumentTypeDescription
Unnamed *
Alias: value
number, stringThe value compared to the context.

Returns: boolean

Retrieves the first N rows from the datatable. See also tail.

Accepts: datatable

ArgumentTypeDescription
Unnamed
Alias: count
numberThe number of rows to retrieve from the beginning of the datatable.
Default: 1

Returns: datatable

Performs conditional logic.

Accepts: any

ArgumentTypeDescription
Unnamed *
Alias: condition
booleanA true or false indicating whether a condition is met, usually returned by a sub-expression. When unspecified, the original context is returned.
elseanyThe return value when the condition is false. When unspecified and the condition is not met, the original context is returned.
thenanyThe return value when the condition is true. When unspecified and the condition is met, the original context is returned.

Returns: Depends on your input and arguments

Displays an image. Provide an image asset as a base64 data URL, or pass in a sub-expression.

Accepts: null

ArgumentTypeDescription
Unnamed
Aliases: dataurl, url
string, nullThe HTTP(S) URL or base64 data URL of an image.
Default: null
modestring"contain" shows the entire image, scaled to fit. "cover" fills the container with the image, cropping from the sides or bottom as needed. "stretch" resizes the height and width of the image to 100% of the container.
Default: "contain"

Returns: image

Concatenates values from rows in a datatable into a single string.

Accepts: datatable

ArgumentTypeDescription
Unnamed *
Alias: column
stringThe column or field from which to extract the values.
distinctbooleanExtract only unique values?
Default: true
quotestringThe quote character to wrap around each extracted value.
Default: "'"
separator
Aliases: delimiter, sep
stringThe delimiter to insert between each extracted value.
Default: ","

Returns: string

Gets kibana global context

Accepts: kibana_context, null

Returns: kibana_context

Find your current location using the Geolocation API of the browser. Performance can vary, but is fairly accurate. See https://developer.mozilla.org/en-US/docs/Web/API/Navigator/geolocation. Don’t use location if you plan to generate PDFs as this function requires user input.

Accepts: null

Returns: datatable

Returns whether the context is less than the argument.

Accepts: number, string

ArgumentTypeDescription
Unnamed *
Alias: value
number, stringThe value compared to the context.

Returns: boolean

Returns whether the context is less than or equal to the argument.

Accepts: number, string

ArgumentTypeDescription
Unnamed *
Alias: value
number, stringThe value compared to the context.

Returns: boolean

Returns an object with the center coordinates and zoom level of the map.

Accepts: null

ArgumentTypeDescription
lat *numberLatitude for the center of the map
lon *numberLongitude for the center of the map
zoom *numberZoom level of the map

Returns: mapCenter

Adds a column calculated as the result of other columns. Changes are made only when you provide arguments.See also alterColumn and staticColumn.

Accepts: datatable

ArgumentTypeDescription
Unnamed *
Aliases: column, name
stringThe name of the resulting column. Names are not required to be unique.
copyMetaFromstring, nullIf set, the meta object from the specified column id is copied over to the specified target column. If the column doesn’t exist it silently fails.
Default: null
expression *
Aliases: exp, fn, function
boolean, number, string, nullAn expression that is executed on every row, provided with a single-row datatable context and returning the cell value.
idstring, nullAn optional id of the resulting column. When no id is provided, the id will be looked up from the existing column by the provided name argument. If no column with this name exists yet, a new column with this name and an identical id will be added to the table.
Default: null

Returns: datatable

Adds an element that renders Markdown text.

Accepts: datatable, null

ArgumentTypeDescription
Unnamed
Aliases: content, expression
stringA string of text that contains Markdown. To concatenate, pass the string function multiple times.
Default: ""
fontstyleThe CSS font properties for the content. For example, "font-family" or "font-weight".
Default: ${font}
openLinksInNewTabbooleanA true or false value for opening links in a new tab. The default value is false. Setting to true opens all links in a new tab.
Default: false

Returns: render

Interprets a TinyMath math expression using a number or datatable as context. The datatable columns are available by their column name. If the context is a number it is available as value.

Accepts: number, datatable

ArgumentTypeDescription
Unnamed
Alias: expression
stringAn evaluated TinyMath expression. See canvas-tinymath-functions.md.
onErrorstringIn case the TinyMath evaluation fails or returns NaN, the return value is specified by onError. When 'throw', it will throw an exception, terminating expression execution (default).

Returns: Depends on your input and arguments

Adds a column by evaluating TinyMath on each row. This function is optimized for math and performs better than using a math expression in mapColumn.

Accepts: datatable

ArgumentTypeDescription
Unnamed *
Aliases: column, name
stringThe name of the resulting column. Names are not required to be unique.
Unnamed
Alias: expression
stringAn evaluated TinyMath expression. See canvas-tinymath-functions.md.
castColumnsstringThe column ids that are cast to numbers before the formula is applied.
copyMetaFromstring, nullIf set, the meta object from the specified column id is copied over to the specified target column. If the column doesn’t exist it silently fails.
Default: null
id *stringid of the resulting column. Must be unique.
onErrorstringIn case the TinyMath evaluation fails or returns NaN, the return value is specified by onError. When 'throw', it will throw an exception, terminating expression execution (default).

Returns: datatable

Displays a number over a label.

Accepts: number, string, null

ArgumentTypeDescription
Unnamed
Aliases: description, label, text
stringThe text describing the metric.
Default: ""
labelFontstyleThe CSS font properties for the label. For example, font-family or font-weight.
Default: ${font size=14 family="'Open Sans', Helvetica, Arial, sans-serif" color="#000000" align=center}
metricFontstyleThe CSS font properties for the metric. For example, font-family or font-weight.
Default: ${font size=48 family="'Open Sans', Helvetica, Arial, sans-serif" color="#000000" align=center lHeight=48}
metricFormat
Alias: format
stringA Numeral pattern format string. For example, "0.0a" or "0%".

Returns: render

Returns whether the context is not equal to the argument.

Accepts: boolean, number, string, null

ArgumentTypeDescription
Unnamed *
Alias: value
boolean, number, string, nullThe value compared to the context.

Returns: boolean

Creates a color palette.

Accepts: null

ArgumentTypeDescription
Unnamed
Alias: color
stringThe palette colors. Accepts an HTML color name, HEX, HSL, HSLA, RGB, or RGBA.
continuitystringDefault: "above"
gradientbooleanMake a gradient palette where supported?
Default: false
rangestringDefault: "percent"
rangeMaxnumber
rangeMinnumber
reversebooleanReverse the palette?
Default: false
stopnumberThe palette color stops. When used, it must be associated with each color.

Returns: palette

Configures a pie chart element.

Accepts: pointseries

ArgumentTypeDescription
fontstyleThe CSS font properties for the labels. For example, font-family or font-weight.
Default: ${font}
holenumberDraws a hole in the pie, between 0 and 100, as a percentage of the pie radius.
Default: 0
labelRadiusnumberThe percentage of the container area to use as a radius for the label circle.
Default: 100
labelsbooleanDisplay the pie labels?
Default: true
legendstring, booleanThe legend position. For example, "nw", "sw", "ne", "se", or false. When false, the legend is hidden.
Default: false
palettepaletteA palette object for describing the colors to use in this pie chart.
Default: ${palette}
radiusstring, numberThe radius of the pie as a percentage, between 0 and 1, of the available space. To automatically set the radius, use "auto".
Default: "auto"
seriesStyleseriesStyleA style of a specific series
tiltnumberThe percentage of tilt where 1 is fully vertical, and 0 is completely flat.
Default: 1

Returns: render

Configures a chart element.

Accepts: pointseries

ArgumentTypeDescription
defaultStyleseriesStyleThe default style to use for every series.
Default: ${seriesStyle points=5}
fontstyleThe CSS font properties for the labels. For example, font-family or font-weight.
Default: ${font}
legendstring, booleanThe legend position. For example, "nw", "sw", "ne", "se", or false. When false, the legend is hidden.
Default: "ne"
palettepaletteA palette object for describing the colors to use in this chart.
Default: ${palette}
seriesStyleseriesStyleA style of a specific series
xaxisboolean, axisConfigThe axis configuration. When false, the axis is hidden.
Default: true
yaxisboolean, axisConfigThe axis configuration. When false, the axis is hidden.
Default: true

Returns: render

Subdivides a datatable by the unique values of the specified columns, and passes the resulting tables into an expression, then merges the outputs of each expression.

Accepts: datatable

ArgumentTypeDescription
bystringThe column to subdivide the datatable.
expression
Aliases: exp, fn, function
datatableAn expression to pass each resulting datatable into. Tips: Expressions must return a datatable. Use as to turn literals into datatables. Multiple expressions must return the same number of rows.If you need to return a different row count, pipe into another instance of ply. If multiple expressions returns the columns with the same name, the last one wins.

Returns: datatable

Turn a datatable into a point series model. Currently we differentiate measure from dimensions by looking for a TinyMath expression. See canvas-tinymath-functions.md. If you enter a TinyMath expression in your argument, we treat that argument as a measure, otherwise it is a dimension. Dimensions are combined to create unique keys. Measures are then deduplicated by those keys using the specified TinyMath function

Accepts: datatable

ArgumentTypeDescription
colorstringAn expression to use in determining the mark’s color.
sizestringThe size of the marks. Only applicable to supported elements.
textstringThe text to show on the mark. Only applicable to supported elements.
xstringThe values along the X-axis.
ystringThe values along the Y-axis.

Returns: pointseries

Configures a progress element.

Accepts: number

ArgumentTypeDescription
Unnamed
Alias: shape
stringSelect "gauge", "horizontalBar", "horizontalPill", "semicircle", "unicorn", "verticalBar", "verticalPill", or "wheel".
Default: "gauge"
barColorstringThe color of the background bar.
Default: "#f0f0f0"
barWeightnumberThe thickness of the background bar.
Default: 20
fontstyleThe CSS font properties for the label. For example, font-family or font-weight.
Default: ${font size=24 family="'Open Sans', Helvetica, Arial, sans-serif" color="#000000" align=center}
labelboolean, stringTo show or hide the label, use true or false. Alternatively, provide a string to display as a label.
Default: true
maxnumberThe maximum value of the progress element.
Default: 1
valueColorstringThe color of the progress bar.
Default: "#1785b0"
valueWeightnumberThe thickness of the progress bar.
Default: 20

Returns: render

Removes filters from context

Accepts: kibana_context

ArgumentTypeDescription
Unnamed
Alias: group
stringRemoves only filters belonging to the provided group
fromstringRemoves only filters owned by the provided id
ungrouped
Aliases: nogroup, nogroups
booleanShould filters without group be removed
Default: false

Returns: kibana_context

Renders the context as a specific element and sets element level options, such as background and border styling.

Accepts: render

ArgumentTypeDescription
asstringThe element type to render. You probably want a specialized function instead, such as plot or shape.
containerStylecontainerStyleThe style for the container, including background, border, and opacity.
Default: ${containerStyle}
cssstringAny block of custom CSS to be scoped to the element.
Default: ".canvasRenderEl${}"

Returns: render

Configures a repeating image element.

Accepts: number

ArgumentTypeDescription
emptyImagestring, nullFills the difference between the context and max parameter for the element with this image. Provide an image asset as a base64 data URL, or pass in a sub-expression.
Default: null
imagestring, nullThe image to repeat. Provide an image asset as a base64 data URL, or pass in a sub-expression.
Default: null
maxnumber, nullThe maximum number of times the image can repeat.
Default: 1000
sizenumberThe maximum height or width of the image, in pixels. When the image is taller than it is wide, this function limits the height.
Default: 100

Returns: render

Uses a regular expression to replace parts of a string.

Accepts: string

ArgumentTypeDescription
Unnamed
Aliases: pattern, regex
stringThe text or pattern of a JavaScript regular expression. For example, "[aeiou]". You can use capturing groups here.
flags
Alias: modifiers
stringSpecify flags. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp.
Default: "g"
replacementstringThe replacement for the matching parts of string. Capturing groups can be accessed by their index. For example, "$1".
Default: ""

Returns: string

Configures an image reveal element.

Accepts: number

ArgumentTypeDescription
emptyImagestring, nullAn optional background image to reveal over. Provide an image asset as a base64 data URL, or pass in a sub-expression.
Default: null
imagestring, nullThe image to reveal. Provide an image asset as a base64 data URL, or pass in a sub-expression.
Default: null
originstringThe position to start the image fill. For example, "top", "bottom", "left", or right.
Default: "bottom"

Returns: render

Uses a MomentJS formatting string to round milliseconds since epoch, and returns milliseconds since epoch.

Accepts: number

ArgumentTypeDescription
Unnamed
Alias: format
stringThe MomentJS format to use for bucketing. For example, "YYYY-MM" rounds to months. See https://momentjs.com/docs/#/displaying/.

Returns: number

Returns the number of rows. Pairs with ply to get the count of unique column values, or combinations of unique column values.

Accepts: datatable

Returns: number

Selects filters from context

Accepts: kibana_context

ArgumentTypeDescription
Unnamed
Alias: group
stringSelect only filters belonging to the provided group
fromstringSelect only filters owned by the provided id
ungrouped
Aliases: nogroup, nogroups
booleanShould filters without group be included
Default: false

Returns: kibana_context

Creates an object used for describing the properties of a series on a chart. Use seriesStyle inside of a charting function, like plot or pie.

Accepts: null

ArgumentTypeDescription
barsnumberThe width of bars.
colorstringThe line color.
fillnumber, booleanShould we fill in the points?
Default: false
horizontalBarsbooleanSets the orientation of the bars in the chart to horizontal.
labelstringThe name of the series to style.
linesnumberThe width of the line.
pointsnumberThe size of points on line.
stacknumber, nullSpecifies if the series should be stacked. The number is the stack ID. Series with the same stack ID are stacked together.

Returns: seriesStyle

Creates a shape.

Accepts: null

ArgumentTypeDescription
Unnamed
Alias: shape
stringPick a shape.
Default: "square"
border
Alias: stroke
stringAn SVG color for the border outlining the shape.
borderWidth
Alias: strokeWidth
numberThe thickness of the border.
Default: 0
fillstringAn SVG color to fill the shape.
Default: "black"
maintainAspectbooleanMaintain the shape’s original aspect ratio?
Default: false

Returns: Depends on your input and arguments

Sorts a datatable by the specified column.

Accepts: datatable

ArgumentTypeDescription
Unnamed
Aliases: by, column
stringThe column to sort by. When unspecified, the datatable is sorted by the first column.
reversebooleanReverses the sorting order. When unspecified, the datatable is sorted in ascending order.
Default: false

Returns: datatable

Adds a column with the same static value in every row. See also alterColumn, mapColumn, and mathColumn

Accepts: datatable

ArgumentTypeDescription
Unnamed *
Aliases: column, name
stringThe name of the new column.
valuestring, number, boolean, nullThe value to insert in each row in the new column. TIP: use a sub-expression to rollup other columns into a static value.
Default: null

Returns: datatable

Concatenates all of the arguments into a single string.

Accepts: null

ArgumentTypeDescription
Unnamed
Alias: value
string, number, booleanThe values to join together into one string. Include spaces where needed.

Returns: string

Performs conditional logic with multiple conditions. See also case, which builds a case to pass to the switch function.

Accepts: any

ArgumentTypeDescription
Unnamed *
Alias: case
caseThe conditions to check.
default
Alias: finally
anyThe value returned when no conditions are met. When unspecified and no conditions are met, the original context is returned.

Returns: Depends on your input and arguments

Configures a table element.

Accepts: datatable

ArgumentTypeDescription
fontstyleThe CSS font properties for the contents of the table. For example, font-family or font-weight.
Default: ${font}
paginatebooleanShow pagination controls? When false, only the first page is displayed.
Default: true
perPagenumberThe number of rows to display on each page.
Default: 10
showHeaderbooleanShow or hide the header row with titles for each column.
Default: true

Returns: render

Retrieves the last N rows from the end of a datatable. See also head.

Accepts: datatable

ArgumentTypeDescription
Unnamed
Alias: count
numberThe number of rows to retrieve from the end of the datatable.
Default: 1

Returns: datatable

Creates a time filter for querying a source.

Accepts: filter

ArgumentTypeDescription
column
Aliases: c, field
stringThe column or field that you want to filter.
Default: "@timestamp"
filterGroupstringThe group name for the filter
from
Aliases: f, start
stringThe beginning of the range, in ISO8601 or Elasticsearch datemath format
to
Aliases: end, t
stringThe end of the range, in ISO8601 or Elasticsearch datemath format

Returns: filter

Configures a time filter control element.

Accepts: null

ArgumentTypeDescription
column
Aliases: c, field
stringThe column or field that you want to filter.
Default: "@timestamp"
compactbooleanShows the time filter as a button, which triggers a popover.
Default: true
filterGroupstringThe group name for the filter.

Returns: render

Uses Timelion to extract one or more time series from many sources.

Accepts: filter

ArgumentTypeDescription
Unnamed
Aliases: q, query
stringA Timelion query
Default: ".es(*)"
fromstringThe Elasticsearch datemath string for the beginning of the time range.
Default: "now-1y"
intervalstringThe bucket interval for the time series.
Default: "auto"
timezonestringThe timezone for the time range. See https://momentjs.com/timezone/.
Default: "UTC"
tostringThe Elasticsearch datemath string for the end of the time range.
Default: "now"

Returns: datatable

An object that represents a span of time.

Accepts: null

ArgumentTypeDescription
from *stringThe start of the time range
to *stringThe end of the time range

Returns: timerange

Explicitly casts the type of the context from one type to the specified type.

Accepts: any

ArgumentTypeDescription
Unnamed
Alias: type
stringA known data type in the expression language.

Returns: Depends on your input and arguments

Returns a UI settings parameter value.

Accepts: any

ArgumentTypeDescription
Unnamed *
Alias: parameter
stringThe parameter name.
defaultanyA default value in case of the parameter is not set.

Returns: Depends on your input and arguments

Retrieves a URL parameter to use in an expression. The urlparam function always returns a string. For example, you can retrieve the value "20" from the parameter myVar from the URL https://localhost:5601/app/canvas?myVar=20.

Accepts: null

ArgumentTypeDescription
Unnamed *
Aliases: param, var, variable
stringThe URL hash parameter to retrieve.
defaultstringThe string returned when the URL parameter is unspecified.
Default: ""

Returns: string

Updates the Kibana global context.

Accepts: any

ArgumentTypeDescription
Unnamed *
Alias: name
stringSpecify the name of the variable.

Returns: Depends on your input and arguments

Updates the Kibana global context.

Accepts: any

ArgumentTypeDescription
Unnamed *
Alias: name
stringSpecify the name of the variable.
value
Alias: val
anySpecify the value for the variable. When unspecified, the input context is used.

Returns: Depends on your input and arguments