Skip to content

Build Dashboards

On this page, you will:

  • Create an exchange rates dashboard with trend charts and volatility analysis
  • Build a product catalogue dashboard with pricing insights
  • Configure filters, drill-downs, and interactive elements
  • Schedule dashboard refreshes and email reports
  • Share dashboards with stakeholders and set permissions
  • Understand dashboard best practices for clarity and performance

Overview

Dashboards in Lightdash combine multiple charts into a single view, providing at-a-glance insights into your data. They can be filtered, scheduled, and shared with stakeholders who don't write SQL.

This page walks through building two dashboards using the metrics you defined in the previous step:

  1. Exchange Rates Dashboard — GBP currency trends, volatility, and comparisons
  2. Product Catalogue Dashboard — Product pricing analysis and category breakdown
┌─────────────────────────────────────────────────────────────────────────┐
│                        DASHBOARD ARCHITECTURE                           │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  Dashboard                         dbt Models                          │
│  ─────────                         ──────────                          │
│                                                                         │
│  ┌──────────────────────────────────────────────────────────────┐      │
│  │ Exchange Rates Dashboard                                     │      │
│  │ ┌────────────────┐  ┌────────────────┐  ┌────────────────┐  │      │
│  │ │ Trend Chart    │  │ Volatility     │  │ Current Rates  │  │      │
│  │ │ (line chart)   │  │ (bar chart)    │  │ (table)        │  │      │
│  │ └────────────────┘  └────────────────┘  └────────────────┘  │      │
│  │         ▲                   ▲                   ▲           │      │
│  │         └───────────────────┴───────────────────┘           │      │
│  │                             │                               │      │
│  │                   fct_exchange_rates                        │      │
│  │                   (metrics from YAML)                       │      │
│  └──────────────────────────────────────────────────────────────┘      │
│                                                                         │
│  All charts query the same dbt model with different filters/groupings. │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

Dashboard 1: Exchange Rates Dashboard

Step 1: Create the Dashboard

  1. Navigate to Dashboards in Lightdash
  2. Click + New dashboard
  3. Name: "GBP Exchange Rates Dashboard"
  4. Description: "Daily GBP exchange rate trends, volatility analysis, and current rates"
  5. Click Create

Create the chart:

  1. Click + Add tileSaved chart (or Create new)
  2. If creating new:
  3. Select ExploreExchange Rates (fct_exchange_rates)
  4. Dimensions: Date (grouped by Week), Target Currency
  5. Metrics: Average Exchange Rate
  6. Filters:
    • Date >= Last 6 months
    • Target Currency IN (USD, EUR, JPY, AUD, CAD)
  7. Click Run query

  8. Configure chart:

  9. Chart type: Line chart
  10. X-axis: Date (Week)
  11. Y-axis: Average Exchange Rate
  12. Group by / Series: Target Currency
  13. Title: "GBP Exchange Rate Trends (6 Months)"

  14. Customise:

  15. Show legend: Yes
  16. Y-axis label: "Exchange Rate"
  17. X-axis label: "Week"
  18. Colour scheme: Assign distinct colours to each currency

  19. Click Save → Choose the dashboard you created above

Resize and position: - Drag the tile to the top-left - Resize to span 2/3 of the dashboard width

Step 3: Add Chart 2 — Currency Volatility

Create the chart:

  1. Click + Add tileCreate new
  2. ExploreExchange Rates
  3. Dimensions: Target Currency
  4. Metrics: Exchange Rate Volatility
  5. Filters:
  6. Date >= Last 90 days
  7. Target Currency IN (USD, EUR, JPY, AUD, CAD, CHF, NZD, SEK)
  8. Sort: Exchange Rate Volatility DESC

Configure chart: - Chart type: Bar chart (horizontal) - X-axis: Exchange Rate Volatility - Y-axis: Target Currency - Title: "Currency Volatility (90 Days)" - Subtitle: "Standard deviation of exchange rates"

Save and position: - Save to the dashboard - Position in top-right (1/3 width)

Step 4: Add Chart 3 — Current Exchange Rates Table

Create the chart:

  1. ExploreExchange Rates
  2. Dimensions: Target Currency, Date
  3. Metrics: Average Exchange Rate
  4. Filters:
  5. Date = Latest date available (use custom SQL: rate_date = (SELECT MAX(rate_date) FROM analytics.reporting.fct_exchange_rates))
  6. Alternatively: Date >= Today - 1 day (if data is updated daily)
  7. Sort: Target Currency ASC

Configure: - Chart type: Table - Columns: Target Currency, Average Exchange Rate - Column formats: - Average Exchange Rate: 4 decimal places - Title: "Current GBP Exchange Rates" - Subtitle: "As of [latest date]"

Save and position: - Save to dashboard - Position below the trend chart (full width or left half)

Step 5: Add Chart 4 — Min/Max Range

Create the chart:

  1. ExploreExchange Rates
  2. Dimensions: Target Currency
  3. Metrics: Minimum Exchange Rate, Maximum Exchange Rate, Average Exchange Rate
  4. Filters:
  5. Date >= Last 90 days
  6. Target Currency IN (USD, EUR, JPY)

Configure: - Chart type: Bar chart (grouped) - X-axis: Target Currency - Y-axis: All three metrics (min, max, average) as separate series - Title: "90-Day Exchange Rate Range" - Subtitle: "Min, Max, and Average rates"

Save and position: - Save to dashboard - Position bottom-right

Step 6: Add Dashboard Filter

Add a filter that applies to all tiles:

  1. Click Edit dashboard
  2. Click + Add filter
  3. Select Target Currency (from fct_exchange_rates)
  4. Filter type: Multi-select dropdown
  5. Default value: USD, EUR, JPY (pre-selected)
  6. Apply to tiles: Select all tiles that use Target Currency

Now viewers can adjust the currency selection and all charts update automatically.

Step 7: Add Text Tile (Optional)

Add context for dashboard users:

  1. Click + Add tileMarkdown
  2. Add explanatory text:
## GBP Exchange Rates Dashboard

This dashboard shows GBP (British Pound) exchange rates against major currencies.

**Data Sources:**
- European Central Bank (ECB) API
- Yahoo Finance API

**Refresh Schedule:** Daily at 08:00 UTC

**Key Metrics:**
- **Volatility**: Standard deviation of daily rates (higher = more volatile)
- **Current Rates**: Latest available exchange rate
- **Trends**: 6-month historical trends by week
  1. Save and position at the top of the dashboard

Dashboard 2: Product Catalogue Dashboard

Step 1: Create the Dashboard

  1. Navigate to Dashboards
  2. Click + New dashboard
  3. Name: "Product Catalogue Dashboard"
  4. Description: "Product pricing, categories, and inventory insights"
  5. Click Create

Step 2: Add Chart 1 — Product Count by Category

Create the chart:

  1. ExploreProducts (dim_products)
  2. Dimensions: Category
  3. Metrics: count_current_products (or row count if metric not defined)
  4. Filters:
  5. Current Version = TRUE (to avoid counting historical Type 2 SCD versions)
  6. Active Product = TRUE
  7. Sort: Count DESC

Configure: - Chart type: Bar chart - X-axis: Category - Y-axis: Count of Products - Title: "Product Count by Category" - Subtitle: "Active products only"

Step 3: Add Chart 2 — Average Price by Category

Create the chart:

  1. ExploreProducts
  2. Dimensions: Category
  3. Metrics: Average Product Price
  4. Filters:
  5. Current Version = TRUE
  6. Active Product = TRUE

Configure: - Chart type: Bar chart (horizontal) - X-axis: Average Product Price - Y-axis: Category - Title: "Average Product Price by Category" - Format: Currency (GBP), 2 decimal places

Step 4: Add Chart 3 — Price Distribution

Create the chart:

  1. ExploreProducts
  2. Dimensions: Product Price (bucketed)
  3. Metrics: Count of products
  4. Filters:
  5. Current Version = TRUE
  6. Active Product = TRUE

Note: Lightdash doesn't have built-in histogram support. Instead, create price buckets manually or use a table:

Alternative: Table of Price Ranges - Show Minimum Price, Maximum Price, Average Price by category

Configure: - Chart type: Table or Scatter plot (Price vs Category) - Title: "Product Price Distribution"

Step 5: Add Chart 4 — Most Expensive Products

Create the chart:

  1. ExploreProducts
  2. Dimensions: Product Name, Category, Product Price
  3. Metrics: None (showing raw data)
  4. Filters:
  5. Current Version = TRUE
  6. Active Product = TRUE
  7. Sort: Product Price DESC
  8. Limit: Top 10

Configure: - Chart type: Table - Columns: Product Name, Category, Product Price - Title: "Top 10 Most Expensive Products"

Step 6: Add Chart 5 — Active vs Inactive Products

Create the chart:

  1. ExploreProducts
  2. Dimensions: Active Product
  3. Metrics: Count
  4. Filters:
  5. Current Version = TRUE

Configure: - Chart type: Pie chart or Donut chart - Segments: Active Product (True/False) - Title: "Active vs Inactive Products"

Step 7: Add Dashboard Filter

  1. Click Edit dashboard
  2. Click + Add filter
  3. Select Category
  4. Filter type: Multi-select dropdown
  5. Default value: All categories
  6. Apply to all tiles

Scheduling and Sharing

Schedule Dashboard Refresh

Dashboards in Lightdash query live data — they're always up to date when you view them. However, you can schedule email reports:

  1. Open the dashboard
  2. Click Schedule (or menu → Schedule delivery)
  3. Configure:
  4. Recipients: Enter email addresses
  5. Frequency: Daily, Weekly, Monthly
  6. Time: 08:00 UTC
  7. Format: PDF or link to dashboard
  8. Click Save schedule

Recipients will receive an email with the dashboard snapshot or a link to view it in Lightdash.

Share Dashboard

Share with specific users:

  1. Click Share at the top-right
  2. Enter usernames or emails
  3. Set permissions:
  4. View: Can view dashboard but not edit
  5. Edit: Can modify tiles and filters
  6. Click Share

Share with a role (recommended):

If you've configured roles in Lightdash (mirroring Snowflake roles): 1. Click Share 2. Select Share with roleANALYTICS_REPORTER or equivalent 3. All users with that role can view the dashboard

Public link (not recommended for production): - Lightdash Cloud supports public links for embedding - Self-hosted: Configure authentication if needed

Dashboard Best Practices

Design Principles

  1. Start with key metrics at the top
  2. Most important chart (trend, KPI) should be top-left (first thing users see)

  3. Limit to 4-8 tiles

  4. Too many tiles overwhelm users
  5. Create multiple dashboards instead of one crowded dashboard

  6. Use consistent colour schemes

  7. Same currency = same colour across charts
  8. Follow brand guidelines if applicable

  9. Add context with text tiles

  10. Explain what the dashboard shows
  11. Link to documentation or data dictionaries

  12. Enable filters for interactivity

  13. Let users explore (e.g., filter by date range, category, currency)
  14. But don't overload with 10+ filters

Performance Optimisation

  1. Limit data volume
  2. Use filters to reduce rows queried (e.g., last 6 months, not all-time)
  3. Aggregate in dbt models, not in Lightdash

  4. Materialise as tables, not views

  5. fct_exchange_rates should be a table in dbt (not a view)
  6. Views query raw data on every dashboard load (slow)

  7. Use Snowflake caching

  8. Snowflake caches identical queries for 24 hours
  9. Dashboards with repeated queries (hourly refresh) benefit from caching

  10. Pre-aggregate in dbt

  11. Create a fct_exchange_rates_monthly model if you always group by month
  12. Queries run faster on pre-aggregated tables

Naming Conventions

  • Dashboard names: Clear, action-oriented ("GBP Exchange Rate Monitoring", not "Dashboard 1")
  • Chart titles: Descriptive and specific ("GBP/USD Trend - Last 6 Months", not "Line Chart")
  • Metric labels: Business-friendly ("Average Exchange Rate", not "avg_rate")

Example Dashboard Layout

┌────────────────────────────────────────────────────────────────────┐
│ GBP Exchange Rates Dashboard                                      │
├────────────────────────────────────────────────────────────────────┤
│ ┌────────────────────────────────────────────────┐                 │
│ │ Explanatory Text (Markdown)                   │                 │
│ │ • Data sources: ECB, Yahoo Finance             │                 │
│ │ • Refresh: Daily at 08:00 UTC                  │                 │
│ └────────────────────────────────────────────────┘                 │
│                                                                    │
│ Filters: [Currency ▼] [Date Range ▼]                              │
│                                                                    │
│ ┌───────────────────────────────────┐  ┌────────────────────────┐ │
│ │ Exchange Rate Trends (Line Chart) │  │ Volatility (Bar Chart) │ │
│ │                                   │  │                        │ │
│ │ (2/3 width)                       │  │ (1/3 width)            │ │
│ └───────────────────────────────────┘  └────────────────────────┘ │
│                                                                    │
│ ┌───────────────────────────────────┐  ┌────────────────────────┐ │
│ │ Current Rates (Table)             │  │ Min/Max Range          │ │
│ │                                   │  │ (Bar Chart)            │ │
│ │ (1/2 width)                       │  │ (1/2 width)            │ │
│ └───────────────────────────────────┘  └────────────────────────┘ │
└────────────────────────────────────────────────────────────────────┘

Embedding Dashboards (Optional)

Lightdash Cloud supports embedding dashboards in external applications (e.g., internal company portal):

  1. Navigate to the dashboard
  2. Click menu → ShareEmbed
  3. Copy the <iframe> code
  4. Paste into your application

Requirements: - Lightdash Cloud only (not self-hosted, unless you configure authentication) - Users must have Lightdash accounts (SSO recommended) - Or use public links (not recommended for sensitive data)

Troubleshooting

Dashboard Loads Slowly

Diagnose: 1. Open the dashboard 2. Click on a slow tile 3. View the query and run it manually in Snowsight 4. Check query execution time

Fixes: - Add indexes/clustering keys to the Snowflake table - Reduce date range (e.g., 6 months instead of all-time) - Pre-aggregate data in dbt (create a monthly rollup model) - Materialise as table instead of view

Chart Shows "No Data"

Check: 1. Are filters too restrictive? (e.g., date range excludes all data) 2. Does the underlying model have data? Query it directly in Snowsight 3. Did dbt run successfully? Check REPORTING schema for the table

Filters Don't Apply to All Tiles

Fix: 1. Edit the dashboard 2. Click the filter 3. Ensure "Apply to tiles" includes all relevant tiles 4. Save changes

Summary

You've built dashboards in Lightdash:

  • Created GBP Exchange Rates Dashboard with trend charts, volatility analysis, and current rates
  • Created Product Catalogue Dashboard with pricing analysis and category breakdowns
  • Added interactive filters for currency and category selection
  • Configured scheduled email reports for stakeholders
  • Shared dashboards with appropriate roles and permissions
  • Applied best practices for clarity, performance, and usability

Your dashboards are now live, querying dbt models with metrics defined in code. Business users can explore data without writing SQL.

What's Next

Dashboards serve operational reporting. For deeper, exploratory analysis, use notebooks (Jupyter, Snowflake Notebooks) to investigate data with Python and SQL.

Continue to Ad-Hoc Analytics with Notebooks