报表知识库
我要提问

如何设计含有多层级的报表

在复杂报表中有这样一种类型的报表,字段值之间有父子关系,那么,本文介绍怎样设计报表来体现字段值之间的多层级关系。

首先看一组示例数据:

 

其中,TYPECODE字段是记录本身的节点代码,TYPEPCODE为父节点代码,FULLCODE为整个层级关系的代码,根据以上信息不难画出父子关系图:

0(根节点)
|——出勤任务(1)
| |——网点改造(5)
| | |——柜员设备安装(17)
| | |——网点迁址(18)
| |
| |——ATM相关工作(6)
| | |——ATM开通(19)
| | |——ATM变更(20)
| |
| |——线路相关工作(7)
| | |——故障排查(21)
| | |——新线路开通(22)
| | |——线路撤销(23)
| |
| |——POS开通及变更(8)
|
|——中心侧任务(2)
| |——系统升级(9)
| | |——储蓄统版升级(24)
| | |——华腾中间业务升级(25)
| | |——电子汇兑统版升级(26)
| | |——基金保险升级(27)
| | |——外币统版升级(28)
| | |——对公统版升级(29)
| | |——集邮统版升级(30)
| |
| |——系统参数变更(10)
| | |——终端绑定(31)
| |
| |——网点地址变更(11)
| |——不确定故障排查(12)
|
|——全天性临时任务(3)
| |——培训(13)
| |——ATM监控(14)
|
|——非全天性临时任务(4)
| |——无线配置调整(15)
| |——培训相关(16)

参考上图,设计报表模版:

 

其中:

A3:=ds_tasktype.group(TYPECODE,false,TYPEPCODE==0)

A4:=ds_tasktype.group(TYPECODE,false,TYPEPCODE==A3,,,,true)

A5:=ds_tasktype.group(TYPECODE,false,TYPEPCODE==A4,,,,true)

A6:=ds_tasktype.group(TYPECODE,false,TYPEPCODE==A5,,,,true)

A3表达式的作用是,最隶属于根节点的层级进行分组,也就是父子图中code为1、2、3、4的层级进行分组。

需要说明的一点是,由于在数据库中每条数据记录都是平行存在的,所以每层分组都要从根数据集中取数据,也就是就表达式中最后一个参数”true”的作用,具体可以参考用户手册中的group()函数说明。

A4表达式的作用是,在A3分组层级后,进一步进行分组,也就是父子图中code为5-16的层级进行分组。

A5和A6同理,都是在上一层级的基础上进行分组。

还有一点需要注意的是,因为不同层级之间的层级深度不一样,所以要对没有数据的层级进行隐藏:

在隐藏行中加入条件VALUE()==NULL,当本层级的值为0时隐藏。这样就做到了动态根据数据库中的数据来显示相应的层级关系。

为了使得层级关系清晰明了,对A4、A5、A6单元格还分别加入了缩进,这样在展现的过程中就可以类似属性结构的效果。

预览效果如下:

 

通过这个例子可以看出,润乾报表在处理多层级(父子层级)之间的数据展现,简单容易,通过表达式中的条件筛选和样式上的修改,就可以非常轻松的实现这类报表需求。