Dashboard is an ordered list of indicators and indicator drill pairs.
Indicators on dashboard offer various ways of formatting. It's possible to group them, change their size or font, or display one of its indicator drill blocks directly on dashboard. They can also be collapsed or expanded (using right mouse click).
Dashboards are referenced in views. Each view references exactly one dashboard.
See various setups of a dashboard in action in the Features Catalog for Developers project. |
This is the syntax of the dashboard located in the Customer Intelligence view of the Retail Solution Demo project.
It's the simplest way to display an array of indicators. Each of them has one row and is primary
. For more customized dashboards, see the syntax examples and visual representation below.
{ "name": "customer_intelligence_dashboard", "type": "dashboard", "content": { "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=online_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=online_turnover_indicator_drill", "layout": "primary", "itemId": "78d0d5553ee924d8532515b521fa70f1" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=offline_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=offline_turnover_indicator_drill", "layout": "primary", "itemId": "019ad374af348531dae3b6dae90de923" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=customers_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=customers_indicator_drill", "layout": "primary", "itemId": "05f174e2300cee630980bdc3166cce7f" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_indicator_drill", "layout": "primary", "itemId": "cb9742a903269413edda25e0400a5ec1" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=average_purchase_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=average_purchase_indicator_drill", "layout": "primary", "itemId": "dd172a51be2b1de46bfbd025eaf87137" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_customer_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_customer_indicator_drill", "layout": "primary", "itemId": "69c1e3e090da9681de740157d9214a60" } ] } } |
{ "url": "/rest/projects/yufqzxkbiecj7jot/md/dashboards/fbvund7hls1s5a5s", "dumpTime": "2018-01-25T14:19:34Z", "version": "0", "content": { "id": "fbvund7hls1s5a5s", "name": "customer_intelligence_dashboard", "type": "dashboard", "content": { "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=online_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=online_turnover_indicator_drill", "layout": "primary", "itemId": "78d0d5553ee924d8532515b521fa70f1" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=offline_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=offline_turnover_indicator_drill", "layout": "primary", "itemId": "019ad374af348531dae3b6dae90de923" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=customers_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=customers_indicator_drill", "layout": "primary", "itemId": "05f174e2300cee630980bdc3166cce7f" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_indicator_drill", "layout": "primary", "itemId": "cb9742a903269413edda25e0400a5ec1" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=average_purchase_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=average_purchase_indicator_drill", "layout": "primary", "itemId": "dd172a51be2b1de46bfbd025eaf87137" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_customer_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_customer_indicator_drill", "layout": "primary", "itemId": "69c1e3e090da9681de740157d9214a60" } ] }, "accessInfo": { "createdAt": "2017-10-05T08:27:11Z" }, "links": [ { "rel": "self", "href": "/rest/projects/yufqzxkbiecj7jot/md/dashboards/fbvund7hls1s5a5s" } ] } } |
{ "name": "customer_intelligence_dashboard", "type": "dashboard", "content": { "blockRows": [ { "type": "blockRow", "blocks": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=online_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=online_turnover_indicator_drill", "layout": "primary", "itemId": "8ac314a472a91c42bfbeac9cf90a30aa" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=offline_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=offline_turnover_indicator_drill", "layout": "primary", "itemId": "45417c00d9b5d52936b8d2b8300eda63" } ], "itemId": "44b154f493ffb6195f253232446beef7" }, { "type": "blockRow", "blocks": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=customers_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=customers_indicator_drill", "layout": "secondary", "itemId": "8d053723cb9372574ceeae9bd0c360ba" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_indicator_drill", "layout": "secondary", "itemId": "6a1e11b1795f90b5170da6143e770816" } ], "itemId": "94014766357838ab645158538ddc6ed0" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=average_purchase_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=average_purchase_indicator_drill", "layout": "primary", "itemId": "b465747d2a26239f1168e7a6cf250231" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_customer_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_customer_indicator_drill", "layout": "secondary", "itemId": "d13d5b44990292a6c1b051c018410053" } ] } } |
It is possible to split two indicators in half and display them in one row. This is a good way to squeeze more indicators on one dashboard.
To do that, we have to put them to the blockRow
object. We have modified the dashboard from the main syntax example so that its first and second indicator are in a blockRow
object, as well as the third and fourth indicator. Please note that a maximum of 2 indicators can be displayed in one row.
You can also notice that some of the indicators have secondary
layout. Using this layout, the indicator tile and the font become smaller, allowing you to display yet more indicators on one dashboard. The two indicators in a blockRow
should have identical layout
, otherwise one tile will be larger than the other and the row will look weird.
-
{ "name": "indicator_groups_dashboard", "type": "dashboard", "content": { "blockRows": [ { "type": "indicatorGroup", "title": "Catchment Area Analysis", "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=turnover_indicator_drill", "layout": "primary", "itemId": "78d0d5553ee924d8532515b521fa70f1" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=customers_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=customers_indicator_drill", "layout": "primary", "itemId": "9403698a1ed0cc2e55fcc27762faa1a3" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_customer_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_customer_indicator_drill", "layout": "primary", "itemId": "8d053723cb9372574ceeae9bd0c360ba" } ], "itemId": "ccf504abece40ed0bbe992f4931ddae3" }, { "type": "indicatorGroup", "title": "Customer Intelligence", "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=online_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=online_turnover_indicator_drill", "layout": "primary", "itemId": "b465747d2a26239f1168e7a6cf250231" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=offline_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=offline_turnover_indicator_drill", "layout": "primary", "itemId": "ccf504abece40ed0bbe992f4931ddae3" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_indicator_drill", "layout": "primary", "itemId": "9403698a1ed0cc2e55fcc27762faa1a3" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=average_purchase_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=average_purchase_indicator_drill", "layout": "primary", "itemId": "ee2069d8ebd36700690adbf9875111f1" } ], "itemId": "9403698a1ed0cc2e55fcc27762faa1a3" }, { "type": "indicatorGroup", "title": "Market Potential", "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=market_potential_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=market_potential_indicator_drill", "layout": "primary", "itemId": "d13d5b44990292a6c1b051c018410053" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=market_penetration_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=market_penetration_indicator_drill", "layout": "primary", "itemId": "8d053723cb9372574ceeae9bd0c360ba" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=potential_customers_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=potential_customers_indicator_drill", "layout": "primary", "itemId": "f954ba0708d2a87832469e97d00dac7a" } ], "itemId": "ee2069d8ebd36700690adbf9875111f1" }, { "type": "indicatorGroup", "title": "Demography", "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=residents_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=residents_indicator_drill", "layout": "primary", "itemId": "6a1e11b1795f90b5170da6143e770816" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=households_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=households_indicator_drill", "layout": "primary", "itemId": "b465747d2a26239f1168e7a6cf250231" } ], "itemId": "d13d5b44990292a6c1b051c018410053" } ] } } |
It is possible to group a number of indicators in an indicatorGroups
array. This is a good way to display high number of indicators in a compact way.
This example shows the indicators from the first four views of the Retail Solution Demo grouped into one view's dashboard with indicatorGroups
.
-
{ "name": "indicator_groups_dashboard", "type": "dashboard", "content": { "blockRows": [ { "type": "indicatorGroup", "title": "Catchment Area Analysis", "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=turnover_indicator_drill", "layout": "primary", "itemId": "9403698a1ed0cc2e55fcc27762faa1a3" }, { "type": "blockRow", "blocks": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=customers_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=customers_indicator_drill", "layout": "primary", "itemId": "ccf504abece40ed0bbe992f4931ddae3" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_customer_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_customer_indicator_drill", "layout": "primary", "itemId": "78d0d5553ee924d8532515b521fa70f1" } ], "itemId": "b465747d2a26239f1168e7a6cf250231" } ], "itemId": "6a1e11b1795f90b5170da6143e770816" }, { "type": "indicatorGroup", "title": "Customer Intelligence", "blockRows": [ { "type": "blockRow", "blocks": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=online_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=online_turnover_indicator_drill", "layout": "primary", "itemId": "6a1e11b1795f90b5170da6143e770816" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=offline_turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=offline_turnover_indicator_drill", "layout": "primary", "itemId": "b465747d2a26239f1168e7a6cf250231" } ], "itemId": "78d0d5553ee924d8532515b521fa70f1" }, { "type": "blockRow", "blocks": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_indicator_drill", "layout": "primary", "itemId": "d13d5b44990292a6c1b051c018410053" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=average_purchase_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=average_purchase_indicator_drill", "layout": "primary", "itemId": "ee2069d8ebd36700690adbf9875111f1" } ], "itemId": "9403698a1ed0cc2e55fcc27762faa1a3" } ], "itemId": "ccf504abece40ed0bbe992f4931ddae3" }, { "type": "indicatorGroup", "title": "Market Potential", "blockRows": [ { "type": "blockRow", "blocks": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=market_potential_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=market_potential_indicator_drill", "layout": "primary", "itemId": "110041ea130fb3cb2b8e6ef4d3925184" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=market_penetration_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=market_penetration_indicator_drill", "layout": "primary", "itemId": "3fb652df72521f04ea030cd7e5be4f14" } ], "itemId": "24855bd309326c03f9517aa26c1585ce" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=potential_customers_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=potential_customers_indicator_drill", "layout": "primary", "itemId": "08a28d47c1b25b25b69ba304bf286257" } ], "itemId": "1973df870007c4fc349b855b75d8711d" }, { "type": "indicatorGroup", "title": "Demography", "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=residents_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=residents_indicator_drill", "layout": "primary", "itemId": "100ba488ab6b56196d1641b4cd86101c" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=households_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=households_indicator_drill", "layout": "primary", "itemId": "a5708f7570f330a1d470bbf2eaaed1ed" } ], "itemId": "d13d5b44990292a6c1b051c018410053" } ] } } |
This example combines the use of indicatorGroups
and blockRow
objects.
{ "name": "catchment_area_dashboard", "type": "dashboard", "content": { "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=turnover_indicator_drill", "layout": "primary", "itemId": "79079ad528a0317b574dc6c0c8f5f4d1" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=customers_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=customers_indicator_drill", "layout": "primary", "itemId": "40909dd2f0596eab4dfdbc534e1b4c11" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_customer_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_customer_indicator_drill", "layout": "primary", "itemId": "9bfe29429a3cdc14c23d1f4571964379" }, { "type": "categories", "indicator": "/rest/projects/$projectId/md/indicators?name=turnover_indicator", "title": "Total Turnover value by channel", "description": "Total Turnover value by channel", "splitProperty": "baskets.on_off_name", "orderBy": { "property": "baskets.on_off_name", "direction": "asc" }, "itemId": "fffb087fa92f979eae3a70cd357dc52c" }, { "type": "categories", "indicator": "/rest/projects/$projectId/md/indicators?name=customers_indicator", "title": "Number of Customers by channel", "description": "Number of Customers by channel", "splitProperty": "baskets.on_off_name", "orderBy": { "property": "baskets.on_off_name", "direction": "asc" }, "itemId": "e802510371745be32fcd1bfa92cb5604" } ] } } |
It is possible to display the categories
block (from indicator drill) directly on a dashboard. In that case, a block with corresponding indicator must be specified. For the block description, see content.blocks.categories
.
{ "name": "catchment_area_dashboard", "type": "dashboard", "content": { "blockRows": [ { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=turnover_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=turnover_indicator_drill", "layout": "primary", "itemId": "2134bead33528991273f6ae3b76b2acd" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=customers_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=customers_indicator_drill", "layout": "primary", "itemId": "b1049a5fac09e793928340811686e326" }, { "type": "indicator", "indicator": "/rest/projects/$projectId/md/indicators?name=purchases_customer_indicator", "indicatorDrill": "/rest/projects/$projectId/md/indicatorDrills?name=purchases_customer_indicator_drill", "layout": "primary", "itemId": "0c20c60783f36e3596b026f38f9a1304" } ], "datasetProperties": [ { "dataset": "/rest/projects/$projectId/md/datasets?name=shops", "featureAttributes": [ { "type": "property", "value": "manager_name" }, { "type": "property", "value": "opening_hours" }, { "type": "property", "value": "contact_phone" }, { "type": "property", "value": "contact_mail", "format": { "type": "email" } }, { "type": "property", "value": "employees" }, { "type": "property", "value": "monthly_rent", "format": { "type": "number", "fraction": 0, "symbol": "£" } } ], "itemId": "74fe1a6b0d620af9108bfaf5ea910512" } ] } } |
It is also possible to define (but not display) the dataset.properties.featureAttributes
on a dashboard. This way, attributes can be defined per view, in case you want to see the properties of a dataset in one view, but not the other. When defined in dataset, the attributes are active per the whole project.
content
Key | Type | Optionality | Description | Constraints |
---|---|---|---|---|
blockRows | array | array of either:
see the syntax examples above | ||
datasetProperties | array | definition of dataset's |
content.blockRows.indicator
A regular indicator tile in one row.
Key | Type | Optionality | Description | Constraints |
---|---|---|---|---|
type | string | type identifier, always indicator | [indicator] | |
indicator | string | URL link to the indicator object | /rest/projects/$projectId/md/indicators?name={indicatorName} | |
indicatorDrill | string | URL link to the indicator drill object | /rest/projects/$projectId/md/indicatorDrills?name={ | |
layout | string | layout of the indicator when not specified, the indicator's layout is | [primary, secondary] | |
collapsed | boolean | determines if the indicator should be collapsed when entering the view | ||
itemId | string | Generated ID for this item to be used for matching it within a parent array while rebasing share objects. For more details see content.**.itemId section below. | [a-z0-9]{32} |
content.blockRows.blockRow
An object defining one row in a dashboard. Can contain a maximum of 2 indicators, which will be split in half and displayed in one row.
Key | Type | Optionality | Description | Constraints |
---|---|---|---|---|
type | string | type identifier, always blockRow | [ | |
blocks | array | array of indicator and indicator drill pairs | size = 2 |
content.
blockRows.
indicatorGroup
A number of indicators in a named collapsible group.
Key | Type | Optionality | Description | Constraints |
---|---|---|---|---|
type | string | type identifier, always indicatorGroup | [indicatorGroup] | |
title | string | title of the indicator group | (*) | |
description | string | description of the indicator group | (*) | |
collapsed | boolean | determines if the group should be collapsed when entering the view | [true, false] | |
blockRows | array | array of either:
see the syntax example above |
content.
blockRows.categories
The syntax of categories block on dashboard is identical to the regular categories syntax. See indicatorDrill.content.blocks.categories
.
content.
datasetProperties
Allows you to define dataset's featureAttributes
on dashboard. See above.
Key | Type | Optionality | Description | Constraints |
---|---|---|---|---|
dataset | string | URL link to the dataset, whose properties will be set | /rest/projects/$projectId/md/datasets?name={datasetName} | |
defaultSearch | string | specifies if the dataset will be enabled in Refine search enable = dataset will be enabled disable = dataset will be disabled auto = dataset will be enabled if its features are visible in the map | [enable, disable, auto] | |
featureAttributes | array | array of |
content.**.itemId
itemId
is genrated as hash from random UUID when given item is being created - either an entire dashboard is being created or an item is being added to MD object content via update. Once itemId
is generated it is not supposed to be modified. IMPORTANT: When interacting with REST API do not provide own generated values as itemId;
itemId
attribute at all - it will be generated at backend and returend within a response payloaditemId
which was previously retrieved from backend via REST API - this value will be used for matching the item with share object diffs while rebasing a share objectblockRows
basic dashboard | with |
indicatorGroups
with | with |
after clicking on an area | |
To display an indicator drill block directly on a dashboard, you can set its onDashboard
property to true
. It is possible to display all four blocks: distribution
, ranking
, timeSeries
and categories
.
Each block on a dashboard can be collapsed / expanded, by using the right click and selecting "Collapse this indicator" / "Expand this indicator".
indicator drill blocks | block collapse / expand option |
categories
blockEach indicator can have one its blocks on dashboard. Apart from that, it's also possible to display categories blocks on their own.
This dashboard combines all features mentioned above: regular indicators, indicators with blocks onDashboard
, indicators in blockRow
objects, indicators in indicatorGroups
and categories
block on dashboard.
dashboard features mix | after clicking on an area |