在 echart 等业务场景下, 查询N天的数据时, 希望返回一天一行, 一共N行数据.
但是从数据库 group by 出来的数据可能不够7行, 需要将没有数据的日期填充进来.
说明
处理前的数据
select date, sum(v) as v from [{date:'2021-12-03',v:3},{date:'2021-12-06',v:6}] group by date
date | v |
---|---|
2021-12-03 | 3 |
2021-12-06 | 3 |
处理方法
直接使用 fill 语句补全数据.
-- 查询数据库
select date, sum(v) as v from [{date:'2021-12-03',v:3},{date:'2021-12-06',v:6}] group by date;
-- 补全
fill(t('',yyyy-MM-dd,2021-12-01~2021-12-07,DAY), 'a, v, x', 0);
处理结果
date | v |
---|---|
2021-12-01 | |
2021-12-02 | |
2021-12-03 | 3 |
2021-12-04 | |
2021-12-05 | |
2021-12-06 | 6 |
2021-12-07 |
fill 函数介绍
fill(dimensionConf, measure, measureDefaultsValue);
- dimension
dimensionConf 维度列表,待补充的维度名的及其配置的集合(fill和valueKey的总合应该恰好等于list中的map的size)
measure (可选)待补充的度量列表,如果有多个值逗号隔开,不填则填充所有非维度字段
measureDefaultsValue (可选)度量value被补充的默认值。(常用值: null, 0, ‘’, rand())
- 数据对齐参数 dimensionConf
可以用逗号分开声明多个 dimension 的值域,每个 dimension 的值域由一个函数来描述,函数格式如下:
格式:dimension(paramKey, fillType, fillScope, keyInterval)
例如:id(id,int),field,t(t,yyyy-MM-dd, 2021-12-01~2021-12-31, WEEK)
dimension = sourceData中数据的一个dimension
paramKey = (可选) 如果fillScope为空, 则从 fillMap中获取param对应的值作为fillScope
fillType = (可选) sourceData中此key的补全方式 正在操作的字段类型(str=默认值,使用String格式 / null=以valueScope为准 / values=以已有数据为准忽略valueScope / int=以int格式valueScope为准 / yyyy-MM-dd=以date格式valueScope为准 / scope=以int / date格式valueScope为准)
fillScope = (可选) sourceData中此key的补全范围(常用格式: ‘1~10’, ‘2021-12-01~2021-12-31’, ‘甲,乙,丙,丁’)
keyInterval = (可选) 数据步长,一般是: 1, 1DAY, 1MONTH, 1YEAR 等值