📘 Cube.js Concepts Summary
| Term |
Definition |
Example |
| Cube |
A logical model built on top of a database table or query. Each cube defines dimensions, measures, and joins. |
cube('Orders', { sql: 'SELECT * FROM orders' }) |
| Measure |
A numeric value that can be aggregated (like sum, count, avg, etc.). |
type: 'sum', sql: 'amount' |
| Dimension |
A categorical field used to slice or group measures. |
type: 'string', sql: 'status' |
| Time Dimension |
A special dimension for date/time fields, used in filtering and pre-aggregation. |
type: 'time', sql: 'created_at' |
| Pre-aggregation |
A pre-computed summary table for faster query performance. |
type: 'rollup', measures: ['Orders.totalAmount'], granularity: 'day' |
| Granularity |
The level of time detail used in a pre-aggregation (day, month, week, etc.). |
granularity: 'month' |
| Rollup |
A type of pre-aggregation that summarizes data by selected measures and dimensions. |
type: 'rollup' with measures and dimensions |
| Refresh Key |
Tells Cube.js how often to refresh the pre-aggregated data. |
refreshKey: { every: '1 hour' } |
| Filter (in measure) |
Adds a condition to apply only to that measure. |
filters: [ { sql: 'status = \'completed\'' } ] |
| Join |
Allows combining data from multiple cubes (tables) based on a key relationship. |
joins: { Products: { relationship: 'belongsTo', sql: ... } } |
| Segment |
A reusable filter condition defined in a cube for convenience. |
segments: { completedOrders: { sql: 'status = \'completed\'' } } |
🧠Example Breakdown
measures: {
totalSales: {
sql: 'amount',
type: 'sum'
}
},
dimensions: {
status: {
sql: 'status',
type: 'string'
},
createdAt: {
sql: 'created_at',
type: 'time'
}
},
preAggregations: {
dailySales: {
type: 'rollup',
measures: ['totalSales'],
dimensions: ['status'],
timeDimension: 'createdAt',
granularity: 'day'
}
}
| Component |
What It Means |
totalSales |
A measure: sum of amount |
status |
A dimension: used to group sales |
createdAt |
A time dimension: date when sale was created |
dailySales |
A pre-aggregation (rollup): daily summary of sales by status |
Written by A.M. Rinas