New: AI & text-to-SQL on your own SupersetBook a demo
Docs
Concepts

Concepts

Datasets, charts, dashboards, the semantic layer, and row-level security.

D23 runs Apache Superset as a managed service. A few core ideas make it work.

Datasets

A dataset is the foundation of every chart. It can be a physical table or view in your database, or a virtual dataset — a SQL query you write once and reuse across many charts. Datasets define:

  • which columns are available,
  • which columns are time dimensions (used for time-range filters),
  • calculated columns (expressions computed at query time),
  • metrics (aggregations like SUM(revenue) or COUNT(DISTINCT user_id)).

Charts

A chart is a visualization built on a dataset. Superset ships 40+ chart types: bar, line, area, pie, scatter, big number, table, pivot, heatmap, geo map, and more. The drag-and-drop query builder lets anyone build a chart without writing SQL. Power users can drop into SQL mode for full control.

Dashboards

A dashboard is a collection of charts arranged on a canvas. Dashboards support:

  • Native filters — dropdown, date range, and search filters that cross-filter all charts on the page.
  • Drill-down — click a bar to filter the whole dashboard by that value.
  • Sharing — public or authenticated links, plus iframe embed for your product.

Semantic layer

A semantic layer defines business metrics once and makes them available to every chart, so "revenue" always means the same thing whether someone builds in the query builder or asks AI.

D23 supports two approaches:

  • Virtual datasets — write the logic in SQL once, expose it as a dataset.
  • dbt metrics — import your dbt semantic layer so Superset charts use your centrally defined metrics.

Row-level security (RLS)

RLS filters data automatically based on who is logged in. A single dashboard can serve every customer, region, or team — each user only sees their rows.

RLS rules are:

  • Role-based — applied to a Superset role (e.g., "Region: EMEA").
  • Column-based — filter on any column in the dataset (e.g., region = '{{ current_user_role }}').

Next: Integrations.