Skip to content

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) }}