Creating a SQL-based visualization
To create a SQL-based visualization, open a dashboard tile editor and select SQL. From there:- Select the Connection to run the query against.
- Optionally select a Source — this enables dashboard-level filters to be applied to your chart via the
$__filtersmacro. - Write your SQL query in the editor, using query parameters and macros to integrate with the dashboard time range, filters, and variables.
- Click Run to preview the results, then Save to save the visualization.
Query parameters
Query parameters allow your SQL to reference the dashboard’s current time range and granularity. They use the ClickHouse parameterized query syntax:{paramName:Type}.
Available parameters
The parameters available depend on the chart type: Time Series charts (including stacked bars):
Table, Pie, and Number charts:
Macros
Macros are shortcuts that expand into common ClickHouse SQL expressions. They are prefixed with$__ and are replaced before the query is sent to ClickHouse.
Time boundary macros
These macros return a ClickHouse expression representing the dashboard’s start or end time. They take no arguments.Time filter macros
These macros generate aWHERE clause fragment that filters a column to the dashboard time range.
Example expansion of
$__timeFilter(TimestampTime):
Time interval macros
These macros bucket a timestamp column into intervals matching the dashboard granularity. They are typically used inSELECT and GROUP BY clauses for time series charts. These macros are only available for Time Series visualizations, including stacked bars.
Example expansion of
$__timeInterval(TimestampTime):
Dashboard filter macro
When a Source is selected on the chart and dashboard filters are active,
$__filters expands to the corresponding SQL WHERE conditions. When no source is selected or no filters are applied, it expands to (1=1), so it is always safe to include in a WHERE clause.
Only filters with Broadcast filter condition enabled are applied by $__filters. Filters exposed as variables are referenced explicitly, as described below.
Dashboard variable macros
When a dashboard filter is available as a variable, its selected values can be referenced anywhere in the query. These macros are only available on tiles belonging to a dashboard that declares at least one variable.
A variable’s values can also be interpolated directly as
$name or ${name}, with an optional format — ${name:sqlstring} (the default), ${name:csv}, or ${name:regex}. In the default format a direct reference renders as NULL before anything is selected, so prefer the macros above wherever a predicate is expected.
How query results are plotted
The UI automatically maps result columns to chart elements based on column types. The mapping rules differ by chart type.Time Series charts
Pie chart
Number chart
Table chart
All result columns are displayed directly as table columns.Examples
Example table namesThe examples use
otel_logs and otel_traces. Adjust the table and column names to match your data. When running the examples on play-clickstack.clickhouse.com, use otel_v2.otel_logs or otel_v2.otel_traces.Time Series chart — log count over time by service
This query counts log events per service, bucketed into time intervals matching the dashboard granularity.ts(DateTime) is used as the x-axis timestamp.count(numeric) is plotted as the series value.ServiceName(string) creates a separate line per service.
Time Series chart — using macros
The same query written using macros for brevity:Time Series chart — using dashboard variables
Given a dashboard with aservice variable on ServiceName and a severity variable on SeverityText, this query scopes the chart to the current service selection and excludes the selected severities. Both macros expand to 1=1 while their variable has no selection, so the chart renders unfiltered until the viewer picks a value.
Stacked bar chart — error count by severity
Table chart — top 10 slowest endpoints
Pie chart — request distribution by service
request_count(numeric) determines each slice’s size.ServiceName(string) labels each slice.
Number chart — total error count
total_errors from the first row is displayed.
Notes
- SQL-based visualizations execute with
readonlymode enabled — onlySELECTqueries are permitted. - Each SQL-based visualization supports a single query; multiple queries are not supported.
- The SQL editor provides autocomplete suggestions for both query parameters and macros.
- A source must be selected to apply dashboard filters to SQL-based visualizations. The source should match the table being queried to ensure accurate filtering.
- Dashboard variables need no source — the values come from the dashboard’s filter dropdowns, not from the tile’s own source.
- Alerts on a SQL tile that references a dashboard variable evaluate with every variable in its empty state, not the values selected on the dashboard.