应用场景
#
在图形开发中,我们可能需要使用js对传递过来的数据进行处理
图形中可用转化函数
#
数据集转化
#
函数名 |
函数说明 |
样列 |
ds_transform(dataset) |
行列转置 |
|
ds_createMap(dataset) |
将数组生成结果表示为key->[], 常用于echarts指定数据 |
|
ds_createMap_all(dataset) |
将二维数组转成字典[{A:A1,B:B1,C:C1},…], 常用于饼图 |
|
ds_mapToList(dataset) |
将字典还原成二维数组, 常用于将nosql(mongodb,es..)数据源数据处理 |
|
ds_pivot(dataset) |
将二维数组(维度,维度,值)的第二列的维度透视为行 |
|
ds_distinct(dataset) |
对单个或多个二维数组去重 |
|
ds_filter(dataset, fun) |
fun为函数如: item=>item[0]==‘顺德’ |
|
ds_sort(dataset, index=0, asc=true) |
按照列序号排序,默认升序,index参数可以是函数,如(a,b)=>a.qty-b.qty |
|
ds_remove_column(dataset,remove_list=[0]) |
默认移除第一列, 也要移除指定的多个列 |
|
ds_split(data,sep=’,’,head_add=[]) |
将第一列拆分成多个字段,默认逗号分隔, 如果不传表头,取SQL中的字段名拆分 |
|
数据集关联
#
函数名 |
函数说明 |
样列 |
ds_leftjoin(a,b) |
按照第一列左关联两个数据集 |
|
ds_crossjoin(a,b) |
|
|
ds_fulljoin(a,b) |
|
|
ds_union(a,b) |
合并两个数据集,取第一个数据集的表头 |
|
数据集刷新
#
函数名 |
函数说明 |
样列 |
ds_param(name) |
传入参数名,获取图形点击时传递来的参数值 |
|
ds_setParam(‘参数名’, 参数值) |
设定全局参数, 此方法将自动判断当参数值为空时, 删除参数回到初始未传参状态 |
|
ds_refresh(序号, param=filter_param) |
刷新图形,默认采取全局参数刷新,也可指定param,参数为字典{“参数名”:“值”,…} |
|
数据处理
#
函数名 |
函数说明 |
样列 |
ds_rowname(dataset,start_row=1,column=0) |
获取指定列的数据, 常用于获取维度 |
|
ds_toThousands(num) |
转逗号分隔的千分位 |
|
ds_round(num,qty=2) |
小数点处理, 默认保留两位小数 |
|
Excel数据集
#
函数名 |
函数说明 |
样列 |
ds_excel_refresh(dataset) |
刷新复杂报表, dataset格式:{df0:二维数组, df1:二维数组,..} |
|
ds_excel_value(fillCells,clear=false) |
指定单元格获取复杂报表中的数据, fillcells格式:[‘A1’,‘B2’],一般用于数据填报 |
|
数据上传下载
#
函数名 |
函数说明 |
样列 |
ds_save(序号, contents) |
保存数据 |
|
ds_download(文件名, dataset) |
下载数据 |
|
ds_uploadfile(file, filename, callback=null) |
上传文件 |
|
常用JS原生函数
#
//数组追加
dataset.push(item)
//数组前方插入
dataset.unshit(item)
//切片
dataset = dataset.slice(1) //从序号1个开始到最最后一个
dataset = dataset.slice(5, 10) //从第序号5开始截取到第10个
dataset = dataset.slice(-3) //截取最后三个元素
//循环遍历
//for最快,但可读性比较差(smartchart推荐)
//forEach比较快,能够控制内容
//for...in比较慢,不方便
for(let i=0; i<dataset.length; i++){
}
原始数据格式
#
假设dataset的格式是, SQL = Select 维度1,维度2,数据 from xxxx, 生成的数据集如下
dataset = [['category','C1','C2'],
['R1', 12, 18],
['R2', 10, 17] ]
常用转化函数样列参考
#
生成字典表示为key->[], 常用于定制化高的图形
#
result = ds_createMap(dataset)
结果 = {"category":['C1','C2'],
"R1" : [12, 10],
"R2" : [18, 17]}
生成非常多前端组件要求的格式
#
result = ds_createMap_all(dataset)
结果 = [{"category":"R1", "C1": 12, "C2": 18},
{"category":"R2", "C1": 10, "C2": 17}]
获取列名list, 用于获取系列名
#
result = ds_rowname(dataset)
结果 = ['R1','R2']
将数据集行列转化, 一般用于坐标轴翻转
#
result = ds_transform(dataset)
结果 = [['category','R1','R2'],
['C1', 12, 10],
['C2', 18, 17]]
两个数据集左关联, 常用于将两段查询数据合并
#
//假设需要关联的数据集格式:
dataset2 = [['category','C3'],
['R1', 38],
['R6', 13]]
//处理后的结果:
result = ds_leftjoin(dataset, dataset2)
结果 = [['category','C1','C2','C3'],
['R1', 12, 18, 38],
['R2', 10, 17, 0] ]
数据集旋转,在excel中叫透视表
#
//比如需要将dataset3的户型变成指标
dataset3 = [['城市','户型','数量'],
['长沙','A',35],
['上海','B',19]]
//处理后的结果:
result = ds_pivot(dataset3)
结果 = [["城市","A","B"],
["长沙",35,0],
["上海",0,19]]
移除数据集中的某几列
#
//比如移除第1列(序号0)
result=ds_remove_column(dataset,remove_list=[0])
结果 = [['R1','R2'],
[12, 10],
[18, 17] ]
其它方法
#
多维度的数据透视
#
常规数据集中提到 A类数据源的情况, 格式都是:
维度A 维度B 数据
但还有情况比如你有一个数据格式是:
维度A 维度B 维度C 数据
你需要在表格中将 A,B维度做维度, 但C做透视为指标名进行展示
由于我们的数据透视只支持"字符, 字符, 数值"的SQL写法,
所以如果要多维, 我们需要做下转变, 可以写成:
select concat_ws(',',维度A,维度B) AS 维度,维度C,SUM(数据) AS 度量
from tablename group by 维度, 维度C
得到的数据样式
dataset=[['维度','C1','C2'....]
,['A1,B1',1,1...]
,['A2,B2',2,2...]]
最终在图形数据集处理中, 我们可以使用如下函数进行转化:
dataset = ds_split(dataset,',',['维度A','维度B'])
',' : 参数为分隔符
['维度A','维度B'] : 指第一个字段需要拆分的表头名称
最终得到的数据就是多维度透视
[['维度A','维度B','C1','C2'....]
,['A1','B1',1,1...]
,['A2','B2',2,2...]]