我们所经常用到的就是递归形式存储数据。比如说现在每条记录都有自己的id和父id,在对都有自己的id和父id的数据进行处理的时候,尤其是将这样的数据做成分组形式时,有些客户发现就会遇到一些问题:报表拥有强大的数据处理功能,对于类似的问题都可以解决,下面就介绍一下递归的数据如何制作分组报表。
设计思路就是先将根节点的id也就是所有节点的起源显示出来,然后通过query()这个函数将其子节点筛选出来,这样一级一级展示,就可以完成报表的分组设计了。
首先,看一下数据在数据库里的存储方式。
1.png
从这里可以看出 1、2 是所有节点的跟节点,3、4、5的父节点为1,6和7 的父节点是2等等。
建立数据集:sql语句为:SELECT diguitest.id,diguitest.fid FROM diguit,设计报表如下图所示。
2.png
然后将根节点显示出来,在A2中显示根节点,也就是 父节点为0的点。
A2:=ds1.select(id,,fid==”0″)
B2,C2,D2,这三个单元格分别写:
=list(query(”select diguitest.id from diguitest where diguitest.fid=?”,A2))
=list(query(”select diguitest.id from diguitest where diguitest.fid=?”,B2))
=list(query(”select diguitest.id from diguitest where diguitest.fid=?”,C2))
以B2为例,query(”select diguitest.id from diguitest where diguitest.fid=?”,A2)这句的含义是选出以A2为父节点的所以id值,然后将得到的值用list封装起来,展现的时候就有扩展的样式了。
浏览报表。
3.png
通过以上步骤便完成分组报表的设计,清晰的看出层级关系,如果层级较少的话也可以通过sql语句来实现,在sql中进行拼接,使得每条记录都包含该节点到根节点的所有节点,这样就可以通过博计自带的分组函数来实现分组设计。
设计思路就是先将根节点的id也就是所有节点的起源显示出来,然后通过query()这个函数将其子节点筛选出来,这样一级一级展示,就可以完成报表的分组设计了。
首先,看一下数据在数据库里的存储方式。
1.png
从这里可以看出 1、2 是所有节点的跟节点,3、4、5的父节点为1,6和7 的父节点是2等等。
建立数据集:sql语句为:SELECT diguitest.id,diguitest.fid FROM diguit,设计报表如下图所示。
2.png
然后将根节点显示出来,在A2中显示根节点,也就是 父节点为0的点。
A2:=ds1.select(id,,fid==”0″)
B2,C2,D2,这三个单元格分别写:
=list(query(”select diguitest.id from diguitest where diguitest.fid=?”,A2))
=list(query(”select diguitest.id from diguitest where diguitest.fid=?”,B2))
=list(query(”select diguitest.id from diguitest where diguitest.fid=?”,C2))
以B2为例,query(”select diguitest.id from diguitest where diguitest.fid=?”,A2)这句的含义是选出以A2为父节点的所以id值,然后将得到的值用list封装起来,展现的时候就有扩展的样式了。
浏览报表。
3.png
通过以上步骤便完成分组报表的设计,清晰的看出层级关系,如果层级较少的话也可以通过sql语句来实现,在sql中进行拼接,使得每条记录都包含该节点到根节点的所有节点,这样就可以通过博计自带的分组函数来实现分组设计。