图形端数据函数

### 应用场景 #

在图形开发中，我们可能需要使用js对传递过来的数据进行处理

### 原始数据格式 #

假设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] ]

### 图形中可用转化函数 #

函数名 | 函数说明 | 样列
--- | --- | ---
ds_transform(dataset) | 行列替换 |
ds_split(data,sep=’,’,head_add=[]) | 将第一列拆分成多个字段,默认逗号分隔, 如果不传表头,取SQL中的字段名拆分 |
ds_createMap(data) | data表示传入的二位数组,生成结果表示为key->[], 常用于echarts指定数据 |
ds_createMap_all(data) | data表示传入的二维数组,生成结果表示为[{A:A1,B:B1,C:C1},{A:A2,B:B2,C:C2}…] |
ds_mapToList(data) | 将createMap_all的格式还原成二维数组, 常用于将nosql(mongodb,es..)数据源数据处理 |
ds_rowname(dataset,start_row=1,column=0) | 获取指定列的数据, 默认取第一列从第二行(序号1)开始的数据,常用于获取维度 |
ds_remove_column(dataset,remove_list=[0]) | 默认移除第一列, 也要移除指定的多个列 |
ds_toThousands(num) | 转逗号分隔的千分位 |
ds_distinct(a, b=[]) | 对单个或多个二维数组去重 |
ds_leftjoin(a,b,withhead=true,type=1) | 两个数组join [[1,2,3,4],[2,3,4,5]] ,[[2,3,4]], 如果带头,合并头 |
ds_crossjoin(a,b,withhead=true) |  |
ds_fulljoin(a,b,withhead=true) |  |
ds_union(a,b,withhead=true) | 合并两个数据集, 可选是否带头, 取第一个数据集的头, 去除第二个头 |
ds_pivot(arr) | 传入二维数组(维度, 维度, 值), 将第二列的维度转为列 |
ds_sort(arr, index=0, asc=true) | 指定二维数组列序号排序,默认升序,index参数也可以是函数,如(a,b)=>{return a.qty - b.qty} |
ds_round(num,qty=2) | 小数点处理, 默认保留两位小数 |
ds_param(name) | 传入参数名,获取图形点击时传递来的参数值 |
ds_setParam(‘参数名’, 参数值) | 设定全局参数, 此方法将自动判断当参数值为空时, 删除参数回到初始未传参状态 |
ds_refresh(id, param=filter_param) | 刷新图形, id为图形序号,默认采取全局参数刷新,也可指定param,参数为字典{“参数名”:“值”,…} |
ds_excel_refresh(dataset) | 刷新复杂报表, dataset格式:{df0:二维数组, df1:二维数组,..} |
ds_excel_value(fillCells,clear=false) | 指定单元格获取复杂报表中的数据, fillcells格式:[‘A1’,‘B2’],一般用于数据填报 |

### 常用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++){

    }

### 其它方法 #

#### 多维度的数据透视 #

    常规数据集中提到 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...]]