On this page
Key takeaways
- A question becomes a chart in five steps: intent, mapping, query, chart choice and explanation.
- The AI does not draw the chart from imagination. It runs a real query and charts the result.
- Chart type follows the shape of the result: a trend becomes a line, a ranking becomes bars.
- You can steer every step by naming the metric, the breakdown, the window or the chart you want.
From question to chart in five steps
Type "Monthly revenue by region for the last 6 months" and a chart appears a few seconds later. Behind it, five things happen in order.
Step 1: Understand the intent
The question is broken into parts:
| Part | In this question |
|---|---|
| Metric | revenue |
| Aggregation | sum |
| Breakdown | region |
| Time grain | month |
| Window | last 6 months |
| Filters | none |
Most business questions fit this shape. When a part is missing, the tool fills it with a sensible default (for example, "all time" or the most recent complete period) or asks you. When a part is ambiguous, such as "revenue" when there are gross and net columns, a good tool asks rather than guesses.
Step 2: Map words to columns
Next, each part is matched to real columns. "Revenue" maps to order_value_usd, "region" to region, and "month" to the primary date column, order_date.
This step depends on the column profile created when the data was loaded. The profile records each column's type and role, so the AI knows that order_date is a date, order_value_usd is money to be summed and order_id is an identifier to be counted, never summed.
Poor column names are the most common reason this step goes wrong. val1 and dt2 give the AI nothing to work with, which is why clear names make such a difference.
Step 3: Write and run the query
With the parts mapped, the AI writes a query. For this question it is roughly:
SELECT date_trunc('month', order_date) AS month,
region,
SUM(order_value_usd) AS revenue
FROM orders
WHERE order_date >= date_trunc('month', current_date) - interval '6 months'
GROUP BY 1, 2
ORDER BY 1, 2;The query runs against your data. In DashboardGPT, query execution is built on Apache Superset. This is the step that makes the numbers trustworthy: they are computed, not predicted by a language model.
Step 4: Choose the chart
The result has a time column, a category column and a measure. That shape calls for a line per region, or grouped bars if there are only a few months.
The general rules:
| Result shape | Chart |
|---|---|
| One number | Metric card |
| Measure over time | Line chart |
| Measure over time, split by a category | Multiple lines, or stacked bars for parts of a total |
| Measure by category | Bar chart, sorted largest first |
| Parts of one whole, few categories | Share chart |
| Two measures per item | Scatter plot |
| Many columns | Table |
The chart is chosen from the result, not from keywords in the question. Asking for "a trend" does not force a line if the result has no time column.
Step 5: Explain what it shows
Finally, a short written insight is generated from the result: which region is largest, which grew fastest, where the biggest change was. It cites the figures, so you can check them against the chart.
On the DashboardGPT canvas, the chart and its insight land together as one object. You can move it, group it with related answers or ask a follow-up about it.
How to steer each step
You control the result by what you put in the question:
- Name the metric precisely: "net revenue after discounts" rather than "sales".
- Name the breakdown: "by plan", "by channel", "by sales rep".
- Name the window: "last 90 days", "Q3 2026", "since January".
- Name the chart if you care: "as a bar chart, largest first".
- Add filters in words: "only delivered orders", "excluding internal accounts".
And after the chart appears, you can adjust it with a follow-up: "Show this as a percentage of the total" or "Switch to weekly".
When the chart looks wrong
If a chart surprises you, check which step went wrong:
| Symptom | Likely step | What to do |
|---|---|---|
| Numbers far too big | Mapping: an ID was summed, or a join doubled rows | Ask how it was calculated; name the right column |
| Wrong time range | Intent: default window used | Add the window to the question |
| Odd chart type | Chart choice: result shape was unexpected | Ask for the chart type you want |
| Insight contradicts the chart | Explanation | Trust the chart's figures and report the mismatch |