@bonnard/cli 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/bon.mjs +1838 -100
- package/dist/bin/models-IsV2sX74.mjs +76 -0
- package/dist/bin/{validate-Bd1D39Bj.mjs → validate-C4EHvJzJ.mjs} +47 -4
- package/dist/docs/README.md +82 -0
- package/dist/docs/_index.md +69 -0
- package/dist/docs/topics/cubes.data-source.md +96 -0
- package/dist/docs/topics/cubes.dimensions.format.md +199 -0
- package/dist/docs/topics/cubes.dimensions.md +188 -0
- package/dist/docs/topics/cubes.dimensions.primary-key.md +110 -0
- package/dist/docs/topics/cubes.dimensions.sub-query.md +178 -0
- package/dist/docs/topics/cubes.dimensions.time.md +115 -0
- package/dist/docs/topics/cubes.dimensions.types.md +111 -0
- package/dist/docs/topics/cubes.extends.md +153 -0
- package/dist/docs/topics/cubes.hierarchies.md +178 -0
- package/dist/docs/topics/cubes.joins.md +119 -0
- package/dist/docs/topics/cubes.md +121 -0
- package/dist/docs/topics/cubes.measures.calculated.md +103 -0
- package/dist/docs/topics/cubes.measures.drill-members.md +162 -0
- package/dist/docs/topics/cubes.measures.filters.md +90 -0
- package/dist/docs/topics/cubes.measures.format.md +157 -0
- package/dist/docs/topics/cubes.measures.md +166 -0
- package/dist/docs/topics/cubes.measures.rolling.md +123 -0
- package/dist/docs/topics/cubes.measures.types.md +126 -0
- package/dist/docs/topics/cubes.public.md +176 -0
- package/dist/docs/topics/cubes.refresh-key.md +157 -0
- package/dist/docs/topics/cubes.segments.md +125 -0
- package/dist/docs/topics/cubes.sql.md +65 -0
- package/dist/docs/topics/pre-aggregations.md +130 -0
- package/dist/docs/topics/pre-aggregations.rollup.md +166 -0
- package/dist/docs/topics/syntax.context-variables.md +157 -0
- package/dist/docs/topics/syntax.md +137 -0
- package/dist/docs/topics/syntax.references.md +178 -0
- package/dist/docs/topics/views.cubes.md +166 -0
- package/dist/docs/topics/views.folders.md +158 -0
- package/dist/docs/topics/views.includes.md +143 -0
- package/dist/docs/topics/views.md +142 -0
- package/dist/docs/topics/workflow.deploy.md +132 -0
- package/dist/docs/topics/workflow.md +151 -0
- package/dist/docs/topics/workflow.query.md +203 -0
- package/dist/docs/topics/workflow.validate.md +156 -0
- package/dist/templates/claude/rules/bonnard.md +15 -0
- package/dist/templates/claude/settings.json +7 -0
- package/dist/templates/claude/skills/bonnard-cli/SKILL.md +59 -0
- package/dist/templates/claude/skills/bonnard-queries/SKILL.md +68 -0
- package/dist/templates/cursor/rules/bonnard-cli.mdc +47 -0
- package/dist/templates/cursor/rules/bonnard-queries.mdc +49 -0
- package/dist/templates/cursor/rules/bonnard.mdc +20 -0
- package/dist/templates/shared/bonnard.md +81 -0
- package/package.json +13 -8
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# syntax.references
|
|
2
|
+
|
|
3
|
+
> Reference columns, members, and other cubes in SQL expressions.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Cube provides special syntax for referencing columns, measures, dimensions, and other cubes within SQL expressions. This enables dynamic, maintainable data models.
|
|
8
|
+
|
|
9
|
+
## Reference Types
|
|
10
|
+
|
|
11
|
+
### Column References
|
|
12
|
+
|
|
13
|
+
Simple column name (no braces):
|
|
14
|
+
|
|
15
|
+
```yaml
|
|
16
|
+
dimensions:
|
|
17
|
+
- name: status
|
|
18
|
+
type: string
|
|
19
|
+
sql: status
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Member References
|
|
23
|
+
|
|
24
|
+
Reference other members in the same cube with `{member_name}`:
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
dimensions:
|
|
28
|
+
- name: first_name
|
|
29
|
+
type: string
|
|
30
|
+
sql: first_name
|
|
31
|
+
|
|
32
|
+
- name: last_name
|
|
33
|
+
type: string
|
|
34
|
+
sql: last_name
|
|
35
|
+
|
|
36
|
+
- name: full_name
|
|
37
|
+
type: string
|
|
38
|
+
sql: "CONCAT({first_name}, ' ', {last_name})"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### {CUBE} Placeholder
|
|
42
|
+
|
|
43
|
+
Reference the current cube's columns:
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
measures:
|
|
47
|
+
- name: completed_count
|
|
48
|
+
type: count
|
|
49
|
+
filters:
|
|
50
|
+
- sql: "{CUBE}.status = 'completed'"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Equivalent notations:
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
# These are equivalent
|
|
57
|
+
sql: "{CUBE}.amount"
|
|
58
|
+
sql: "{CUBE.amount}"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Cross-Cube References
|
|
62
|
+
|
|
63
|
+
Reference other cubes with `{cube_name.member}`:
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
joins:
|
|
67
|
+
- name: users
|
|
68
|
+
relationship: many_to_one
|
|
69
|
+
sql: "{CUBE}.user_id = {users.id}"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Measure References in Calculated Measures
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
measures:
|
|
76
|
+
- name: total_orders
|
|
77
|
+
type: count
|
|
78
|
+
|
|
79
|
+
- name: total_revenue
|
|
80
|
+
type: sum
|
|
81
|
+
sql: amount
|
|
82
|
+
|
|
83
|
+
- name: average_order_value
|
|
84
|
+
type: number
|
|
85
|
+
sql: "{total_revenue} / NULLIF({total_orders}, 0)"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## SQL Reuse
|
|
89
|
+
|
|
90
|
+
### {cube.sql()} Function
|
|
91
|
+
|
|
92
|
+
Reference another cube's SQL definition:
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
cubes:
|
|
96
|
+
- name: active_users
|
|
97
|
+
sql: >
|
|
98
|
+
SELECT * FROM {users.sql()}
|
|
99
|
+
WHERE is_active = true
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Time Dimension Granularities
|
|
103
|
+
|
|
104
|
+
Reference time dimensions with granularity:
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
# In pre-aggregations or calculated fields
|
|
108
|
+
sql: "{created_at.day}"
|
|
109
|
+
sql: "{created_at.month}"
|
|
110
|
+
sql: "{created_at.year}"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Join Path References
|
|
114
|
+
|
|
115
|
+
In views, specify join paths with dot notation:
|
|
116
|
+
|
|
117
|
+
```yaml
|
|
118
|
+
views:
|
|
119
|
+
- name: order_details
|
|
120
|
+
cubes:
|
|
121
|
+
# Direct cube
|
|
122
|
+
- join_path: orders
|
|
123
|
+
|
|
124
|
+
# Joined cube (orders -> users)
|
|
125
|
+
- join_path: orders.users
|
|
126
|
+
|
|
127
|
+
# Multi-hop (orders -> users -> countries)
|
|
128
|
+
- join_path: orders.users.countries
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Escaping Braces
|
|
132
|
+
|
|
133
|
+
For literal curly braces in SQL (e.g., JSON), escape with backslash:
|
|
134
|
+
|
|
135
|
+
```yaml
|
|
136
|
+
sql: "metadata->>'\{key\}'"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Common Patterns
|
|
140
|
+
|
|
141
|
+
### Safe Division
|
|
142
|
+
|
|
143
|
+
```yaml
|
|
144
|
+
- name: conversion_rate
|
|
145
|
+
type: number
|
|
146
|
+
sql: "{conversions} / NULLIF({visits}, 0)"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Conditional Logic
|
|
150
|
+
|
|
151
|
+
```yaml
|
|
152
|
+
- name: revenue_category
|
|
153
|
+
type: string
|
|
154
|
+
sql: >
|
|
155
|
+
CASE
|
|
156
|
+
WHEN {total_revenue} > 10000 THEN 'high'
|
|
157
|
+
WHEN {total_revenue} > 1000 THEN 'medium'
|
|
158
|
+
ELSE 'low'
|
|
159
|
+
END
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Cross-Cube Calculations
|
|
163
|
+
|
|
164
|
+
```yaml
|
|
165
|
+
- name: orders_per_user
|
|
166
|
+
type: number
|
|
167
|
+
sql: "{orders.count} / NULLIF({users.count}, 0)"
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## See Also
|
|
171
|
+
|
|
172
|
+
- syntax
|
|
173
|
+
- cubes.measures.calculated
|
|
174
|
+
- cubes.joins
|
|
175
|
+
|
|
176
|
+
## More Information
|
|
177
|
+
|
|
178
|
+
https://cube.dev/docs/product/data-modeling/syntax#references
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# views.cubes
|
|
2
|
+
|
|
3
|
+
> Select which cubes and members to expose in a view.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The `cubes` property defines which cubes are combined in a view and which of their members (measures, dimensions, segments) are exposed. This is the core mechanism for building focused analytical interfaces.
|
|
8
|
+
|
|
9
|
+
## Example
|
|
10
|
+
|
|
11
|
+
```yaml
|
|
12
|
+
views:
|
|
13
|
+
- name: orders_overview
|
|
14
|
+
cubes:
|
|
15
|
+
- join_path: orders
|
|
16
|
+
includes:
|
|
17
|
+
- count
|
|
18
|
+
- total_revenue
|
|
19
|
+
- status
|
|
20
|
+
- created_at
|
|
21
|
+
|
|
22
|
+
- join_path: orders.users
|
|
23
|
+
includes:
|
|
24
|
+
- name
|
|
25
|
+
- email
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Properties
|
|
29
|
+
|
|
30
|
+
### join_path (required)
|
|
31
|
+
|
|
32
|
+
Specifies which cube to include and how to reach it via joins:
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
cubes:
|
|
36
|
+
# Direct cube reference
|
|
37
|
+
- join_path: orders
|
|
38
|
+
|
|
39
|
+
# Joined cube (orders -> users)
|
|
40
|
+
- join_path: orders.users
|
|
41
|
+
|
|
42
|
+
# Multi-hop join (orders -> users -> countries)
|
|
43
|
+
- join_path: orders.users.countries
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### includes
|
|
47
|
+
|
|
48
|
+
List specific members to expose:
|
|
49
|
+
|
|
50
|
+
```yaml
|
|
51
|
+
- join_path: orders
|
|
52
|
+
includes:
|
|
53
|
+
- count # measure
|
|
54
|
+
- total_revenue # measure
|
|
55
|
+
- status # dimension
|
|
56
|
+
- created_at # dimension
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Include all members with `"*"`:
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
- join_path: orders
|
|
63
|
+
includes: "*"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### excludes
|
|
67
|
+
|
|
68
|
+
Remove specific members when using `includes: "*"`:
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
- join_path: orders
|
|
72
|
+
includes: "*"
|
|
73
|
+
excludes:
|
|
74
|
+
- internal_notes
|
|
75
|
+
- debug_flag
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### prefix
|
|
79
|
+
|
|
80
|
+
Add cube name prefix to avoid naming collisions:
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
- join_path: orders
|
|
84
|
+
prefix: true
|
|
85
|
+
includes:
|
|
86
|
+
- count # Becomes "orders_count" in the view
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Member Customization
|
|
90
|
+
|
|
91
|
+
Override member properties when including:
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
- join_path: orders
|
|
95
|
+
includes:
|
|
96
|
+
- name: count
|
|
97
|
+
alias: order_count
|
|
98
|
+
title: "Total Orders"
|
|
99
|
+
description: "Number of orders placed"
|
|
100
|
+
|
|
101
|
+
- name: total_revenue
|
|
102
|
+
alias: revenue
|
|
103
|
+
format: currency
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Customization Options
|
|
107
|
+
|
|
108
|
+
| Option | Description |
|
|
109
|
+
|--------|-------------|
|
|
110
|
+
| `alias` | Rename the member in this view |
|
|
111
|
+
| `title` | Override display name |
|
|
112
|
+
| `description` | Override description |
|
|
113
|
+
| `format` | Override data format |
|
|
114
|
+
| `meta` | Override metadata |
|
|
115
|
+
|
|
116
|
+
## Common Patterns
|
|
117
|
+
|
|
118
|
+
### Focused Dashboard View
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
views:
|
|
122
|
+
- name: sales_dashboard
|
|
123
|
+
cubes:
|
|
124
|
+
- join_path: orders
|
|
125
|
+
includes:
|
|
126
|
+
- count
|
|
127
|
+
- total_revenue
|
|
128
|
+
- average_order_value
|
|
129
|
+
- created_at
|
|
130
|
+
|
|
131
|
+
- join_path: orders.products
|
|
132
|
+
includes:
|
|
133
|
+
- name: name
|
|
134
|
+
alias: product_name
|
|
135
|
+
- category
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Multi-Cube Aggregation
|
|
139
|
+
|
|
140
|
+
```yaml
|
|
141
|
+
views:
|
|
142
|
+
- name: customer_360
|
|
143
|
+
cubes:
|
|
144
|
+
- join_path: users
|
|
145
|
+
includes: "*"
|
|
146
|
+
excludes: [password_hash, api_key]
|
|
147
|
+
|
|
148
|
+
- join_path: users.orders
|
|
149
|
+
includes:
|
|
150
|
+
- count
|
|
151
|
+
- total_revenue
|
|
152
|
+
|
|
153
|
+
- join_path: users.support_tickets
|
|
154
|
+
includes:
|
|
155
|
+
- count
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## See Also
|
|
159
|
+
|
|
160
|
+
- views
|
|
161
|
+
- views.includes
|
|
162
|
+
- cubes.joins
|
|
163
|
+
|
|
164
|
+
## More Information
|
|
165
|
+
|
|
166
|
+
https://cube.dev/docs/reference/data-model/view#cubes
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# views.folders
|
|
2
|
+
|
|
3
|
+
> Organize view members into logical groups.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Folders organize view members into logical categories, making large views easier to navigate. They appear as hierarchical groupings in BI tools and the Cube Playground.
|
|
8
|
+
|
|
9
|
+
## Example
|
|
10
|
+
|
|
11
|
+
```yaml
|
|
12
|
+
views:
|
|
13
|
+
- name: sales_analytics
|
|
14
|
+
cubes:
|
|
15
|
+
- join_path: orders
|
|
16
|
+
includes: "*"
|
|
17
|
+
|
|
18
|
+
folders:
|
|
19
|
+
- name: Revenue Metrics
|
|
20
|
+
members:
|
|
21
|
+
- total_revenue
|
|
22
|
+
- average_order_value
|
|
23
|
+
- revenue_growth
|
|
24
|
+
|
|
25
|
+
- name: Volume Metrics
|
|
26
|
+
members:
|
|
27
|
+
- count
|
|
28
|
+
- items_sold
|
|
29
|
+
|
|
30
|
+
- name: Time
|
|
31
|
+
members:
|
|
32
|
+
- created_at
|
|
33
|
+
- shipped_at
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Syntax
|
|
37
|
+
|
|
38
|
+
### Basic Folder
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
folders:
|
|
42
|
+
- name: "Folder Name"
|
|
43
|
+
members:
|
|
44
|
+
- member_one
|
|
45
|
+
- member_two
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Nested Folders
|
|
49
|
+
|
|
50
|
+
```yaml
|
|
51
|
+
folders:
|
|
52
|
+
- name: Metrics
|
|
53
|
+
folders:
|
|
54
|
+
- name: Revenue
|
|
55
|
+
members:
|
|
56
|
+
- total_revenue
|
|
57
|
+
- net_revenue
|
|
58
|
+
|
|
59
|
+
- name: Volume
|
|
60
|
+
members:
|
|
61
|
+
- count
|
|
62
|
+
- quantity
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Properties
|
|
66
|
+
|
|
67
|
+
| Property | Description |
|
|
68
|
+
|----------|-------------|
|
|
69
|
+
| `name` | Display name for the folder |
|
|
70
|
+
| `members` | List of member names to include |
|
|
71
|
+
| `folders` | Nested sub-folders |
|
|
72
|
+
|
|
73
|
+
## Common Patterns
|
|
74
|
+
|
|
75
|
+
### By Data Type
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
folders:
|
|
79
|
+
- name: Measures
|
|
80
|
+
members:
|
|
81
|
+
- count
|
|
82
|
+
- total_revenue
|
|
83
|
+
- average_order_value
|
|
84
|
+
|
|
85
|
+
- name: Dimensions
|
|
86
|
+
members:
|
|
87
|
+
- status
|
|
88
|
+
- category
|
|
89
|
+
- region
|
|
90
|
+
|
|
91
|
+
- name: Time
|
|
92
|
+
members:
|
|
93
|
+
- created_at
|
|
94
|
+
- updated_at
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### By Business Domain
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
folders:
|
|
101
|
+
- name: Customer Info
|
|
102
|
+
members:
|
|
103
|
+
- customer_name
|
|
104
|
+
- customer_email
|
|
105
|
+
- customer_segment
|
|
106
|
+
|
|
107
|
+
- name: Order Details
|
|
108
|
+
members:
|
|
109
|
+
- order_status
|
|
110
|
+
- order_total
|
|
111
|
+
- items_count
|
|
112
|
+
|
|
113
|
+
- name: Shipping
|
|
114
|
+
members:
|
|
115
|
+
- shipped_at
|
|
116
|
+
- delivery_status
|
|
117
|
+
- shipping_cost
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### By Analysis Type
|
|
121
|
+
|
|
122
|
+
```yaml
|
|
123
|
+
folders:
|
|
124
|
+
- name: KPIs
|
|
125
|
+
members:
|
|
126
|
+
- total_revenue
|
|
127
|
+
- order_count
|
|
128
|
+
- conversion_rate
|
|
129
|
+
|
|
130
|
+
- name: Trends
|
|
131
|
+
members:
|
|
132
|
+
- created_at
|
|
133
|
+
- revenue_growth
|
|
134
|
+
- yoy_change
|
|
135
|
+
|
|
136
|
+
- name: Breakdowns
|
|
137
|
+
members:
|
|
138
|
+
- category
|
|
139
|
+
- region
|
|
140
|
+
- channel
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Best Practices
|
|
144
|
+
|
|
145
|
+
1. **Keep folders shallow** — avoid deep nesting
|
|
146
|
+
2. **Use clear names** — business-friendly labels
|
|
147
|
+
3. **Group logically** — related members together
|
|
148
|
+
4. **Limit folder count** — 3-7 folders per view
|
|
149
|
+
|
|
150
|
+
## See Also
|
|
151
|
+
|
|
152
|
+
- views
|
|
153
|
+
- views.cubes
|
|
154
|
+
- views.includes
|
|
155
|
+
|
|
156
|
+
## More Information
|
|
157
|
+
|
|
158
|
+
https://cube.dev/docs/reference/data-model/view#folders
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# views.includes
|
|
2
|
+
|
|
3
|
+
> Control which cube members appear in a view.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The `includes` and `excludes` properties control which measures, dimensions, and segments from a cube are exposed in a view. This enables creating focused interfaces that show only relevant data.
|
|
8
|
+
|
|
9
|
+
## Basic Syntax
|
|
10
|
+
|
|
11
|
+
### Include Specific Members
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
- join_path: orders
|
|
15
|
+
includes:
|
|
16
|
+
- count
|
|
17
|
+
- total_revenue
|
|
18
|
+
- status
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Include All Members
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
- join_path: orders
|
|
25
|
+
includes: "*"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Exclude Specific Members
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
- join_path: orders
|
|
32
|
+
includes: "*"
|
|
33
|
+
excludes:
|
|
34
|
+
- internal_id
|
|
35
|
+
- debug_flag
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Member Types
|
|
39
|
+
|
|
40
|
+
All cube member types can be included:
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
- join_path: orders
|
|
44
|
+
includes:
|
|
45
|
+
# Measures
|
|
46
|
+
- count
|
|
47
|
+
- total_revenue
|
|
48
|
+
- average_order_value
|
|
49
|
+
|
|
50
|
+
# Dimensions
|
|
51
|
+
- status
|
|
52
|
+
- created_at
|
|
53
|
+
- customer_email
|
|
54
|
+
|
|
55
|
+
# Segments
|
|
56
|
+
- completed
|
|
57
|
+
- high_value
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Renaming with Alias
|
|
61
|
+
|
|
62
|
+
Rename members to avoid collisions or improve clarity:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
- join_path: orders
|
|
66
|
+
includes:
|
|
67
|
+
- name: count
|
|
68
|
+
alias: order_count
|
|
69
|
+
|
|
70
|
+
- name: created_at
|
|
71
|
+
alias: order_date
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Prefix Mode
|
|
75
|
+
|
|
76
|
+
Automatically prefix all members with cube name:
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
- join_path: orders
|
|
80
|
+
prefix: true
|
|
81
|
+
includes: "*"
|
|
82
|
+
# count -> orders_count
|
|
83
|
+
# status -> orders_status
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Custom prefix:
|
|
87
|
+
|
|
88
|
+
```yaml
|
|
89
|
+
- join_path: orders
|
|
90
|
+
prefix: true
|
|
91
|
+
includes:
|
|
92
|
+
- name: count
|
|
93
|
+
alias: total_orders # Override automatic prefix
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Combining Multiple Cubes
|
|
97
|
+
|
|
98
|
+
When including the same member name from multiple cubes, use aliases:
|
|
99
|
+
|
|
100
|
+
```yaml
|
|
101
|
+
views:
|
|
102
|
+
- name: combined_metrics
|
|
103
|
+
cubes:
|
|
104
|
+
- join_path: orders
|
|
105
|
+
includes:
|
|
106
|
+
- name: count
|
|
107
|
+
alias: order_count
|
|
108
|
+
|
|
109
|
+
- join_path: users
|
|
110
|
+
includes:
|
|
111
|
+
- name: count
|
|
112
|
+
alias: user_count
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Wildcard Patterns
|
|
116
|
+
|
|
117
|
+
Use `"*"` to include all, then exclude what you don't need:
|
|
118
|
+
|
|
119
|
+
```yaml
|
|
120
|
+
- join_path: users
|
|
121
|
+
includes: "*"
|
|
122
|
+
excludes:
|
|
123
|
+
- password_hash
|
|
124
|
+
- api_secret
|
|
125
|
+
- internal_notes
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Best Practices
|
|
129
|
+
|
|
130
|
+
1. **Be explicit** — list specific members rather than using `"*"` in production
|
|
131
|
+
2. **Use aliases** — make member names clear and consistent
|
|
132
|
+
3. **Exclude sensitive data** — never expose passwords, keys, or PII
|
|
133
|
+
4. **Document with descriptions** — override descriptions for clarity
|
|
134
|
+
|
|
135
|
+
## See Also
|
|
136
|
+
|
|
137
|
+
- views
|
|
138
|
+
- views.cubes
|
|
139
|
+
- views.folders
|
|
140
|
+
|
|
141
|
+
## More Information
|
|
142
|
+
|
|
143
|
+
https://cube.dev/docs/reference/data-model/view#includes
|