TopStats.gg

Widgets

How to add a widget and shape it with measures, breakdowns, filters, display options, and layout.

A widget is a single tile on a dashboard: a number, a chart, a table, a funnel, and so on. You build one by picking a source event, choosing a type, configuring it, and giving it a title. A live preview shows the result as you go, so you can see exactly what the tile will look like before you save it.

Adding a widget

Click "Add widget"

This opens the widget builder.

Pick a source event

Choose the event name this widget reads from, like purchase or player_join. Everything the widget shows is built from events with that name.

Pick a type

Metric, Table, Funnel, Retention, KPI row, Histogram, Activity heatmap, Note, or External. Each type has its own settings.

Configure it

Set the measure, breakdown, filters, and display options that fit what you want to see. The live preview updates as you change things.

Give it a title

The title is the label shown at the top of the tile. Save, and the widget is pinned to the dashboard.

You never pick the widget kind directly

You do not choose a "kind" like counter or time series by hand. The kind is derived from your config, based on whether you break down and whether you plot over time. Each kind then offers only the chart types that fit its data shape.

Metric widgets

Metric is the workhorse type. You pick an event, a measure, optionally a breakdown, and optionally plot the result over time. Those choices decide whether you end up with a single number, a time series, or a breakdown.

Measures

The measure is the maths applied to the matching events.

MeasureNeeds a propertyWhat it gives you
countNoHow many events matched
sumNumericThe total of that number
avgNumericThe average of that number
minNumericThe smallest value
maxNumericThe largest value
uniqStringHow many distinct values there were

For example, on the purchase event: count tells you how many purchases happened, sum of an amount property gives you total revenue, and avg of amount gives you the average order value. uniq on a string property like country tells you how many distinct countries bought something.

Events that are missing the chosen property are simply left out, so a blank value never drags an average down or skews a total.

Breakdown

A breakdown groups the measure by one property, giving you one bar or one line per value instead of a single combined number.

  • A string property groups normally. Break purchase down by an item property and you get one bar per item.
  • A list (array) property explodes, so each value in the array counts separately. If an event has perks: ["double_jump", "shield"], it counts toward both double_jump and shield, so one event can appear under more than one bar or series.

Only string and list properties can be a breakdown. You cannot break down by a number.

Over time

Toggle "over time" to add a time axis and watch the measure change across the dashboard's range. count of player_join over time becomes a line or area chart of joins per bucket.

Combine a breakdown with over time and you get a multiseries chart: one line or set of bars per breakdown value, plotted across time. For example, joins over time broken down by map gives you one series per map.

Chart types by shape

The combination of breakdown and over time settles on a shape, and each shape offers its own set of chart types:

ShapeWhen you get itChart types
CounterNo breakdown, not over timestat, area, line
TimeseriesNo breakdown, over timearea, line, bar, stat, table
CategoricalBreakdown, not over timebar, pie, table
MultiseriesBreakdown and over timebar, area, line, diverging, table

The counter delta

A counter (and each item in a KPI row) also shows how it changed against the immediately preceding window of the same length. If the dashboard is on the 24h range, the counter compares the last 24 hours with the 24 hours before that, and shows the difference as a delta.

The delta is hidden when the previous window was zero, so you never see a meaningless jump from nothing.

Filters

Filters narrow a widget down to matching events. Each filter is a property key, an operator, and a value. Add more than one and they combine with AND, so an event has to match every filter to be counted.

OperatorMeaningExample
eqEqualsmap eq desert
neqNot equalscountry neq US
containsCase-insensitive substring (string properties)page contains checkout
hasAn array property contains this value as one of its elementsperks has shield

For example, map eq desert combined with mode eq ranked shows only ranked matches on the desert map.

A filter only ever considers events that actually carry the key. An event with no map property is not counted by a map filter at all, rather than being treated as a non-match.

Display options

Once the data shape is set, these options control how it is drawn.

  • Goal / target: on a stat, renders progress toward a number. Point a revenue stat at a 10000 goal and it shows how close you are.
  • Y-axis: pinned to zero by default, or fit to the data's own range for line, area, and bar charts. Fitting to range makes small movements easier to see; pinning to zero keeps the scale honest.
  • Stacking (multiseries): stacked (the default), 100% stacked, or overlaid. Stacked shows the total and each series' contribution, 100% stacked shows each series as a share of the whole, and overlaid draws them on the same baseline for direct comparison.
  • Legend: placed at the bottom or on the right side, and optionally showing the value next to each label.

Layout and limits

  • Size: use the sm, md, and lg presets, or set a custom column span from 2 to 12 on the grid. Picking a preset clears any custom span you set.
  • Per-widget menu: each tile has a menu with Edit, Rename, Duplicate, "Alert on this" (metric widgets only), width presets, move earlier or later, and remove.
  • Breakdown limit: breakdowns keep only the top labels by value (10 by default) unless the widget sets its own limit, so a chart with hundreds of values stays readable.
  • Table cap: tables are capped at 100 rows.

Widget types

Each type has its own page with the full set of settings.

On this page