cube.js dimensions 的一些说明
部分参数
- show
控制维度的可见性
dimensions: {
comment: {
type: `string`,
sql: `comments`,
shown: false
}
}
- case
进行case 的支持
cube("caseapp",{
sql: `select * from demoapp`,
measures:{
type_count:{
sql:`type`,
type:`count`
},
name_count:{
sql:`name`,
type:`count`
}
},
dimensions:{
type:{
sql:`type`,
type:`string`
},
myversioninfo: {
type: `string`,
case: {
when: [
{ sql: `${CUBE}.type = 'v1'`, label: `old` },
{ sql: `${CUBE}.type = 'v2'`, label: `not old` },
{ sql: `${CUBE}.type = 'v4'`, label: `new` }
],
else: { label: `Unknown` }
}
},
name:{
sql:`name`,
type:`string`
},
id:{
sql:`id`,
type:`number`,
primaryKey:true
}
}
})
参考生成的sql
SELECT
"caseapp".type "caseapp__type",
CASE
WHEN "caseapp".type = 'v1' THEN 'old'
WHEN "caseapp".type = 'v2' THEN 'not old'
WHEN "caseapp".type = 'v4' THEN 'new'
ELSE 'Unknown'
END "caseapp__myversioninfo",
count("caseapp".type) "caseapp__type_count"
FROM
demoapp AS "caseapp"
GROUP BY
1,
2
ORDER BY
3 DESC
LIMIT
10000
- primaryKey
主键配置,在进行joins 处理的时候很重要
dimensions: {
id: {
sql: `id`,
type: `number`,
primaryKey: true
}
}
- subQuery
可以方便的引用measure 在dimensions中 - propagateFiltersToSubQuery
可以过滤条件应用到子查询中
dimensions: {
usersCount: {
sql: `${Users.count}`,
type: `number`,
subQuery: true,
propagateFiltersToSubQuery: true
}
}
说明
subQuery 还是比较强大的,但是也有一些问题,比如目前能使用subQuery 的都必须是定义好的measure
同时不支持复杂的处理
cube(`Deals`, {
sql: `select * from deals`,
measures: {
amount: {
sql: `amount`,
type: `sum`
}
}
});
cube(`SalesManagers`, {
// ...
dimensions: {
// ...
dealsAmount: {
sql: `sum(${Deals}.amount)`, // !!! Doesn't work!
type: `number`,
subQuery: true
}
}
});
同时subQuery定义的维度也可以在measures中引用
同时subQuery实现是基于join的(join 使用left join)所以需要配置主键,不然会有错误提示
同一个cube 中subQuery定义的维度不能引用measures(这个是目前的一个约定,可能后期会变动)
说明
cube.js 目前的官方文档,好多地方还不是很清晰(有一些隐藏点,目前还好看到有专门的人员在进行更新)
参考资料
https://cube.dev/docs/dimensions
https://cube.dev/docs/subquery