Skip to content

Widgets overview

Dashboards in Vortex are built from widgets — individual panels that each run a ClickHouse query against your events and display the result as a chart, number, or table.

Each widget is independent: it has its own query, its own visualization type, and its own display settings. You can mix and match types freely on the same dashboard.

Stat

A single KPI number. Best for totals, averages, conversion rates.

Learn more →

Line chart

Trends over time. Supports multiple series on the same chart.

Learn more →

Bar chart

Compare categories side by side — platforms, versions, countries.

Learn more →

Pie chart

Proportional share across a small number of categories.

Learn more →

Geo map

Any metric broken down by country on an interactive world map.

Learn more →

Table

Multi-column tabular data for detailed breakdowns.

Learn more →


Every widget has two optional display settings that control how values are formatted — independent of the underlying query.

ValueBehaviour
None (default)Values are displayed as-is
PercentThe frontend divides each value by the grand total and appends a % sign

Use percent mode whenever you want to show shares, proportions, or distributions. Your query returns raw counts; the percentage calculation is handled automatically.

Appends or prepends a symbol to every displayed number. Purely cosmetic — does not affect the query result.

ValueSymbolUse when
noneDefault, no symbol
%%Percentage values (combine with percent display format, or pre-computed ratios)
$$USD revenue, cost, price
Euro amounts
££GBP amounts
¥¥JPY / CNY amounts
customyour textAny other unit — set a custom suffix such as ms, km, req/s

The widget renderer auto-detects which column is the value axis and which is the label axis based on the column alias you use in your SELECT.

Value columns — use one of these aliases for the numeric column your chart should measure: count, value, total, total_records

Label columns — use a descriptive name that reflects the dimension: platform, country, date, name, version, …

-- Good: clear value and label aliases
SELECT platform, count() AS count
FROM {table}
WHERE name = 'app_started'
GROUP BY platform
ORDER BY count DESC

All events are stored in a single ClickHouse table. Every widget queries this table.

ColumnTypeDescription
nameStringEvent name, e.g. app_started, level_completed
identityStringUnique user / player identifier (UUID)
session_idStringSession identifier (UUID)
valueJSONEvent payload — structure varies per event
app_versionStringApplication version, e.g. 1.7.8
platformStringPlatform, e.g. steam, ios, android
countryStringCountry name, e.g. France
regionStringRegion name
customJSONCustom metadata attached via the SDK
timestampDateTimeEvent timestamp

Access nested JSON fields with dot notation: value.screen, custom.user_tier.