Bonnard Docs
ModelingCubes

Public

Control visibility of cubes, measures, and dimensions in the API.

Overview

The public property controls whether a cube or its members are exposed through the API. Set to false to hide internal or intermediate data from consumers.

Example

cubes:
  # Hidden cube - used for joins only
  - name: internal_mappings
    public: false
    sql_table: internal.mappings

    dimensions:
      - name: id
        type: number
        sql: id
        primary_key: true

  # Public cube with some hidden members
  - name: orders
    sql_table: orders

    measures:
      - name: count
        type: count

      - name: internal_score
        type: avg
        sql: score
        public: false  # Hidden from API

    dimensions:
      - name: id
        type: number
        sql: id
        primary_key: true
        public: false  # Primary keys auto-hide by default

      - name: status
        type: string
        sql: status

Syntax

Cube Level

cubes:
  - name: internal_cube
    public: false

Measure Level

measures:
  - name: debug_metric
    type: count
    public: false

Dimension Level

dimensions:
  - name: internal_id
    type: string
    sql: internal_id
    public: false

Segment Level

segments:
  - name: test_users
    sql: "\{CUBE\}.is_test = true"
    public: false

Default Behavior

Member TypeDefault public
Cubetrue
Measuretrue
Dimensiontrue
Dimension with primary_key: truefalse
Segmenttrue

Use Cases

Internal Cubes

Hide cubes used only for joins or intermediate calculations:

cubes:
  - name: user_scores_internal
    public: false
    sql: "SELECT user_id, calculate_score() as score FROM users"

Sensitive Fields

Hide fields that shouldn't be queried directly:

dimensions:
  - name: password_hash
    type: string
    sql: password_hash
    public: false

  - name: api_secret
    type: string
    sql: api_secret
    public: false

Intermediate Measures

Hide measures used only in calculations:

measures:
  - name: raw_numerator
    type: sum
    sql: value
    public: false

  - name: raw_denominator
    type: count
    public: false

  - name: ratio
    type: number
    sql: "\{raw_numerator\} / NULLIF(\{raw_denominator\}, 0)"
    # This is public (default)

Debug/Test Members

segments:
  - name: test_data
    sql: "\{CUBE\}.is_test = true"
    public: false

Dynamic Visibility

Use COMPILE_CONTEXT for dynamic visibility based on context:

cubes:
  - name: admin_metrics
    public: "\{\{ 'true' if COMPILE_CONTEXT.role == 'admin' else 'false' \}\}"

See Also

  • cubes
  • cubes.measures
  • cubes.dimensions
  • views