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

posted on 2021-01-29 21:46  荣锋亮  阅读(181)  评论(0编辑  收藏  举报

导航