关于省市县在同一个字段内的分组问题
常规分组报表
对于分组报表,经常遇到的就是省市县在不同的字段内的表结构。
这样的结构,在做分组报表的时候,是非常简单的,直接对所属的不同字段执行 group 函数即可。
如下图所示:
特殊结构
但是也往往会有一些特殊结构的表
比如下图所示的这种
省市县乡村 都在一个字段内存着。
每个村有自己独立的 id。pid 与其上级目录的 id 关联。pids 内则是从上到下的层级关联。
这样的表结构,在做分组报表的时候,首要考虑的就是如何把各层级区分开的问题。
主要区分点就是 pid 和 id 间的关联了。
分组函数,必然要使用的是 ds.group()
由于是同一个字段,需要用的是 [email protected]()
函数说明
根据分组表达式,从数据集中选出一组组集。
根据分组表达式,从数据集中选出一组组集。
datasetName.group(<selectExp:order1>{,filterExp};;{ groupSortExp }:{ groupOrderExp }) //适用于不需要排序或数据集中已排好序。此函数是下面的优化写法,分组字段和排序字段通常是同一个。 datasetName.group(<selectExp>{,filter_exp};{sort1}{:order1},…;{ groupSortExp }:{ groupOrderExp }) 参数说明: selectExp 选出的分组表达式,可以是字段列名/列号,也可以是表达式。 列号用#n表示,例如#0代表第0列,#1代表第1列,依此类推 filterExp 过滤表达式 sort1 分组前记录的排序依据表达式 order1 分组前记录的排序顺序,省略为不排序,>0升序,<0降序;order1,..,ordern省略时升序 groupSortExp 分组后对组的排序表达式,一般是汇总运算的表达式,如组合计等 groupOrderExp 组排序顺序,>0升序,<0降序 返回值: 一组数据的集合,数据类型由selectExp的运算结果来决定 选项: @r 是否为根数据集表达式
datasetName.group(<selectExp:order1>{,filterExp};;{ groupSortExp }:{ groupOrderExp }) //适用于不需要排序或数据集中已排好序。此函数是下面的优化写法,分组字段和排序字段通常是同一个。 datasetName.group(<selectExp>{,filter_exp};{sort1}{:order1},…;{ groupSortExp }:{ groupOrderExp }) 参数说明: selectExp 选出的分组表达式,可以是字段列名/列号,也可以是表达式。 列号用#n表示,例如#0代表第0列,#1代表第1列,依此类推 filterExp 过滤表达式 sort1 分组前记录的排序依据表达式 order1 分组前记录的排序顺序,省略为不排序,>0升序,<0降序;order1,..,ordern省略时升序 groupSortExp 分组后对组的排序表达式,一般是汇总运算的表达式,如组合计等 groupOrderExp 组排序顺序,>0升序,<0降序 返回值: 一组数据的集合,数据类型由selectExp的运算结果来决定 选项: @r 是否为根数据集表达式
具体实现
如下图所示:
省份的非常简单,直接 =ds2.group(id,pid==0) 即可 显示值表达式为: ds2.select(name,id==value())
市的写法为 [email protected](id,pid==A4;id:1) 根据 pid 做关联。
县镇村的写法类似,关联单元格为上级单元格即可。
显示值写法一样,为 ds2.select(name,id==value())
关联值全部取 id 显示值取 name。
最终结果为: