Bonnard Docs
Modeling

Views

Compose cubes into focused interfaces for specific use cases.

Overview

Views are facades that expose selected measures and dimensions from one or more cubes. They define which data is available to consumers, control join paths, and organize members into logical groups.

Example

views:
  - name: orders_overview
    cubes:
      - join_path: orders
        includes:
          - count
          - total_revenue
          - status
          - created_at

      - join_path: orders.users
        includes:
          - name: name
            alias: customer_name
          - email

Core Properties

PropertyRequiredDescription
nameYesUnique identifier in snake_case
cubesYesList of cubes and their exposed members
foldersNoOrganize members into groups
titleNoHuman-readable display name
descriptionNoDocumentation for consumers
publicNoWhether exposed in API (default: true)

Why Use Views?

1. Simplify Data Access

Expose only relevant members instead of entire cubes:

views:
  - name: sales_dashboard
    cubes:
      - join_path: orders
        includes:
          - count
          - total_revenue
        excludes:
          - internal_notes
          - debug_flags

2. Control Join Paths

Define explicit paths through your data model:

views:
  - name: customer_orders
    cubes:
      # Explicit path: orders -> users
      - join_path: orders.users
        includes:
          - name
          - email

3. Rename and Reorganize

Create user-friendly names and groupings:

views:
  - name: analytics
    cubes:
      - join_path: orders
        includes:
          - name: count
            alias: order_count
            title: "Total Orders"

          - name: total_revenue
            alias: revenue
            title: "Revenue"

4. Govern Data Access

Control what different consumers can see:

views:
  - name: public_metrics
    public: true
    cubes:
      - join_path: orders
        includes:
          - count
          - total_revenue

  - name: internal_metrics
    public: false  # Only for internal use
    cubes:
      - join_path: orders
        includes: "*"

File Organization

Store views in the bonnard/views/ directory:

bonnard/views/
├── orders_overview.yaml
├── sales_dashboard.yaml
└── customer_360.yaml

Best Practices

  1. Create purpose-specific views — one view per dashboard/use case
  2. Use meaningful names — describe what the view is for
  3. Be explicit with includes — list members rather than using "*"
  4. Alias for clarity — rename members when needed
  5. Organize with folders — group related members together

See Also

  • views.cubes
  • views.includes
  • views.folders
  • cubes.joins