---
title: "Channels & Encoding: how the inspector binds each chart family"
description: "Why the inspector's binding chips change when you switch chart kinds, what required, axis, bucket, aggregate, and top-N mean, and which families re-total your numbers."
section: "Dashboards"
canonical: "https://banksync.io/docs/dashboards/dashboards-channels"
---

A **channel** is one visual slot a chart fills with a field from your data: the bottom axis, the left axis, the slices of a pie, the source and target of a flow. The inspector's **Data** tab shows one **chip** per channel, and you tap a chip to pick its field and shape it.

The [Binding data](/docs/dashboards/binding-data) guide walks the everyday line-and-bar path (Group by, Value, Split into series). This page explains the part that surprises people: the set of chips is not fixed. It changes with the chart kind, because different chart families plot data in fundamentally different ways. A pie has slices, not axes. A flow chart has a source and a target. A gauge has a single number. So when you switch a widget from a bar to a pie to a sankey, the chips in the Data tab swap to match.

[![Binding dashboard widget data: selecting a chart, choosing a live bank source, widening the time window, setting Group by and Value channels, and watching the bound monthly-spending chart update.](https://cdn.banksync.io/videos/bind-widget-data.poster.3db2e380aaeb1b50.png)](https://cdn.banksync.io/videos/bind-widget-data.194d7d3a37e1a26c.mp4)

[Watch: Binding dashboard widget data: selecting a chart, choosing a live bank source, widening the time window, setting Group by and Value channels, and watching the bound monthly-spending chart update.](https://cdn.banksync.io/videos/bind-widget-data.194d7d3a37e1a26c.mp4)

## Why the chips change

Every chart kind belongs to a **family**, and the family decides which channels you see. The inspector reads the active kind, looks up its family, and renders exactly that family's channel chips. Nothing about your widget is broken when the chips look different from a neighbor's: the controls are simply describing what that kind needs.

Here is the same idea stated as the rule the app follows: pick a kind, get that kind's family, get that family's channels. Switch kinds and the channels re-derive. This is why a heatmap asks for an X, a Y, and a Value while a donut asks only for a Category and a Value.

## The families and their channels

The table below is the full map. The chip labels are the words you actually see in the Data tab.

| Family            | Example kinds                                          | Channels you bind                                           |
| ----------------- | ------------------------------------------------------ | ----------------------------------------------------------- |
| Cartesian         | line, area, bar, column, stacked bar, lollipop, stream | Group by (X), Value (Y), Split into series, Color           |
| Scatter           | scatter, bubble, hexbin, contour                       | X (a number), Y (a number), Size (optional), Color          |
| Distribution      | box plot, violin, ridgeline, beeswarm, strip           | Category (optional), Value, Split into series               |
| Histogram         | histogram, density                                     | Value (a single number to bin)                              |
| Part of a whole   | pie, donut, funnel, pyramid, waffle                    | Category, Value                                             |
| Flow / relational | sankey, chord, network, alluvial, arc                  | Source, Target, Value                                       |
| Matrix            | heatmap, heatmap matrix, punchcard                     | X, Y, Value                                                 |
| Calendar          | calendar heatmap                                       | Date, Value                                                 |
| Radar             | radar                                                  | Axis, Value, Split into series                              |
| Single value      | gauge, meter, progress                                 | Value                                                       |
| Financial         | candlestick, OHLC, volume profile                      | Date (Open/High/Low/Close come from the columns, see below) |
| Multi-dimension   | parallel coordinates, correlation matrix               | Group (the chart reads your numeric columns)                |
| Hierarchy         | treemap, sunburst                                      | Category, Value                                             |

A few of these read more than the chips show. The **financial** kinds (candlestick, OHLC) plot from columns literally named open, high, low, close, so the only thing you bind is the Date; you shape the four price columns in the [Shape data](/docs/dashboards/binding-data) step. The **multi-dimension** kinds read all of your numeric columns at once rather than asking you to bind each. The **hierarchy** kinds take a Category and a Value and build the nested shape for you.

![The Sankey inspector's Data section with Source, Target, and Value field chips (Source bound to Category, Target to Merchant, Value to Amount) instead of an X and a Y axis.](https://cdn.banksync.io/screenshots/dashboards/sankey-inspector.e31f288f3ff2ad6e.png "A flow family swaps the axis chips for Source, Target, and Value.")

## What the chip controls mean

Each chip can offer a small set of controls. Which ones appear depends on the channel and on the field you bind to it.

- **Required** — Some channels must be filled for the chart to draw. A pie needs both a Category and a Value; a
  flow needs a Source, a Target, and a Value. The chip for a required channel shows an outline
  prompt until you bind it.
- **Axis** — Channels that map to a real chart axis (the X and Y of a bar, for instance) carry axis-label and
  tick-format controls. A pie slice or a sankey link is not on an axis, so those chips skip the
  axis controls.
- **Bucket by** — Appears only on a Group-by channel that accepts dates AND when the field you bound is a date. It
  groups timestamps into Day, Week, Month, Quarter, Year, or a repeating cycle (day of week, month
  of year).
- **Aggregate** — Appears on a Value (measure) channel. It chooses how to combine rows that fall into the same
  group: Sum, Average, Count, and so on. See "Which families re-total" below for when it actually
  does work.
- **Keep top N** — Appears on a category channel (not on dates or values). It limits a high-cardinality field to
  its largest few groups and folds the rest into "Other", so a 387-slice pie becomes a clean top 8
  plus Other.
- **Allows one or many** — Most channels take one field. A few (like the Value of a multi-line cartesian chart) take a
  list, so the chip lets you add several fields and shows one picker per bound field.

The field picker inside each chip is filtered to the fields that make sense for that channel. A Value channel offers numbers, never an ID column or a foreign key. A Group-by channel offers categories and dates. This is why the same feed shows different field lists on different chips: the chip only proposes fields it can actually plot.

![A Value channel chip in the inspector summing the Amount field, with its plain-English summary reading sum and spending.](https://cdn.banksync.io/screenshots/dashboards/channel-measure.3101a680a16513f1.png "A Value chip carries the Aggregate control; its summary reads back what it will do.")

![A Group-by channel chip bound to a Date field bucketed by month, showing the summary group by Date by month.](https://cdn.banksync.io/screenshots/dashboards/channel-time.a4e14eddc913c603.png "The Bucket-by control appears because the channel takes dates and the bound field is a date.")

## Which families re-total your numbers

This is the most useful nuance on the page, because it explains a control that sometimes does nothing.

When a chart plots one mark per row, your raw feed rows usually need to be rolled up to be meaningful (all of January's transactions become one bar). For those families, the **Aggregate** control on the Value chip is what does the rolling up, and changing it from Sum to Average to Count changes the chart. These are the families that re-total at render time:

- Cartesian (line, bar, area, and friends)
- Part of a whole (pie, donut, funnel)
- Radar
- Matrix (heatmap, punchcard)
- Calendar (calendar heatmap)
- Flow (sankey, chord), which sums repeated source-to-target links into one

Other families do not re-total, because they handle the math themselves or plot raw points:

- Histogram and density bin the numbers and count them for you.
- Box plot, violin, and the other distribution kinds compute their own quartiles and shapes.
- Scatter and bubble plot one point per row, untouched.
- Single value (gauge, meter, progress) and financial kinds read the value as given.

> **Why does Sum do nothing on my histogram?:** 'If you set the Aggregate to Sum on a histogram, a box plot, or a scatter and the chart does not change, that is expected. Those kinds do their own counting or plot raw points, so there is nothing to re-total. The same Sum on a bar or a pie matters, because those families roll your rows up before drawing.'

> **Counting twice:** 'If you already totaled a field in the Shape data step (a query-level Summarize) and the chart then totals it again, you get a doubled number. The Value chip flags this with an amber warning that reads "Already aggregated in Shape data" and offers a one-tap Set to None to stop the second pass. Trust the warning.'

![A Value channel chip showing the amber Already aggregated in Shape data double-count warning, with a one-tap Set to None action.](https://cdn.banksync.io/screenshots/dashboards/channel-double-count.71adf98f21f41873.png "The double-count warning fires when both the query and the chart total the same field.")

## A worked example: the same data, three families

Say you have a Transactions feed and you want to understand category spend.

1. **As a bar (cartesian)** — Pick a Column chart. You get a Group by chip and a Value chip. Bind Group by to Category, bind
   Value to Amount, leave the Aggregate on Sum, and set Show amount as to Spending. The renderer
   totals each category into one bar.
2. **As a donut (part of a whole)** — Switch the kind to Donut. The chips become Category and Value (no axes, because slices are not
   on an axis). Your Category and Amount carry over into them, and the renderer still totals per
   category, now drawn as slices. Add Keep top 8 so a long category list stays readable.
3. **As a flow (relational)** — Switch to Sankey. Now the chips are Source, Target, and Value. A single category field cannot
   fill both a Source and a Target, so you bind, say, Account to Source and Category to Target and
   Amount to Value, and the chart shows money flowing from accounts into categories. Repeated
   account-to-category pairs are summed into one link.

The point: your underlying data never changed. Switching families only changed which channels the inspector asked you to fill, and how the renderer treated the numbers.

> **Switching kinds keeps what it can:** 'When you change a chart kind, BankSync re-binds your fields by role: dates head to the time or date channel, numbers head to the value channel, categories head to the category or split channel. Fields that the new family has no slot for are dropped. Moving from a multi-series line to a pie (which has only Category and Value) can leave a field behind, so glance at the chips after a switch and re-bind anything that came up empty.'

## Custom widgets bind the same way

A [custom widget](/docs/dashboards/templates) (code you or an agent author) is not a black box to the inspector. It ships its own list of channels, the same kind of description the built-in families use, so it gets the same chip-based Data tab: a field picker per channel, filtered to the right field types, with labels and formats. That means a custom chart re-enters the normal binding flow instead of forcing you to hand-edit a spec.

## Related guides

- [Binding data](/docs/dashboards/binding-data): the everyday Group by, Value, and Split into series controls in depth.
- [The chart kind catalog](/docs/dashboards/chart-kinds): pick the kind (and therefore the family) that fits your question.
- [KPI, table and gauge widgets](/docs/dashboards/kpi-table-gauge): binding for the single-value and column-based kinds.
- [Filters & cross-filtering](/docs/dashboards/filters-and-cross-filtering): let viewers narrow every widget at once.

[Browse the chart kinds](/docs/dashboards/chart-kinds)
