cube('users_with_organizations', {
sql: `
WITH users AS (
SELECT
md5(company) AS organization_id,
id AS user_id,
created_at
FROM public.users
),
organizations AS (
(
SELECT
md5(company) AS id,
company AS name,
MIN(created_at)
FROM
public.users
GROUP BY
1,
2
)
)
SELECT
users.*,
organizations.name AS org_name
FROM
users
LEFT JOIN organizations
ON users.organization_id = organizations.id
`,
pre_aggregations: {
main: {
dimensions: [CUBE.id, CUBE.organization_id]
time_dimension: CUBE.created_at,
refresh_key: {
every: `1 day`,
incremental: true
},
granularity: `day`,
partition_granularity: `month`,
build_range_start: { sql: `SELECT DATE('2021-01-01')` },
build_range_end: { sql: `SELECT NOW()` }
}
},
dimensions: {
id: {
sql: `user_id`,
type: `number`
primary_key: true
},
organization_id: {
sql: `organization_id`,
type: `string`
},
created_at: {
sql: `created_at`,
type: `time`
}
}
})