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

常规分组报表

对于分组报表,经常遇到的就是省市县在不同的字段内的表结构。
这样的结构,在做分组报表的时候,是非常简单的,直接对所属的不同字段执行 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        是否为根数据集表达式

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

发布了48 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zozoxxma/article/details/103660095