Grafana offers special entries in the data-source picker named -- Mixed --, -- Dashboard -- and -- Grafana --. Explain what each one does and what the limits are of combining several sources in a single panel.
answer
- Mixed = per-row data source, one request each, no server-side join
- join by field on time; align steps or get a sparse table
- Dashboard source = reuse another panel's result, no new query
- Grafana source = test data, static frames, dashboard annotations
- Grafana composes results, it does not federate queries
basics
~20 sMixed lets each query row choose its own data source; Grafana runs them separately and returns the frames side by side with no correlation. Dashboard reuses another panel's already-fetched result instead of querying. Grafana is the built-in source for test data and dashboard-scoped annotations.
solid answer
~60 s- **-- Mixed --**: each query row in the panel picks its own data source. Grafana issues one request per source and returns all the resulting frames to the panel. There is **no server-side correlation** — nothing joins them. To align them you add a *Join by field* transformation on time, and because each source resolves its own step, timestamps rarely match exactly, so a naive join yields a sparse table. Aligning intervals first is the fix. - **-- Dashboard --**: the panel consumes the result of another panel's query on the same dashboard rather than issuing its own. It is the way to show one query as a graph and a table, or to build several stat tiles from one result, without doubling backend load. - **-- Grafana --**: the built-in source — generated test data such as random walks, static frames, and dashboard-scoped annotations. Limits: mixed panels cost one request per source, some features assume a single source, and mixing incompatible result shapes (logs plus metrics) is legal but usually unrenderable in one panel.
code
text · 8 linessource A step 30s : 12:00:00, 12:00:30, 12:01:00 ...
source B step 60s : 12:00:07, 12:01:07, 12:02:07 ...
join by field(time) -> every row matches at most one side
=> a table of alternating nulls
fix: give both queries the same min interval / bucket boundary
before joining, or bucket explicitly in each querygo deeper
Know that Mixed allows a different data source per query row, that the Dashboard source reuses another panel's result, and that the Grafana source provides test data and annotations.
Explain the one-request-per-source execution, that correlation is a client-side transformation, and why joining on time needs aligned steps.
Weigh Mixed against consolidating the data or precomputing the join, and use the dashboard source deliberately as a load and consistency lever with its coupling cost.
State the architectural boundary — Grafana composes, it does not federate — and decide where cross-system correlation belongs in the data platform rather than in every dashboard load.
## Why special sources exist Most of the data-source picker lists configured connections. Three entries are not connections at all but behaviours built into Grafana, and interviewers ask about them because each one encodes a design decision. ## -- Mixed -- Selecting Mixed changes the panel's query editor: every query row gains its own data-source picker. When the panel runs, Grafana groups the rows by data source and issues **one request per source**, then hands the panel all the returned frames together, tagged by which query produced them. What Mixed does **not** do is combine anything. There is no cross-source query engine and no server-side join. The frames arrive side by side, and any correlation is your job, in the browser, via transformations: - *Join by field* on `time` is the usual move for putting two systems' metrics in one table or computing a ratio between them. - The catch is timestamp alignment. Each data source resolves its own step and its own bucket boundaries, so a join on time matches only exactly equal timestamps and otherwise produces a sparse grid of nulls. Give both sides the same step — a shared min interval, or explicit bucketing in each query — before joining. - Because the correlation happens after both responses have been fetched in full, Mixed is not a way to reduce data movement; it is a way to display things together. Good uses: overlaying an application metric with an infrastructure metric that lives in another system; putting a business number from a relational database next to a time-series metric; comparing the same metric from two regions with separate backends. Limits worth stating: request count multiplies with the number of distinct sources; panels that assume a single source or a single frame shape behave poorly; and features evaluated outside the dashboard have their own multi-query model rather than reusing the Mixed picker — so do not assume a mixed panel translates directly into anything evaluated server-side. ## -- Dashboard -- This one is a load-reduction and consistency feature. A panel set to the Dashboard source does not query anything; it selects another panel on the same dashboard and consumes **that panel's already-fetched result**, then applies its own transformations, field config and visualisation. Two real benefits: 1. **Cost.** A graph and a table of the same data become one query instead of two, and five stat tiles derived from one result become one query instead of five. On a dashboard with a wide time range this is a large saving, and it scales with viewers. 2. **Consistency.** The panels are guaranteed to show the same numbers, because they *are* the same numbers. Two independent queries against a live system can disagree simply because they ran a second apart. Constraints: the source panel must be on the same dashboard, the dependency is invisible unless you go looking (delete or heavily edit the source panel and the dependents break), and the dependent panel inherits whatever range and resolution the source panel used — it cannot ask for something different. ## -- Grafana -- The built-in source. Its practical uses are: - **Generated test data** — random walks and similar — for building or demonstrating a panel before the real data exists, and for reproducing a rendering bug without a backend. - **Static/inline frames**, useful for legends, reference lines or a small lookup table maintained in the dashboard itself. - **Dashboard annotations** — the built-in annotation store scoped to the dashboard, which is what the default "Annotations & Alerts" entry uses. It is also the fastest way to answer "is this Grafana or is this my backend?" during a diagnosis: if a panel renders correctly on generated data, the panel and the browser are fine. ## The judgement an interviewer is testing The underlying point is that Grafana composes results, it does not federate queries. If you find yourself joining large results from two systems in the browser on every dashboard load, the dashboard is doing an ETL job in the wrong place: the durable fixes are to get both datasets into one queryable system, or to precompute the joined result on the backend, and to use Mixed for genuinely occasional cross-system overlays.
- You use the Mixed data source and join two queries on time, but the table is mostly nulls. What is happening?Each data source resolved its own step and bucket offsets, so the two sets of timestamps do not coincide and the join matches almost nothing. Force the same resolution on both sides — a shared min interval, or explicit time bucketing in each query so both land on the same boundaries — and the join lines up. Joining on an approximate time is not available, so alignment must happen before the join.
- When is the dashboard data source the right choice, and what does it cost you?It is right when several panels should display exactly the same fetched result in different ways — a graph plus a table, or a row of stat tiles derived from one query — because it removes duplicate queries and guarantees the panels agree. The cost is a hidden coupling: the dependent panels break if the source panel is deleted or altered, and they cannot request a different time range or resolution than the source used.
saying these in an interview costs you the question
- Believing the Mixed source performs a server-side join across systems
- Expecting a time join across sources to work without aligning the step
- Thinking the dashboard data source issues its own query
- Using Mixed routinely for heavy cross-system joins instead of consolidating or precomputing the data
- Assuming a mixed-source panel can be reused unchanged anywhere a single-source query is expected