关于扩展数据集过滤条件的想法
@yzhang921 我面临这样的场景
数据仓库中有拉链表的应用,如这样: 数据仓库之拉链表
数据集就需要设计成能够支持查询某天的快照,以查询 2018-05-02 为例, sql 类似这样:
select * from user where t_start_date <= ‘2018-05-02’ and t_end_date >= ‘2018-05-02’
但我们的 cboard 就不知道怎么支持了
==============
参考过 redash、 metabase 中,关于过滤条件的玩法,他们大致都是这样:
select * from user where t_start_date <= {snapshot_date} and t_end_date >= {snapshot_date}
-
metabase

-
redash

把 snapshot_date 通过占位符的方式当成过滤条件。
如果我们 cboard 要这样设计可不可行呢? 如果可行大致该怎么实施呢?
是要在数据集加载之前就把过滤条件动态加上, 然后图表设计的时候不允许改变了是吗
是的🤝
@yzhang921
刚刚好好研究了下你的设计,我想你应该是最开始就已经预留了这种方案的扩展,是么?
你可以参考下用户id变量替换的方案
我想从数据集入手,扩展 query。
我看到目前的数据集的定义中就有 query 属性,里面目前只有 sql; 所以我想这样扩展。
JDBC 的场景这样:
{
"query": {
"sql": "select * from test [[where name={{name}} ]]",
"params": [
{
"name": "name",
"type": "string"
}
]
}
}
后端扩展一个解析出该内容 ( [[where name={{name}}]] ) 的接口,解析出变量 name 出来,这也是参考 metabase 的方式,考虑到 elasticsearch 等不能用 {{name}} 的方式所以用后端方式,由每个数据源自己定义解析方式。
而后每个数据集的参数,需要一个默认的 value;
图表、面板中可以自定义 value, 这样带来的问题是,当经常变更 value 时,会有很多数据集,如果数据量大的情况下,会显得很慢
我也有类似的需求,数据集定义的时候希望用占位符替换看板设计中配置的日期值,主要考虑是缩小数据集,加快查询速度。据我了解目前 cboard 看板中配置日期过滤的话只能应用在聚合语句外(cb_view外),如
SELECT xx ,COUNT(distinct(USERID)) FROM ( SELECT USERID,DT_DATE,xx FROM V_DAY WHERE xx IN (1,2,3) -- 考虑把下面外层的 DT_DATE 条件移到这里减小数据集, -- 比如 where DT_DATE between {{start_date}} and {{end_date}} ) cb_view WHERE (DT_DATE>='2018-05-02' AND DT_DATE<='2018-05-08') GROUP BY xx
是否可以借鉴你的思路? @chenlingmin
@fanslin
但得考虑到他支持多数据源的设计,例如 elasticsearch 中,如果使用 {{start_date}} 就完了。
还有就是这些占位的参数,怎么设计,页面怎么布局等,我都没想好,你可以想想
@chenlingmin 我不太明白数据聚合 cb_view 的目的,如果数据集里定义的语句能一次性出结果为什么外面还要再嵌套一层聚合查询
cb_view 只是一个别名而已。
例如这个,如果不用子查询,怎么去获取结果?

在创建数据集的时候,带有系统参数地对数据集过滤有解决办法了吗?