metadata-models/docs/entities/dashboard.md
Dashboards are collections of visualizations and charts that provide insights into data. In DataHub, dashboards represent collections of charts (visualizations) typically found in Business Intelligence (BI) platforms and data visualization tools. Dashboards are typically ingested from platforms like Looker, Tableau, PowerBI, Superset, Mode, Grafana, and other BI tools.
Dashboards are identified by two pieces of information:
looker, tableau, powerbi, superset, mode, etc. This corresponds to the dashboardTool field in the dashboard's key aspect.dashboards.999999, while PowerBI might use GUIDs, and Tableau uses site-relative paths.An example of a dashboard identifier is urn:li:dashboard:(looker,dashboards.999999).
For platforms with multiple instances (e.g., separate Looker deployments for different environments), the URN can include a platform instance identifier: urn:li:dashboard:(looker,dashboards.999999,prod-instance).
The core metadata about a dashboard is stored in the dashboardInfo aspect. This includes:
The following code snippet shows you how to create a dashboard with basic information.
<details> <summary>Python SDK: Create a dashboard</summary>{{ inline /metadata-ingestion/examples/library/dashboard_create_simple.py show_path_as_comment }}
For more complex dashboard creation with charts and datasets:
<details> <summary>Python SDK: Create a dashboard with charts and datasets</summary>{{ inline /metadata-ingestion/examples/library/dashboard_create_complex.py show_path_as_comment }}
Dashboards act as containers for charts. The dashboardInfo aspect's chartEdges field tracks which charts belong to the dashboard, creating a hierarchical relationship:
Dashboard (Container)
├── Chart 1 (Bar Chart)
├── Chart 2 (Pie Chart)
└── Chart 3 (Line Chart)
Each chart edge includes:
This relationship enables:
{{ inline /metadata-ingestion/examples/library/dashboard_add_charts.py show_path_as_comment }}
Dashboards often consume data from one or more datasets. The dashboardInfo aspect's datasetEdges field tracks these relationships, creating Consumes relationships in the metadata graph. This enables:
{{ inline /metadata-ingestion/examples/library/dashboard_add_lineage.py show_path_as_comment }}
Some platforms support dashboards that contain other dashboards (e.g., PowerBI Apps that contain multiple dashboards). The dashboardInfo aspect's dashboards field tracks these nested relationships, enabling hierarchical dashboard organization:
PowerBI App (Dashboard)
├── Sales Dashboard (Dashboard)
│ ├── Chart 1
│ └── Chart 2
└── Marketing Dashboard (Dashboard)
├── Chart 3
└── Chart 4
This is particularly useful for platforms like PowerBI where Apps act as top-level containers for multiple dashboards.
The inputFields aspect (optional) provides fine-grained tracking of which specific dataset fields (columns) are referenced by the dashboard. Each input field creates a consumesField relationship to a schemaField entity, enabling:
DataHub separates metadata that comes from ingestion sources (in dashboardInfo) from metadata that users edit in the DataHub UI (in editableDashboardProperties). This separation ensures that:
The editableDashboardProperties aspect currently supports:
{{ inline /metadata-ingestion/examples/library/dashboard_update_editable.py show_path_as_comment }}
Dashboards can have Tags or Terms attached to them. Read this blog to understand the difference between tags and terms.
Tags are added to dashboards using the globalTags aspect.
{{ inline /metadata-ingestion/examples/library/dashboard_add_tag.py show_path_as_comment }}
Glossary terms are added using the glossaryTerms aspect.
{{ inline /metadata-ingestion/examples/library/dashboard_add_term.py show_path_as_comment }}
Ownership is associated with a dashboard using the ownership aspect. Owners can be of different types such as DATAOWNER, TECHNICAL_OWNER, BUSINESS_OWNER, etc. Ownership can be inherited from source systems or added in DataHub.
{{ inline /metadata-ingestion/examples/library/dashboard_add_owner.py show_path_as_comment }}
Dashboards can track usage metrics through the dashboardUsageStatistics aspect (experimental). This timeseries aspect captures:
Usage statistics help identify:
{{ inline /metadata-ingestion/examples/library/dashboard_usage.py show_path_as_comment }}
Dashboards can be organized into Domains (business areas or data products) using the domains aspect. This helps with:
Dashboards can belong to higher-level containers (e.g., a Tableau project or PowerBI workspace). The container aspect tracks this relationship, creating a hierarchical structure:
Tableau Project (Container)
├── Sales Dashboard
├── Marketing Dashboard
└── Finance Dashboard
This hierarchy is important for:
The embed aspect stores URLs that allow embedding the dashboard in external applications or viewing it in its native platform. The dashboardUrl field in dashboardInfo provides a direct link to the dashboard. This supports:
Dashboards from different platforms may have platform-specific subtypes defined in the subTypes aspect. Examples include:
PowerBI App (a container for multiple PowerBI dashboards)Subtypes help users understand the platform-specific nature of the dashboard.
Dashboards are typically ingested automatically from BI platforms using DataHub's ingestion connectors:
Each connector maps platform-specific dashboard metadata to DataHub's standardized dashboard model, including:
You can retrieve dashboard information using DataHub's REST API:
<details> <summary>Fetch dashboard entity snapshot</summary>curl 'http://localhost:8080/entities/urn%3Ali%3Adashboard%3A(looker,dashboards.999999)'
The response includes all aspects of the dashboard, including:
You can query dashboard relationships to understand its connections to other entities:
<details> <summary>Find charts contained in a dashboard</summary>curl 'http://localhost:8080/relationships?direction=OUTGOING&urn=urn%3Ali%3Adashboard%3A(looker,dashboards.999999)&types=Contains'
This returns all charts that belong to this dashboard.
</details> <details> <summary>Find datasets consumed by a dashboard</summary>curl 'http://localhost:8080/relationships?direction=OUTGOING&urn=urn%3Ali%3Adashboard%3A(looker,dashboards.999999)&types=Consumes'
This returns all datasets that this dashboard depends on.
</details> <details> <summary>Find which dashboards contain a specific chart</summary>curl 'http://localhost:8080/relationships?direction=INCOMING&urn=urn%3Ali%3Achart%3A(looker,look%2F1234)&types=Contains'
This returns all dashboards that contain the specified chart.
</details>Dashboards are fully supported in DataHub's GraphQL API, which provides:
The GraphQL Dashboard type includes all standard metadata fields plus dashboard-specific properties like charts, datasets, and usage statistics.
Different BI platforms have different concepts that map to dashboards:
Tableau: A Tableau "workbook" maps to a DataHub dashboard entity. A workbook contains multiple "sheets" (charts). Tableau also has "dashboards" within workbooks that are collections of sheets - these are also modeled as dashboard entities in DataHub.
PowerBI: PowerBI has "reports" (which map to dashboards) and "apps" (which are containers for multiple reports). Apps are also modeled as dashboards but with a subtype distinguishing them.
Looker: Looker dashboards contain "elements" which can be charts, looks, or text elements. Each visual element becomes a chart in DataHub.
Superset: Superset dashboards contain "slices" (charts). The relationship is straightforward dashboard-to-chart.
The dashboardInfo.charts and dashboardInfo.datasets fields are deprecated in favor of dashboardInfo.chartEdges and dashboardInfo.datasetEdges. The Edges versions provide richer relationship metadata including timestamps and actors for when relationships were created or modified.
Dashboards serve dual roles:
chartEdges)This two-level hierarchy is important for understanding organizational structure.
Dashboards frequently interact with these other DataHub entities: