Composable Data Panels
A dashboard typically shows multiple representations of data: a table for detail, a chart for trends, a metric card for the headline number. In most tools, each panel has its own query, its own data fetching, its own configuration. When the underlying question is the same — "what are my sales this month?" — that duplication creates maintenance overhead and can introduce inconsistency when configurations drift.
Composable data panels connect multiple visualizations to a single data source.
One Source, Many Views
Define a data source once — what object it queries, what filters to apply, what time range to use. Then connect multiple components to that source: a table showing the raw records, a bar chart showing counts by category, a metric card showing the total.
All three components show the same data. When the data updates, all three update together. When you change a filter on the panel, all three reflect the change simultaneously.
Why This Matters
The consistency benefit is significant. When each visualization has its own separate query, small differences in filter logic, date rounding, or field selection can cause numbers to disagree slightly between the table and the chart. Users notice these discrepancies and rightfully wonder which number to trust.
When components share a single data source, there's no possibility of inconsistency. The table and the chart draw from the same result set. The metric card's total is the count of exactly the records shown in the table.
Flexible Composition
Each component connected to a shared data source can still apply its own presentation logic. A chart chooses its own grouping dimension. A metric card applies its own aggregation function. A table shows its own column selection. The shared data source provides the pool of records; each component decides how to render its view into that pool.
This keeps visualizations independent enough to be useful while keeping the underlying data coherent.
Interactive Connections
Components connected to the same data source can also interact. Clicking a bar in a chart filters the table to show only the records in that category. Selecting a date range in a timeline updates both the chart and the metric below it. These interactions are configured in the builder — connect the click event of one component to the filter state of another.
The result is a dashboard where components talk to each other, not a collection of independent panels that happen to be placed near each other.