Public
The public property controls whether cubes, measures, and dimensions are exposed in the API. Set public to false to hide internal implementation details from consumers.
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: statusSyntax
Cube Level
cubes:
- name: internal_cube
public: falseMeasure Level
measures:
- name: debug_metric
type: count
public: falseDimension Level
dimensions:
- name: internal_id
type: string
sql: internal_id
public: falseSegment Level
segments:
- name: test_users
sql: "{CUBE}.is_test = true"
public: falseDefault Behavior
| Member Type | Default public |
|---|---|
| Cube | true |
| Measure | true |
| Dimension | true |
Dimension with primary_key: true | false |
| Segment | true |
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: falseIntermediate 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: falseDynamic 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
Joins
Joins connect cubes together so you can query measures and dimensions across multiple tables. Define one-to-many, many-to-one, and one-to-one relationships between cubes.
Refresh Key
The refresh_key property controls when cube data is refreshed in the cache. Define time-based or query-based refresh strategies to balance data freshness with query performance.