Building Dashboard Widgets on a Table

Turn a stored table into dashboard widgets: add to dashboard in one click, sum, count and average with group by, and keep multi-currency totals honest.

5 min read

On this page

A table is a dashboard source, alongside connected banks and destinations. Anything you have stored can be charted, totaled, and grouped without exporting it first. This guide covers getting a table onto a dashboard and doing arithmetic on it.

Before you start

You need a table with rows in it. Tables are in beta and are enabled per workspace. If you are new to dashboards, read the dashboards guides first; everything there applies to table-backed widgets too.

The short version#

  • A table can power every widget kind, not only a table-shaped widget.
  • Stored fields and computed fields are equal dashboard inputs: filter, group, aggregate, or encode either one.
  • Use the grid's calculation row for a quick working answer; use a dashboard widget for an answer you want to keep and share.
  • Table revisions provide exact freshness, and money stays grouped by currency unless you explicitly allow a mixed-currency calculation.

Add a table to a dashboard#

There are two ways in, and they produce the same widget.

From the table

  1. Open the table

    Open the table you want to chart.
  2. Click Add to dashboard

    The button is in the grid's toolbar, and in the table's menu on the Tables list.

  3. Pick a dashboard

    Choose an existing dashboard or create one. BankSync adds a table widget carrying your columns, in your order, with your formats, and takes you to it.

From the dashboard

  1. Add a widget

    On a dashboard, add a widget and open the source picker.
  2. Choose Tables

    Tables are the third source option, next to banks and destinations. Pick the table.

  3. Choose a widget kind

    Table, chart, KPI, or any other kind. The table's columns and formats are already available to the widget.

Currency codes, decimal precision, and date formats come across from the table's field settings, so a widget looks right the moment you add it. Change a format on the table and the widget follows.

Freshness#

A table-backed widget knows exactly when it is out of date, because the table records a revision that changes whenever a row or a field changes. A widget is stale when the table has changed since the widget last read it, and fresh otherwise. There is no refresh interval to tune and no window where a widget silently shows old numbers after a sync has landed.

This also means many widgets over one table are cheap. Twelve widgets reading one table is one read, not twelve.

A view is a widget#

The six layouts you build inside a table — board, calendar, gallery, timeline, list and form — are also widget kinds. A board you arranged on the table and a board you put on a dashboard are the same thing rendered in two places, not two implementations that can drift apart.

Writing back from a dashboard#

A table-backed widget is not read-only. Editing a cell inline, dragging a board card to another lane, dragging a calendar event to another day, moving a timeline bar, submitting a form, or pressing a row button all write to the table — through exactly the same validation, version check, unique rules and row history as an edit in the grid, so the row's history reads the same whichever surface touched it.

If someone else changed the row first, the write is refused as a conflict rather than overwriting them. Viewers and embedded (publicly shared) dashboards are read-only.

Live, not on a timer#

When the table changes, the widgets over it re-render on their own. Only the widgets that depend on the table that changed are refreshed, and if the live connection is unavailable the dashboard falls back to its ordinary refresh rather than breaking.

Click a row to filter the rest#

Clicking a row in a table, board or list widget can emit that row's value into the dashboard's filters, so the other widgets narrow to it. That is a master-detail dashboard — pick a client on the left, see their invoices, spend and balances on the right — with no app builder involved.

Quick aggregations#

There are two places to do arithmetic, and which one to use depends on whether you want the answer in the grid or on a dashboard.

In the grid, for a quick look while you are working:

  • Set a per-column aggregate (sum, count, average, min, max) and it appears in a totals row at the bottom.
  • Group rows by a column to get subtotals per group, for example spend by category or by account.
  • Both are saved with the table's view — shared with the workspace, or personal to you.

In a widget, for something you want to keep:

  • Add an aggregation to the widget: sum, count, or average over a column, optionally grouped by another column.
  • Group by a date field to get a series over time, or by a text or select field to get a breakdown.
  • Filter first if you only want part of the table. Filters are applied before the aggregate.

A KPI widget with sum(amount) grouped by nothing gives you one number. The same aggregate grouped by month gives you a bar chart. Grouped by category, a breakdown.

The multi-currency guard#

If a table has a currency column, aggregations over money columns group by currency by default. A table holding AUD and USD transactions gives you an AUD total and a USD total, not one number.

Summing across currencies must be explicit

Adding 100 AUD to 100 USD does not give you 200 of anything. BankSync refuses to do it unless you explicitly turn on mixed currencies for that aggregation, which tells us you have your own reason. If you need a single converted total, convert the amounts into a column of your own first and sum that.

The default is strict on purpose. A cross-currency total is wrong in a way that looks completely plausible: the number is the right order of magnitude, the chart renders fine, and nothing anywhere says it is nonsense. Making you ask for it is the only point where the mistake is visible.

Feeds that write to a table#

If a feed writes to a table, build your widgets on the table rather than on the feed's destination. It is strictly better: the table is read directly rather than through a third-party API, so there is no rate limit, no expired token, and no reformatting on the way back in. It is also faster and always shows what was actually stored.

Where to go next#

Use this page with your AI assistant

Every BankSync doc is available as plain Markdown for agents and LLMs.