const embed = new LiveboardEmbed('#embed-container', {
frameParams: { width: '100%', height: '100%' },
liveboardId: '<liveboard-id>',
liveboardOverride: {
dataSourceOverride: [
{
filterQuery: [
{ filterQueryToken: 'Order Date=last 30 days' }, // Chip 3
],
},
],
},
});
embed.render();
Liveboard filter and parameter overrides
- Overview
- How overrides differ from runtime filters and runtime parameters
- Before you begin
- Example Liveboard
- Apply overrides in an embedded Liveboard
- Apply overrides in a Liveboard URL
- Filter syntax
- Parameter syntax
- Special characters in values
- Target a model, tab, or group
- How overrides behave
- Limitations
- Troubleshooting
- Related information
Early Access
Liveboard filter and parameter overrides set the values of a Liveboard’s existing filter and parameter chips at load time.
Overview🔗
You can supply overrides in two ways:
-
In the Liveboard URL, through the
filterandparameterquery parameters. -
In an embedded Liveboard, through the
liveboardOverrideproperty of the Visual Embed SDK.
Use overrides for these tasks:
-
Open an embedded Liveboard with filters and parameters that match your application’s context, such as the signed-in customer’s region or the period selected in your app.
-
Build links that open a Liveboard in a specific filtered state, for example, a link from a row in one Liveboard to a detail Liveboard filtered to that row’s values.
-
Share a filtered state of a Liveboard without saving a personalized view for every combination of values.
How overrides differ from runtime filters and runtime parameters🔗
Runtime filters work on model columns. They add a filter condition behind the scenes and combine with the Liveboard’s existing filters using an AND condition. They do not appear in the filter chips.
Overrides work on the Liveboard’s filter and parameter chips instead. They replace the values selected in a chip, and the chip shows the new values.
| Liveboard overrides | Runtime filters | Runtime parameter overrides | Personalized views | |
|---|---|---|---|---|
What it sets | Values in existing filter and parameter chips | A filter condition on a model column | A parameter’s value | A saved set of chip values |
Shown in the chips | Yes | No | No (chip is hidden) | Yes |
Needs a chip | Yes | No | No | Yes |
Effect on existing values | Replaces the selection | Adds an AND condition | Replaces the value | Replaces the selection |
Rolling dates | Yes | No | Not applicable | Yes |
Targets a model, tab, or group | Yes | No | No | Not applicable |
Works on | Liveboards | Liveboards, Answers, visualizations, REST APIs | Liveboards, Answers, REST APIs | Liveboards |
Saved | No | No | No | Yes |
To change values after the Liveboard loads, use host events. UpdateFilters and UpdateParameters update the chips and fetch data again. UpdateRuntimeFilters replaces the runtime filter for any column you specify with the new value. Filters on columns you don’t specify are preserved.
Use overrides when users should see and adjust the values in the Liveboard’s own chips.
Before you begin🔗
-
Your administrator must turn on Filtered Liveboard URLs on the Early Access page of the Admin portal. The setting is Org-aware. When it is off, overrides are ignored without an error.
-
To use
liveboardOverride, use Visual Embed SDK 1.54.0 or later. -
Every filter or parameter you want to set must already exist as a chip on the Liveboard. Overrides never add a chip.
-
To target a tab or group, contextual filtering (tab-level and group-level filters) must be turned on. When it is off, any override that names a tab or group is ignored.
Example Liveboard🔗
Every example on this page uses a Liveboard named Retail Sales Overview, set up as follows:
-
Two models: Retail Sales and Returns. Both have Region and Store Name columns.
-
Two tabs: Summary and Regional Detail. Each tab has a group named Top Stores.
-
The Top Stores group on the Regional Detail tab has visualizations from both models.
The Liveboard has the following filter chips. The examples on this page refer to each chip by its number.
| # | Chip | Type | Model | Where it is |
|---|---|---|---|---|
1 | Region | Attribute | Retail Sales | Liveboard |
2 | Region | Attribute | Returns | Liveboard |
3 | Order Date | Date | Retail Sales | Liveboard |
4 | Sales | Measure | Retail Sales | Liveboard |
5 | Product Type | Attribute | Retail Sales | Summary tab |
6 | Product Type | Attribute | Retail Sales | Regional Detail tab |
7 | Store Name | Attribute | Retail Sales | Top Stores group on the Summary tab |
8 | Store Name | Attribute | Retail Sales | Top Stores group on the Regional Detail tab |
9 | Store Name | Attribute | Returns | Top Stores group on the Regional Detail tab |
The Liveboard also has the following parameter chips, all at the Liveboard level and from the Retail Sales model:
| Parameter | Type | Allowed values |
|---|---|---|
Discount Rate | DOUBLE | 0 to 0.5 |
Top N | INT | 1 to 50 |
Target Region | VARCHAR | West, East, Central, South |
Forecast Start | DATE | Any date |
Apply overrides in an embedded Liveboard🔗
Set liveboardOverride in the LiveboardEmbed configuration. The overrides apply when the Liveboard loads.
|
Note
|
In the 26.11 release, this feature is supported only in |
Step 1: Set one filter🔗
Result: chip 3 shows the last 30 days. All other chips keep their saved values.
Step 2: Set several filters and parameters🔗
Put each override in its own token: filter overrides in filterQuery, and parameter overrides in parameterQuery.
liveboardOverride: {
dataSourceOverride: [
{
filterQuery: [
{ filterQueryToken: 'Order Date=this quarter' }, // Chip 3
{ filterQueryToken: 'Sales>10000' }, // Chip 4
],
parameterQuery: [
{ parameterQueryToken: 'Discount Rate=0.15' }, // Discount Rate chip
{ parameterQueryToken: 'Top N=10' }, // Top N chip
],
},
],
},
Result: chip 3 shows this quarter, chip 4 shows Sales greater than 10000, Discount Rate is 0.15, and Top N is 10. All other chips keep their saved values.
To clear a filter chip, leave the value empty:
filterQuery: [
{ filterQueryToken: 'Sales=' }, // Chip 4
],
Result: chip 4 is cleared and shows all values.
Step 3: Use the same name in several places🔗
An override without dataSourceIdentifier, tabName, or groupName updates every chip with that name, on every model and at every level.
filterQuery: [
{ filterQueryToken: 'Region=West' }, // Chips 1, 2
{ filterQueryToken: 'Product Type=Shoes' }, // Chips 5, 6
{ filterQueryToken: 'Store Name=Downtown' }, // Chips 7, 8, 9
],
Result:
-
Both Region chips show West (Region is on both models).
-
Both Product Type chips show Shoes (Product Type is on both tabs).
-
All three Store Name chips show Downtown (Store Name is in both groups and on both models).
Step 4: Target a model, tab, or group🔗
Use these properties to narrow which chips an override updates:
-
dataSourceIdentifier: set on the entry, so it applies to every override in the entry. Use a separate entry for each model. -
tabName: set on each override. A tab also covers the groups on it, but not Liveboard-level chips. -
groupName: set on each override. A group name matches every group with that name. AddtabNameto pick the group on one tab.
In this table, the numbers refer to the chips of the example Liveboard. An empty cell means the property is not set.
| dataSourceIdentifier | tabName | groupName | filterQueryToken | Chips updated |
|---|---|---|---|---|
| 7, 8, 9 | |||
Retail Sales |
| 1 | ||
Retail Sales |
| 7, 8 | ||
Regional Detail |
| 6 | ||
Regional Detail |
| 8, 9. The tab covers its group. | ||
Top Stores |
| 7, 8, 9. Both groups are named Top Stores. | ||
Regional Detail | Top Stores |
| 8, 9 | |
Retail Sales | Top Stores |
| 7, 8 | |
Returns | Regional Detail |
| 9 | |
Retail Sales | Regional Detail | Top Stores |
| 8 |
For example, the last row in code:
{
dataSourceIdentifier: 'Retail Sales',
filterQuery: [
{
tabName: 'Regional Detail',
groupName: 'Top Stores',
filterQueryToken: 'Store Name=Downtown', // Chip 8
},
],
},
Result: only chip 8 shows Downtown. Chips 7 and 9 keep their saved values.
Overrides that are skipped🔗
Each of these overrides is skipped:
| dataSourceIdentifier | tabName | groupName | filterQueryToken | Why the override is skipped |
|---|---|---|---|---|
Summary |
| A tab doesn’t cover Liveboard-level chips, and the Summary tab has no Region chip. | ||
Summary | Top Stores |
| A group doesn’t cover its tab’s chips. Product Type is on the Summary tab, not in the group. | |
Returns | Summary |
| The Summary tab has no Store Name chip from Returns. | |
Retail |
| No model is named Retail. When the model doesn’t match, every override in the entry is skipped. |
Only the skipped override is affected. Its chips keep their saved values, and the other overrides still apply.
Step 5: Put it all together🔗
const embed = new LiveboardEmbed('#embed-container', {
frameParams: { width: '100%', height: '100%' },
liveboardId: '<liveboard-id>',
liveboardOverride: {
dataSourceOverride: [
{
// No dataSourceIdentifier: matching chips on every model
filterQuery: [
{ filterQueryToken: 'Order Date=last 30 days' }, // Chip 3
{ tabName: 'Regional Detail', filterQueryToken: 'Product Type=Shoes' }, // Chip 6
],
parameterQuery: [
{ parameterQueryToken: 'Discount Rate=0.15' }, // Discount Rate chip
],
},
{
dataSourceIdentifier: 'Retail Sales',
filterQuery: [
{ filterQueryToken: 'Region=West, East' }, // Chip 1
],
},
{
dataSourceIdentifier: 'Returns',
filterQuery: [
{ tabName: 'Regional Detail', filterQueryToken: 'Store Name=Downtown' }, // Chip 9
],
},
],
},
});
embed.render();
Result: chips 1, 3, 6, and 9, and the Discount Rate chip, are updated. Chips 2, 4, 5, 7, and 8, and the other parameter chips, keep their saved values. No two overrides target the same chip.
Liveboard override SDK flag properties🔗
| Property | Description |
|---|---|
| Array. A list of override entries. Each entry groups the filter and parameter overrides for one model, or for all models when |
| String. The name or GUID of a model used by the Liveboard. Names are case-insensitive.
|
| Array. Filter overrides. Each item has the following properties:
|
| Array. Parameter overrides. Each item has the following properties:
|
Each token holds exactly one override. Do not join overrides with ; or add Model::Tab:: prefixes inside a token. Use the dataSourceIdentifier, tabName, and groupName properties instead.
Leave out properties you do not need rather than setting them to empty strings.