关于省市县在同一个字段内的分组问题

常规分组报表

对于分组报表,经常遇到的就是省市县在不同的字段内的表结构。
这样的结构,在做分组报表的时候,是非常简单的,直接对所属的不同字段执行 group 函数即可。
如下图所示:

imagepng

imagepng

imagepng

特殊结构

但是也往往会有一些特殊结构的表
比如下图所示的这种

imagepng

省市县乡村 都在一个字段内存着。
每个村有自己独立的 id。pid 与其上级目录的 id 关联。pids 内则是从上到下的层级关联。
这样的表结构,在做分组报表的时候,首要考虑的就是如何把各层级区分开的问题。

主要区分点就是 pid 和 id 间的关联了。
分组函数,必然要使用的是 ds.group()
由于是同一个字段,需要用的是 ds.group@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        是否为根数据集表达式

具体实现

如下图所示:

imagepng

省份的非常简单,直接 =ds2.group(id,pid==0) 即可 显示值表达式为: ds2.select(name,id==value())

市的写法为 =ds2.group@r(id,pid==A4;id:1) 根据 pid 做关联。
县镇村的写法类似,关联单元格为上级单元格即可。
显示值写法一样,为 ds2.select(name,id==value())

关联值全部取 id 显示值取 name。

最终结果为:

imagepng

更多相关展现报表请查看 展现相关
* 润乾报表 V2018 手机端展现参数模板下拉数据集样式问题
* 像 excel 一样轻松冻结 web 报表表头 (锁定表头)
* 报表设计技巧之隔行异色
* web 报表中电子图章 / 水印的轻松实现
* 报表中的地图怎么做?