DATTA BI — Cross-filter
Answering "what if I look only at this category?" used to require rebuilding the dashboard with another filter. With cross-filter, one click is enough: when you click a category in one visual, every other visual on the same dashboard filters instantly by that value — the whole analysis follows your focus, and a second click undoes it all.
How it works
- One click on an element of any chart (bar, line point, slice, table cell, map marker...) propagates the filter to the whole dashboard.
- Clicking again on the same element removes the filter — it is a toggle.
- On the clicked visual: the chosen element stays solid and the others fade.
- On the other visuals: they re-render already filtered by the clicked value, on top of the dashboard's saved filters — on every visual that has the clicked column. The clicked visual is not filtered: it only highlights the chosen element.
- Top bar: the Filtro: chip shows the applied column and value (for example
uf = SP), with ✕ to clear it — also on a dashboard opened view-only. - Visual with drill-down: on a visual that goes down on double click, the single click waits a quarter of a second before filtering, so it is not mistaken for the first click of a double click. On the others it filters right away.
- To clear everything at once: the Limpar filtro (clear filter) button in the dashboard's top bar.
Visuals that emit cross-filter
| Visual | The click filters by |
|---|---|
| Bars and columns (every variant, with or without legend) | the axis category |
| Line and area | the axis category: a click anywhere along the column counts, not only on the point (the area has no marker) |
| Pie, donut, treemap and funnel | the slice/block category |
| Scatter | the point's legend; without legend, the X-axis value |
| Heatmap | the cell's column (X axis) |
| Sankey | the clicked node (source or target); on a link, its source |
| Table | the clicked cell's column and value; if the column is an aggregated measure, the row's first category column |
| Map | the marker's label |
| Graph | the clicked node: on a Source/Target graph, the column it appears in; on a graph exported from the chat, the table column holding the node's name (without one, the click only opens the details). The click still opens the node details, waits a quarter of a second, and the double click keeps expanding the relationships, without filtering |
| Waterfall | the step's category |
| Radar | the polygon's category (the row it draws) |
| Box plot | the box's category |
| Candlestick | the candle's date |
| Calendar | the day, as the visual's row brings it |
They do not emit the click: KPI, card and gauge (they have no category) and histogram (each bar is a range of values, and the cross-filter is an equality). They receive the filter normally; to filter by a dimension that only appears in them, use a slicer or the Filtros (filters) pane.
Tooltip
The Tooltip well (bars, line, area, pie, donut, treemap, funnel, scatter, heatmap, sankey and map) adds columns to what shows on hover. When the visual aggregates its values, each field uses the aggregation chosen in the chip's gear — by default, the same as the values; text, date and boolean fields start with Contagem distinta (distinct count). When the visual does not aggregate (scatter, for example), the field shows the row's own value. At most 10 fields per visual.
Cross-filter × drill-down
| Aspect | Cross-filter | Drill-down |
|---|---|---|
| Trigger | Single click | Double click |
| Scope | Every visual on the dashboard | Only the clicked visual |
| Changes granularity | No | Yes — it goes down the axis hierarchy |
| What is re-rendered | The whole dashboard | Only the clicked visual |
| State kept | One global dashboard filter (field + value, or none) | One detail level per visual |
The two are independent: you can keep a cross-filter active and, at the same time, deep-dive a specific visual with drill-down.
Hands-on example — investigating a spike in cases
- On a dashboard with "Casos por UF" (bars), "Evolução mensal" (line) and "Casos por classe" (horizontal bars), click the SP bar.
- The line and the per-class bars re-render showing only São Paulo — the March spike stands out on the line.
- Click the bar of the class with the most cases: the filter becomes that class (cross-filter keeps one value at a time) and the dashboard shows its cases in every UF.
- Click the same bar again to undo the filter, or use Limpar filtro to return to the overall view in one go.
Interactions between visuals
In edit mode, Editar interações (edit interactions) sets, for each pair of visuals, what a click on the source visual does to the target visual:
| Interaction | What happens on the target visual |
|---|---|
| Filter (default) | Re-renders with only the rows of the clicked value. |
| Highlight | Does not filter: shows every row, highlights the ones with the clicked value and fades the others — when the target visual shows the same column. |
| None | Ignores the click. |
Slicers (search, list and date) have no source visual: their value filters every visual that has the column.
Cross-filter and saved filters
The click adds to the filters saved in the Filtros (filters) pane:
- Filters on all pages apply to the whole dashboard.
- Filters on this page apply to the open page. On a dashboard with pages, each page keeps its own; without pages, the canvas is the page.
- Filters on this visual apply only to the selected visual.
Saving a filter in the pane, or changing the value of a top-bar filter, re-renders the dashboard right away. A newly added row, still without a column or a value, filters nothing.
The top-bar filters (dashboard variables) filter too: on a visual built from fields, the filter whose name is a column of the dataset enters the query like the pane filters (the uf filter filters the uf column; a list becomes "is in"). A filter whose name is not a column of the dataset does not change that visual, with no notice — it exists for another visual. On visuals with their own query, the filter arrives as the @name variable, and applies where the query reads it.
How the filter is applied under the hood
- The cross-filter state is unique per dashboard: the clicked visual, the column and the value — or no active filter.
- The filter becomes a condition in each visual's query, not a display tweak: the total, the bars and the table arrive already computed with only the value's rows. On visuals built through channels (dataset + columns on the axes), the condition goes before the grouping — sums and counts reflect the filter. On visuals with their own query (handwritten DATTA Query, a dashboard exported from the chat), it applies to the rows the query returns.
- The filter only applies where the column exists. A visual without the clicked column keeps showing its data and displays the notice "O filtro … não se aplica a este visual: ele não tem a coluna …" (the filter does not apply to this visual: it lacks the column) — it never goes empty because of the filter.
- The clicked visual gets the element highlight back; the others only highlight a value when the interaction is Highlight. The highlight is drawn on every visual that emits the click (table and map included).
- The platform exposes endpoints to re-render the dashboard (cross-filter) and to render a single visual with drill — see the API reference.
Limitations
- Total computed inside the query itself: a visual whose query already returns only the aggregate (for example the Total de registros card of a dashboard exported from the chat, which counts inside the query) does not have the clicked column and is not filtered — it shows the notice.
- Visual with its own query and a row limit: the condition applies to the rows the query returned; if the query cuts at N rows, the filter picks among those N.
- Visual without the column: the filter arrives through the Model relationship when there is an active one to a dataset that has the column (above 1,000 keys, or with two possible paths, it is not applied and the visual warns). Without a relationship, the visual shows the missing-column warning. See Relationships.
- Highlight marks the value, but does not draw the "part of the whole" (the filtered share over the total).
- One value at a time: the click keeps one column and one value; on a chart with a legend, the click filters by the axis category, not by the category + series pair.
- Each cross-filter re-renders the whole dashboard. The platform cache amortizes repeats of the same filter.