Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,20 @@ It is a setting on an existing chart, not a chart type of its own: a bar, line,

The **Small multiples** section appears in the Fields tab for bar, line, area, and scatter charts.

Pick a dimension in **Split by** and the chart is replaced by one panel per value of that dimension. Clearing the picker returns the chart to a single plot.
Pick a dimension in **First dimension** and the chart is replaced by one panel per value of that dimension. Clearing the picker returns the chart to a single plot.

Only dimensions are offered. Splitting by a measure is not supported — a measure has no discrete values to make panels from.
Optionally pick a second dimension in **Second dimension** to lay panels out in a grid with the first dimension across columns and the second down rows, instead of a single wrapped sequence of panels. Clearing the second picker collapses the grid back to the one-dimensional layout.

Only dimensions are offered in either picker. Splitting by a measure is not supported — a measure has no discrete values to make panels from.

## Options

These options appear once a **Split by** dimension is chosen.
These options appear once a **First dimension** is chosen.

| Option | What it does |
|---|---|
| **Grid** | Columns × rows, up to 5 × 5. Both are preselected from the number of distinct values in the split dimension, so a four-value dimension opens as a 2 × 2 grid. |
| **Columns** | Caps the number of panels drawn across the first dimension's values, up to 5. Preselected from the number of distinct values, so a four-value dimension opens at 4 columns. When a second dimension is set, this caps the column axis independently of the row axis. |
| **Rows** | Only shown once a **Second dimension** is chosen. Caps the number of panels drawn across the second dimension's values, up to 5, independently of **Columns**. |
| **Axis scales** | Whether every panel is drawn against the same scale (**Shared**) or each scales to its own data (**Independent**). |
| **Sort panels by** | Orders the panels by the dimension's own values (**Value**) or by a measure (**Measure**). |
| **Sort order** | **Ascending** or **Descending**. |
Expand All @@ -38,9 +41,9 @@ Switch to **Independent** when the question is about the *shape* of each series

### How many panels are drawn

The grid bounds the render: a chart split into 3 × 2 draws at most six panels, so a high-cardinality dimension can never produce hundreds of unreadable ones. The largest grid is 5 × 5, or twenty-five panels.
Each axis is capped independently: **Columns** bounds the first dimension's values and, when a second dimension is set, **Rows** separately bounds the second dimension's values — so a 3-column × 2-row grid draws at most six panels. Since each axis clamps on its own, the largest grid is 5 × 5, or twenty-five panels, regardless of how many distinct values either dimension has.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"the largest grid is 5 × 5, or twenty-five panels" is stated unconditionally, but per the Options table Rows is only shown once a Second dimension is chosen. So with a single split dimension the ceiling is 5 panels (Columns alone), not 25 — the 25-panel maximum is reachable only in the two-dimension case. Worth qualifying so a reader with one dimension doesn't expect to be able to draw 25 panels.


When a dimension has more values than the grid has tiles, the chart draws the first ones in the current sort order. The underlying query is unaffected, so no data is lost — a bigger grid simply shows more of it.
When a dimension has more values than its axis has room for, the chart draws the first ones in the current sort order on that axis. The underlying query is unaffected, so no data is lost — a bigger grid simply shows more of it. A combination of the two dimensions' values that has no matching data renders as an empty panel labeled **No data**.

Sorting interacts with this: with **Sort panels by** set to a measure and a descending order, the grid keeps the top panels by that measure, which is usually more useful than the first ones alphabetically.

Expand All @@ -54,7 +57,7 @@ A legend is shared across the grid rather than repeated per panel. Clicking a le

## Limitations

- **One split dimension.** One dimension fills the grid, panel by panel. Splitting by two dimensions at once — one down the rows and another across the columns — is not supported.
- **Up to two split dimensions.** A grid can facet by a first dimension (columns) and, optionally, a second (rows) — not more.
- **Cartesian charts only.** Bar, line, area, and scatter. Pie, table, KPI, heatmap, boxplot, map, and HTML charts cannot be split.
- **Panel labels are not configurable.** Each panel is labeled with its dimension value; the font, size, and color are fixed.
- **The split is enabled on a single-view chart.** A chart that already carries data labels, a reference line, or a second Y axis series cannot be split — turn the split on first. The order is the only constraint: once a chart is split, data labels and reference lines can be added freely and are drawn in every panel.
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
title: AI summary
title: Analysis
description: Generate natural-language summaries of dashboard data on demand using an AI agent.
---

AI summary widgets generate a natural-language summary of the data shown on the dashboard. Write a prompt — for example, _"Summarize the key trends and call out anything unusual"_ — and the configured [AI agent][ref-agents] produces a Markdown narrative based on the current dashboard state, including the data behind every chart and the values of any active [controls][ref-controls].
Analysis widgets generate a natural-language summary of the data shown on the dashboard. Write a prompt — for example, _"Summarize the key trends and call out anything unusual"_ — and the configured [AI agent][ref-agents] produces a Markdown narrative based on the current dashboard state, including the data behind every chart and the values of any active [controls][ref-controls].

## Adding an AI summary
## Adding an Analysis widget

In the [dashboard builder][ref-workbooks], add an AI summary from the **Add Widgets** menu in the toolbar. The widget opens with a prompt editor — write your prompt and click **Generate Summary** to produce the first response.
In the [dashboard builder][ref-workbooks], add an Analysis widget from the **Add Widgets** menu in the toolbar. The widget opens with a prompt editor — write your prompt and click **Run** to produce the first response. A widget that hasn't been run yet shows "Analysis is not run yet" with a **Run** button.

## Use cases

Expand All @@ -28,11 +28,11 @@ Once generated, the summary is **cached** with the widget. Viewers loading the d

The widget keeps a checksum of the dashboard state at the time of generation: the queries behind each chart, the active control values, and the chart configuration. When any of those change, the widget marks the cached summary as **stale** and shows a refresh prompt so viewers know the narrative may no longer match the data.

Click the refresh icon (or open the widget menu and choose **Refresh**) to regenerate using the saved prompt against the latest state.
On a published dashboard, a widget that has run shows a freshness indicator instead of a menu — colored by how old the data is, with a tooltip reading "Refreshed *N* ago". Open it and choose **Refresh** to regenerate using the saved prompt against the latest state. The dashboard's **Refresh all charts** control also refreshes any Analysis widget that has already run at least once.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small issues with this replacement:

  1. "shows a freshness indicator instead of a menu" reads as a contradiction with the very next sentence — "Open it and choose Refresh" describes opening a menu. Probably meant "instead of the gear menu" / "in place of the widget menu".
  2. The removed sentence was the only place describing how to refresh at all; this one scopes itself to "On a published dashboard". Refreshing from the dashboard builder (where the prompt editor lives, and where you'd most often iterate) is now undocumented.


## Choosing the agent

By default, AI summaries use the agent configured at the dashboard level. You can override the agent per widget when you need a particular [agent's][ref-agents] tooling, model, or guardrails for a specific summary.
By default, Analysis widgets use the agent configured at the dashboard level. You can override the agent per widget when you need a particular [agent's][ref-agents] tooling, model, or guardrails for a specific summary.

[ref-workbooks]: /docs/explore-analyze/workbooks
[ref-agents]: /admin/ai
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ The dashboard builder supports the following widget types:
- [Charts](/docs/explore-analyze/dashboards/widgets/charts) — Visualize reports from your workbook
- [Text](/docs/explore-analyze/dashboards/widgets/text) — Add titles, descriptions, and rich formatting in Markdown
- [Controls](/docs/explore-analyze/dashboards/widgets/controls) — Let viewers filter the data or switch the time granularity
- [AI summary](/docs/explore-analyze/dashboards/widgets/ai-summary) — Generate narrative summaries of dashboard data on demand
- [Analysis](/docs/explore-analyze/dashboards/widgets/ai-summary) — Generate narrative summaries of dashboard data on demand
- [Spacer & Divider](/docs/explore-analyze/dashboards/widgets/layout) — Non-data layout elements for whitespace and section breaks (in preview)

## Adding widgets
Expand Down
22 changes: 14 additions & 8 deletions docs-mintlify/docs/integrations/mcp-server.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -187,23 +187,29 @@ For any MCP-compatible client:

An MCP client is not locked to a single deployment for the whole session. After
connecting, it can discover the deployments and agents you can access and target a
specific one on each request.

Three tools work together:
specific one on each request — every tool except `listDeployments` accepts an optional
**`deploymentId`**, and falls back to the deployment resolved at connect time when it's
omitted.
Comment on lines +190 to +192

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The blanket rule here is contradicted by the "Resuming a conversation" paragraph 20 lines down. This says every tool except listDeployments "falls back to the deployment resolved at connect time when it's omitted" — but for loadQueryResults, visualize, and chat with a chatId, an omitted deploymentId resolves from the thread, not from the connect-time default, and a supplied one can be rejected. A reader who stops at this paragraph will get the wrong model for exactly the tools most likely to surprise them.

Suggest forward-referencing the exception here:

Suggested change
specific one on each request — every tool except `listDeployments` accepts an optional
**`deploymentId`**, and falls back to the deployment resolved at connect time when it's
omitted.
specific one on each request — every tool except `listDeployments` accepts an optional
**`deploymentId`**, and falls back to the deployment resolved at connect time when it's
omitted (except when resuming an existing thread — see below).


- **`listDeployments`** — discovery. Returns every deployment you can access via MCP
(already filtered by the admin's deployment-access settings and your permissions) and
each deployment's agents. Use it to find valid `deploymentId` and `agentId` values
before calling `chat`. Every deployment offers an **Auto** agent (`agentId: null`) in
addition to any configured agents.
each deployment's agents. Use it to find valid `deploymentId` and `agentId` values.
Every deployment offers an **Auto** agent (`agentId: null`) in addition to any
configured agents.
- **`chat`** — accepts two optional selection parameters:
- **`deploymentId`** — the deployment to use for this request. When omitted, the chat
uses the deployment from the current session (the default resolved at connect time).
- **`agentId`** — the agent to use for this request. When omitted or `null`, the
deployment's **Auto** agent is used. Pass a specific `agentId` to route to a
configured agent.
- **`loadQueryResults`** — paginates through the results of a previous query on the same
deployment context.
- **Every other tool** — dashboard authoring, data model editing, query and discovery,
and pre-aggregation tools all accept the same optional `deploymentId`, resolved and
permission-checked the same way as for `chat`.

**Resuming a conversation.** `loadQueryResults` and `visualize`, and `chat` when it's
passed an existing `chatId`, act on a thread that already belongs to one deployment —
they derive `deploymentId` from that thread instead of accepting an arbitrary one, and
reject a `deploymentId` that conflicts with it.

A typical client workflow:

Expand Down
6 changes: 6 additions & 0 deletions docs-mintlify/docs/organize-content/sharing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ Sharing permissions are organized into three levels:

The creator of a piece of content automatically receives **Full access**.

For an exploration, **Can view** opens it in a read-only view: charts and data are
visible, but saving, converting to a workbook, running Python, and the security
context control are hidden, and any SQL is read-only. The time zone control stays
visible so viewers can see how data is bucketed, but it can't be changed without
**Can edit** or higher.

<Info>

When sharing is set at the [folder level][ref-folders], content inside
Expand Down
11 changes: 11 additions & 0 deletions docs-mintlify/reference/core-data-apis/sql-api/reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,17 @@ of the PostgreSQL documentation.
| --- | --- | --- | --- |
| `TO_CHAR` | Converts a timestamp to string according to the given format | ✅ Yes | <nobr>✅ Outer</nobr><br/><nobr>❌ Inner (selections)</nobr><br/><nobr>✅ Inner (projections)</nobr> |

### Type casts

The SQL API supports casting to `regtype` and `regtype[]`, e.g., `atttypid::regtype`
or `'{int8,numeric,bool}'::regtype[]`. This is primarily useful for BI tools that
introspect table columns via `pg_catalog.pg_attribute`/`pg_type` queries, comparing
`atttypid` against a `regtype[]` literal.

Accepted spellings include the internal type name (`int4`), the canonical `regtype`
name (`integer`), and common SQL aliases (`int`, `decimal`, `char`, `float`), with or
without an explicit `pg_catalog.` qualifier.

### Date/time functions

<Info>
Expand Down
Loading