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
- emailCore Properties
| Property | Required | Description |
|---|---|---|
name | Yes | Unique identifier in snake_case |
cubes | Yes | List of cubes and their exposed members |
folders | No | Organize members into groups |
title | No | Human-readable display name |
description | No | Documentation for consumers |
public | No | Whether 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_flags2. 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
- email3. 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.yamlBest Practices
- Create purpose-specific views — one view per dashboard/use case
- Use meaningful names — describe what the view is for
- Be explicit with includes — list members rather than using "*"
- Alias for clarity — rename members when needed
- Organize with folders — group related members together
See Also
- views.cubes
- views.includes
- views.folders
- cubes.joins