Drill-Down Boards¶
Drill down is the BI pattern of clicking a summary element — a bar, a table
cell, a KPI — to navigate to a detail board with context pre-filled. Dataface
supports drill-down with the link: field on charts and tables.
Bar chart drill-down¶
Set link: on a chart to make every data element clickable. Channel
placeholders ({{ x }}, {{ y }}, {{ color }}, {{ theta }}) expand to
the clicked row's value for that channel.
queries: tickets_by_status: sql: | select status, count(*) as tickets from tickets group by status charts: by_status: type: bar query: tickets_by_status x: status y: tickets title: Tickets by Status — click to drill link: "/zendesk/tickets/list?status={{ x }}" rows: - by_status
Clicking the Open bar navigates to /zendesk/tickets/list?status=Open.
Board-root paths resolve automatically in dft serve and Cloud.
In-page variable update¶
A link: starting with ? updates a dashboard variable without leaving the
board. This is how cross-chart filtering works inside a single board:
variables: selected_category: label: Category default: "" charts: by_category: type: bar query: revenue_by_category x: category y: revenue link: "?selected_category={{ x }}" # updates variable, no navigation by_product: type: bar query: revenue_by_product # queries filtered by selected_category x: product y: revenue title: Products (filtered by category above)
Table drill-down¶
Tables support link: at the chart root as a default for all cells, with
optional per-column overrides:
charts: tickets_table: type: table query: open_tickets link: "/zendesk/tickets/detail?id={{ ticket_id }}" # default: all cells style: columns: ticket_id: label: Ticket # inherits chart-root link → clicks navigate to detail subject: label: Subject # inherits chart-root link status: label: Status link: "/zendesk/backlog/?status={{ status }}" # overrides root link
Column link wins when set; chart-root link applies to columns without one.
Target board¶
The detail board receives the clicked value as a URL query parameter. Use a
variables: entry with input: text to read it:
# faces/zendesk/tickets/list.yml variables: status: input: text # populated from ?status= query param default: "Open" # shown when opened without a parameter queries: filtered_tickets: sql: SELECT * FROM tickets WHERE {{ filter('status', status) }}
Related¶
- Chart Interactions —
link:field reference and full template syntax - Linking Between Boards — board path resolution rules
- Variables — reading URL parameters with
input: text