What you’ll build
A sales dashboard with four blocks over one uploaded dataset:- Revenue by region — bar chart
- Monthly trend — line chart
- Top products — table
- A region filter — click any bar to cross-filter the rest
Prerequisites
- A Panels account (sign up free).
- A CSV of sales data with roughly these columns:
order_date,region,product,amount. Don’t have one? Any CSV works — adjust the column names in the SQL below to match yours.
Build it
1
Create a project
From your workspace, create a new project. A project owns one computation graph
and every view built on top of it.
2
Upload your CSV
Upload the CSV into the project. The upload becomes a source node — the
immutable, content-addressed starting point of your graph. Panels infers column
types on ingest; you’ll see a preview with the detected schema and row count.
An uploaded file is stored as-is (the bronze layer). Everything downstream is
derived from it with SQL, so you can re-shape freely without ever mutating the
original data.
3
Shape the data with SQL
Add a SQL node for each metric. Reference the upstream node by its name,
unqualified — the project schema is already the default. The engine is
DuckDB, so use DuckDB spellings like Monthly trend:Top products:Run each node (the run button, or
date_trunc.Revenue by region:Cmd+Enter). Each materialises its result and
reports a row count — the outputs your dashboard blocks will bind to.4
Create a dashboard view
Click New view in the project sidebar and choose Dashboard. A dashboard
is a grid-layout view over the same graph — distinct from a notebook, which is a
sequential document. Give it a name like Sales overview.
5
Add chart and table blocks
Add a block for each node you created and bind it to that node’s output:
- A chart block on revenue by region → bar, region on the category axis, revenue on the value axis.
- A chart block on monthly trend → line, month on the x-axis.
- A table block on top products.
6
Turn on cross-filtering
Cross-filtering is automatic in a dashboard: click a bar in the revenue-by-region
chart, and every other block re-filters to that region. No wiring — Panels
composes the filter into the downstream queries server-side and re-runs the
affected blocks. Click the selection again to clear it.For a persistent control rather than click-to-filter, add a selection bound
to
region (the same mechanism, surfaced as a dropdown). See
cross-filter selections
for how the wiring works underneath.7
Share it
Publish the dashboard and create a share link to give teammates or clients a
read-only, always-current view — no account required for viewers. The link
reflects live data every time it’s opened, not a static snapshot.
Next steps
Build a pipeline with the MCP
Author and run the same kind of graph programmatically from an AI client.
Visualization nodes
Chart types, tables, maps, and KPI metrics in depth.