Skip to content

Commit 3b60dd5

Browse files
mngrclaude
andauthored
docs: document dimension links — modeling + dashboard cell menu (#11148)
* docs: add Links section to the dimensions guide (drill-in dashboards + external URLs) * docs: clarify dashboard-slug drill-in + cell menu for dimension links * docs: expand dimension links guide — parameter table, icons, slug setup, behavior * docs: clarify links icon name format in the reference * docs: make it clear a dimension can declare multiple links (url/dashboard is per-link) * docs: note links is a list (one or more) in the reference * docs(table): document the cell menu — data-model links, drill-in, copy, drill-down * docs(dimensions): cross-link the table cell menu from the links section * docs(dashboards): document the Slug field (options sidebar) + no-required-order note * docs(dimensions): cross-link dashboard slug + clarify there's no required order * docs(table): drop stale Display-as Link/Image/Bar section (not in the product); keep the cell menu * docs: note links require Cube v1.6.53; clarify dashboard param key resolution Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs: trim Cell menu section to the link-surfacing essentials (CUB-557) Per review: the exhaustive cell-menu / keyboard-gesture writeup was more than the table chart doc needs. Keep the one user-facing point — data-model links surface in the cell menu alongside Copy value / Drill down — and drop the gesture list and the redundant trailing paragraph. * docs: add "Linking between dashboards" section to dashboards overview (CUB-557) Per review: surface dashboard-to-dashboard linking on the dashboards exploration page (not only the data-modeling reference). Explains drill-in (`dashboard:`) and external (`url:`) cell links from an explorer's perspective, and points to the slug section + Dimensions → Links for authoring. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent ff3f5c9 commit 3b60dd5

4 files changed

Lines changed: 210 additions & 31 deletions

File tree

docs-mintlify/docs/data-modeling/dimensions.mdx

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,150 @@ See the following recipes:
379379

380380
</Note>
381381

382+
## Links
383+
384+
Dimensions can declare **links** — clickable navigation targets that supporting
385+
tools (such as [Cube Cloud Workbooks][ref-workbooks]) surface next to the
386+
dimension's values.
387+
388+
`links` is a **list**, so a single dimension can declare **any number of
389+
links** — they all appear together in the cell menu. Each link points either to
390+
an **external URL** (`url`) or to **another Cube Cloud dashboard** (`dashboard`,
391+
a drill-in), and its URL is built per row from the dimension's data. The example
392+
below declares two links on one dimension (an external search and a drill-in).
393+
394+
<Note>
395+
396+
Dimension `links` require Cube **v1.6.53** or newer.
397+
398+
</Note>
399+
400+
### Parameters
401+
402+
`links` is a list of link objects. Each link accepts:
403+
404+
| Parameter | Required? | Description |
405+
| --- | --- | --- |
406+
| `name` | **Required** | Identifier, unique within the dimension. Also used in the synthetic dimension name (see [Behavior](#behavior)). |
407+
| `label` | **Required** | The text shown for the link in the UI. |
408+
| `url` | **Either `url` or `dashboard`** | SQL expression that builds an **external** URL per row. May [reference][ref-references] columns and other dimensions. |
409+
| `dashboard` | **Either `url` or `dashboard`** | The target Cube Cloud dashboard's **slug** (a **drill-in**). Each link sets exactly one of `url` or `dashboard` — never both — but different links on the same dimension can mix the two. |
410+
| `icon` | Optional | A [Tabler icon][link-tabler] name (see [Icons](#icons)). Defaults to a generic link icon. |
411+
| `target` | Optional | Where to open the link: `blank` (default — new tab) or `self` (same tab). Applies to **external** links only — drill-ins always navigate in-app (see [Behavior](#behavior)). |
412+
| `params` | Optional | Extra per-row parameters. For `url:` they are appended as query parameters. For `dashboard:` they become **equality filters** on the target dashboard — each `key` is a member of the target dashboard's view (a cube path such as `orders.status` is auto-resolved to the matching view member), and `value` is the per-row value. |
413+
414+
### Example
415+
416+
<CodeGroup>
417+
418+
```yaml title="YAML"
419+
cubes:
420+
- name: orders
421+
sql_table: orders
422+
423+
dimensions:
424+
- name: status
425+
sql: status
426+
type: string
427+
links:
428+
# External link — opens a URL built from the row's value
429+
- name: search
430+
label: Search the web
431+
url: "CONCAT('https://www.google.com/search?q=order+', {CUBE}.status)"
432+
icon: brand-google
433+
target: blank
434+
435+
# Drill-in link — opens another Cube Cloud dashboard, filtered by the row
436+
- name: details
437+
label: Open order details
438+
dashboard: orders-detail # the target dashboard's slug
439+
params:
440+
- key: orders_view.status
441+
value: "{CUBE}.status"
442+
```
443+
444+
```javascript title="JavaScript"
445+
cube(`orders`, {
446+
sql_table: `orders`,
447+
448+
dimensions: {
449+
status: {
450+
sql: `status`,
451+
type: `string`,
452+
links: [
453+
{
454+
name: `search`,
455+
label: `Search the web`,
456+
url: `CONCAT('https://www.google.com/search?q=order+', ${CUBE}.status)`,
457+
icon: `brand-google`,
458+
target: `blank`
459+
},
460+
{
461+
name: `details`,
462+
label: `Open order details`,
463+
dashboard: `orders-detail`,
464+
params: [{ key: `orders_view.status`, value: `${CUBE}.status` }]
465+
}
466+
]
467+
}
468+
}
469+
})
470+
```
471+
472+
</CodeGroup>
473+
474+
### Icons
475+
476+
`icon` accepts any name from the [Tabler icon set][link-tabler] — the
477+
kebab-case name **without** any prefix, for example `brand-google`,
478+
`external-link`, `layout-dashboard`, or `send`. Browse and search the available
479+
names at [tabler.io/icons][link-tabler]. If `icon` is omitted, a default link
480+
icon is shown.
481+
482+
### Setting a dashboard slug
483+
484+
A `dashboard:` link targets another dashboard by its **slug** — a short, stable,
485+
human-readable identifier (e.g. `orders-detail`). The slug is **portable across
486+
environments**: it is resolved within the current deployment, so the same model
487+
works in development and production without hardcoding dashboard IDs.
488+
489+
To set a slug in Cube Cloud, open the target dashboard, open its **options
490+
sidebar**, and fill the **Slug** field (see
491+
[Dashboards → Dashboard slug](/docs/explore-analyze/dashboards#dashboard-slug)).
492+
Slugs are **unique per deployment**, and the `dashboard:` value in your link must
493+
match the slug exactly.
494+
495+
**There is no required order.** You can write the `dashboard:` slug in the model
496+
first (it won't break anything — a link whose slug doesn't yet resolve is simply
497+
skipped in the cell menu) and set the dashboard's slug later, or set the
498+
dashboard slug first and reference it from the model afterwards. The link starts
499+
working as soon as both sides use the same slug.
500+
501+
### Behavior
502+
503+
- **Per-row resolution** — each link's `url` (and its `params`) is evaluated for
504+
every row, so the destination reflects the clicked cell. Internally a link
505+
compiles to a hidden **synthetic dimension** named
506+
`<dimension>___link_<name>_url` holding the resolved URL; it is added to the
507+
query automatically and is never shown as a column.
508+
- **Null values** — if the source value (and thus the resolved URL) is null for
509+
a row, that link is omitted from the menu for that row.
510+
- **Where links appear** — in Cube Cloud, links surface in the table
511+
[**cell menu**](/docs/explore-analyze/charts/chart-types/table#cell-menu) on
512+
every results table (dashboard and workbook table charts, embedded dashboards,
513+
and Explore / SQL results). A left-click on a cell opens the menu listing the
514+
dimension's links, alongside **Copy value** and, on measures, **Drill down**.
515+
- **Drill-in vs external** — a `dashboard:` link navigates **in-app, in the same
516+
tab** (Cmd/Ctrl-click opens a new tab), ignoring `target`; a `url:` link opens
517+
per its `target` (`blank` by default).
518+
- **Filters** — for `dashboard:` links, each `params` entry becomes an
519+
**equality filter** on the target (the `key` is a view member, the `value` is
520+
the per-row value). An unknown or inaccessible target slug is skipped
521+
gracefully — the user is notified and no navigation happens.
522+
523+
See the [`links` reference][ref-dimensions-ref] for the canonical parameter
524+
list.
525+
382526
## Hierarchies
383527

384528
Dimensions can be organized into [hierarchies][ref-hierarchies] to define
@@ -418,6 +562,9 @@ cubes:
418562
and non-standard time periods
419563
420564
[ref-dimensions-ref]: /reference/data-modeling/dimensions
565+
[ref-workbooks]: /docs/explore-analyze/workbooks
566+
[ref-references]: /docs/data-modeling/syntax#references
567+
[link-tabler]: https://tabler.io/icons
421568
[ref-measures-page]: /docs/data-modeling/measures
422569
[ref-joins]: /docs/data-modeling/joins
423570
[ref-type]: /reference/data-modeling/dimensions#type

docs-mintlify/docs/explore-analyze/charts/chart-types/table.mdx

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
---
22
title: Table
3-
description: Display query results as a configurable table with pivots, conditional formatting, and inline visualizations.
3+
description: Display query results as a configurable table with pivots, conditional formatting, and custom styling.
44
---
55

6-
The table visualization presents query results in a structured grid. Unlike the raw results table in the query panel, the table visualization is designed for sharing — it supports pivots, column display overrides, conditional formatting, custom styling, and inline bar/link/image column rendering.
6+
The table visualization presents query results in a structured grid. Unlike the raw results table in the query panel, the table visualization is designed for sharing — it supports pivots, conditional formatting, custom styling, and a per-cell menu for links, copy, and drill-down.
77

88
{/* TODO screenshot: styled table with pivot and conditional formatting (hidden — replace this comment with <Frame><img src="..." /></Frame> when image is ready) */}
99

@@ -49,30 +49,7 @@ Click the dropdown arrow on any field in the **Fields** section to configure it:
4949
| **Word wrap** | Allow cell content to wrap to multiple lines |
5050
| **Hide** | Show or hide the column |
5151

52-
## Display tab — showing columns as links, images, or bars
53-
54-
By default, columns display their raw value. The **Display** tab for each field lets you change this:
55-
56-
### Links
57-
58-
Display a field's value as a clickable hyperlink. To create dynamic per-row links:
59-
60-
1. Add a [calculated field](/docs/explore-analyze/workbooks/calculated-fields) that produces a URL — for example:
61-
```
62-
CONCAT("https://example.com/orders/", order_items.order_id)
63-
```
64-
2. In the table visualization, hide the calculated field column.
65-
3. In the **Display** tab for the field you want to link, set **Display as** to **Link** and select the hidden URL field as the source.
66-
67-
{/* TODO screenshot: column display dropdown showing Link option selected (hidden — replace this comment with <Frame><img src="..." /></Frame> when image is ready) */}
68-
69-
### Images
70-
71-
Display a field as an image by setting **Display as** to **Image**. Configure height and width. To make the image a link, check **Link image** and set the **Link URL**.
72-
73-
The URL must be publicly accessible without authentication.
74-
75-
### Inline bars
52+
## Inline bars
7653

7754
Display a numeric column as a proportional in-cell bar. In the column's per-column section on the **Style** tab, use the **Display as** control to add a bar. Each bar's length reflects the value's magnitude within the column's range.
7855

@@ -88,6 +65,13 @@ When a column contains both positive and negative values, bars are drawn in both
8865

8966
{/* TODO screenshot: table with inline bar column (hidden — replace this comment with <Frame><img src="..." /></Frame> when image is ready) */}
9067

68+
## Cell menu
69+
70+
Left-clicking a table cell opens a context menu with any [`links` defined on the
71+
dimension](/docs/data-modeling/dimensions#links) — drill into another dashboard
72+
(`dashboard:`) or open an external URL (`url:`) — plus **Copy value** and, on
73+
measure cells that support it, **Drill down**.
74+
9175
## Style options
9276

9377
The **Style** tab controls the visual appearance of the table:

docs-mintlify/docs/explore-analyze/dashboards/index.mdx

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,46 @@ Dashboards enable you to:
1818

1919
In the dashboard builder inside your [workbook][ref-workbooks], select the reports you want to include and arrange them on the canvas alongside other [widgets][ref-widgets] to tell your data story, then publish the dashboard. This gives stakeholders direct access to the insights that matter most, without the complexity of the underlying analysis.
2020

21+
## Linking between dashboards
22+
23+
Dashboards can link to one another. When a table widget shows a dimension that
24+
has [links][ref-dimension-links] defined in the data model, left-clicking a cell
25+
opens a menu with those links: a **drill-in** link (`dashboard:`) navigates to
26+
another dashboard in the same deployment, filtered by the values in the clicked
27+
row, and an **external** link (`url:`) opens a URL. This is how you build
28+
overview → detail flows — click a row in a summary dashboard to jump straight to
29+
a focused dashboard scoped to that row.
30+
31+
Links are declared once on the dimension in the data model (not configured
32+
per-dashboard), so every table that shows that dimension — in dashboards,
33+
workbooks, embedded dashboards, and Explore — offers the same links. A drill-in
34+
link targets a dashboard by its [slug](#dashboard-slug); see [Dimensions →
35+
Links][ref-dimension-links] to define them.
36+
37+
## Dashboard slug
38+
39+
A dashboard can have a **slug** — a short, stable, human-readable identifier
40+
(e.g. `orders-detail`) used to link to it from the data model. Data-model
41+
[dimension links][ref-dimension-links] with a `dashboard:` value reference a
42+
dashboard by its slug to drill into it.
43+
44+
To set it, open the dashboard in the builder, open the **options sidebar**, and
45+
fill the **Slug** field. Slugs are **unique per deployment** and are resolved
46+
within the current deployment, so the same model works across environments. The
47+
dashboard's own URL is unaffected (it stays `publicId`-based).
48+
49+
<Note>
50+
51+
**There is no required order between the model and the dashboard.** You can
52+
reference a slug from a `dashboard:` link in the data model before any dashboard
53+
uses it, or set a dashboard's slug before any link references it — neither
54+
breaks. A link whose slug doesn't (yet) resolve is simply skipped in the cell
55+
menu, and starts working as soon as a dashboard in the deployment claims that
56+
slug. (If you later clear or change a slug that links still reference, the
57+
options sidebar warns you to update those links.)
58+
59+
</Note>
60+
2161
## Download as PNG or PDF
2262

2363
Open a published dashboard, click the **More actions** (``) button in the
@@ -37,5 +77,6 @@ refresh][ref-scheduled-refreshes].
3777

3878
[ref-workbooks]: /docs/explore-analyze/workbooks
3979
[ref-widgets]: /docs/explore-analyze/dashboards/widgets
80+
[ref-dimension-links]: /docs/data-modeling/dimensions#links
4081
[ref-notifications]: /docs/explore-analyze/notifications
4182
[ref-scheduled-refreshes]: /docs/explore-analyze/scheduled-refreshes

docs-mintlify/reference/data-modeling/dimensions.mdx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -428,8 +428,9 @@ Using it with other dimension types will result in a validation error.
428428

429429
### `links`
430430

431-
The `links` parameter allows you to define links associated with a dimension.
432-
They can be rendered as HTML links by supporting tools, e.g., [Workbooks][ref-workbooks].
431+
The `links` parameter allows you to define **one or more** links associated with a
432+
dimension (it is a list). They can be rendered as HTML links by supporting tools, e.g.,
433+
[Workbooks][ref-workbooks].
433434

434435
Links are useful to let users navigate to related external resources (e.g., Google
435436
search), internal tools (e.g., Salesforce), or other pages in a BI tool.
@@ -440,11 +441,17 @@ in the [synthetic dimension](#synthetic) name.
440441
A link must specify either a `url` or a `dashboard`:
441442
- `url` is a SQL expression that constructs the link URL. It can [reference][ref-references]
442443
column and dimension values, just like the [`sql` parameter](#sql) or [`mask` parameter](#mask).
443-
- `dashboard` is a dashboard identifier. When set, the link URL is generated as
444-
`/dashboard/<dashboard_id>`. The `params` object is still appended as a query string.
444+
- `dashboard` is a target dashboard reference. When set, the link URL is generated as
445+
`/dashboard/<dashboard>` and `params` are appended as a query string. In Cube Cloud
446+
this is the target dashboard's **slug** (set in the dashboard's options and resolved
447+
within the current deployment); choosing the link drills in-app to that dashboard with
448+
`params` applied as equality filters. Links surface in the table **cell context menu**.
445449

446450
Optionally, a link might use the `icon` parameter to reference an icon from a [supported
447-
icon set][link-tabler] to be displayed alongside the link label.
451+
icon set][link-tabler] to be displayed alongside the link label. Use the icon's kebab-case
452+
name without any prefix (e.g. `brand-google`, `external-link`, `layout-dashboard`, `send`);
453+
browse the available names at [tabler.io/icons][link-tabler]. When omitted, a default link
454+
icon is shown.
448455

449456
Optionally, a link might use the `target` parameter to specify [where to open it][link-target]:
450457
`blank` (default) to open in a new tab/window or `self` to open in the same tab/window.

0 commit comments

Comments
 (0)