Skip to content

Variable formats ​

Exactly what the panel writes into a dashboard variable, per channel, and how to consume it safely.

Summary ​

ChannelVariablesValue
Filter (scalar)1the filter's value, as a string
Filter (range)2numeric min and max, as strings
Time window2UTC ISO 8601
Click1the clicked entity's column value
Coordinates2latitude and longitude, 6 decimal places
Viewport4west, south, east, north — degrees, 6 decimal places
Drawn area1WKT in EPSG:4326

Everything is written as a string, because that is what a dashboard variable holds.

Time window ​

2026-08-18T14:30:00.000Z

UTC ISO 8601, as produced by toISOString. Chosen over epoch milliseconds because the target is usually a SQL timestamptz, and because it is legible in a URL and in a shared link.

Reading is more permissive than writing: ISO, any Date-parseable string, epoch ms as a number, or epoch ms as a numeric string. The empty string and Grafana's $__all are read as "no window".

Coordinates ​

Two variables — latitude in the first, longitude in the second — each a decimal degree rounded to six decimal places, about 0.1 m.

The rounding is not cosmetic: it means re-pinning the same spot does not rewrite the variable, and so does not re-run every panel that reads it.

Values survive an unpin. Clicking again unpins the marker on the map, but the variables keep the last position until the next pin, so a consuming spatial query never runs with an empty centre.

Viewport ​

Four variables, each a decimal degree rounded to six places:

VariableEdge
westminimum longitude
southminimum latitude
eastmaximum longitude
northmaximum latitude

Numbers rather than a geometry, deliberately: there is nothing free-form for a consuming query to interpolate.

Coordinates are clamped to valid ranges. Zoomed far enough out the computed span runs past the antimeridian and the poles, and no consumer should be handed a longitude of −250.

Published once on load, then 300 ms after the map comes to rest. A value that has not changed numerically is not rewritten.

Drawn area ​

WKT in EPSG:4326, for example:

POLYGON((-79.01 -2.91,-78.98 -2.91,-78.98 -2.88,-79.01 -2.88,-79.01 -2.91))

Only the most recent figure. Deleting the last one clears the variable to the empty string — which is what the != '' guard in every example is for.

Never written on dashboard load, so a shared link keeps the area it was opened with.

Range filters ​

Two variables holding the numeric bounds as strings. When the filter is removed both are written blank, rather than left holding their old values — otherwise the map would be at "no filter" while the variables held a range, and neither side would ever match the last agreement again.

Consuming safely ​

Guard the empty value ​

Every channel can be empty: before the first interaction, after a clear, or on a fresh dashboard. Panels reading the variable run anyway.

sql
-- drawn area
WHERE $area != '' AND ST_Intersects(geom, ST_GeomFromText($area, 4326))

-- coordinates
WHERE $lat != '' AND ST_DWithin(geom, ST_MakePoint($lng, $lat)::geography, $radius)

-- time window, PostgreSQL
WHERE ('$from' = '' OR ts >= '$from'::timestamptz)

Quoting depends on the data source ​

Do not quote a variable on a source that interpolates with a SQL string format

Some data sources — the DuckDB one among them — add the quotes themselves. '$var' arrives as ''value'' and fails to parse. Write $var, and cast defensively:

sql
WHERE ts >= coalesce(try_cast($from AS TIMESTAMPTZ), '-infinity')

The PostgreSQL data source does not do this; there, quote normally. When in doubt, read the generated SQL in the query inspector.

Do not consume your own map's output ​

Putting the viewport or the drawn area into this panel's query makes the map filter itself, and the filter cannot be widened again — the rows are gone. See Publishing.

Multi-value variables ​

Grafana repeats a variable in the URL when it is multi-value. Every single-valued channel here reads the first entry, so a variable that has accidentally become multi-value degrades rather than breaking.

Apache-2.0. Bundles kepler.gl (MIT) and flowmap.gl (Apache-2.0).