制作动态列报表

阅读(538) 标签: 动态列报表, 动态列,

如需针对不同需求设计一种通用结构的报表,可以通过制作动态列报表实现。

报表commonQuery.rpx设计如下:

B1=total.max  显示数据集行数。

B2=to(1,ds1.fcount())  根据动态列数生成列序号,并进行横向扩展。

B3=ds1.fname(B2)  根据B2里的列序号得到字段名。

A4=ds1.select(#0)  根据数据集的行数进行纵向扩展。

B4=ds1.field(B3)  根据B3里的字段名得到字段值。

B4的显示值表达式为:if(B3=="GENDER",sex.select(d,v==value()),B3=="性别",sex.select(d,v==value()),B3=="学历",education.select(d,v==value()),B3=="DEGREE",education.select(d,v==value()),value())

参数和数据集定义参考上一小节。

如果不想看到列号、行号,分别设置第2行、A列隐藏即可。

至此动态列报表就完成了,在浏览器地址栏输入:http://localhost:6868/demo/raqsoft/guide/jsp/cqIndex.jsp?table=员工&metadata=WEB-INF/reportFiles/commonQuery/commonQueryMetadata.dfx&rpx=commonQuery/commonQuery.rpx

参数说明

table:需要查询数据的表名。

metadatadfx类型的元数据,仅支持相对路径,相对于应用根目录

table_name +dfx类型的metadata用来生成最终的元数据json串。

rpx:报表模版,用来展示数据。可使用相对路径或绝对路径,使用相对路径时,相对于应用中配置文件raqsoftConfig.xml 里配置的Report中的home属性的路径。

 

缺省显示所有字段,如果查询部分字段,只需选出被查询字段即可:

选用汇总方式,进行分组查询:

这两种方式没有优劣,如果想通用,就用动态列报表;如果想精细控制,根据查询JSON显示成不同的、有特色的报表(甚至统计图),那就根据查询JSON路由到不同的报表进行展示。

整个通用查询的示例,基本上实现了完全的自动化,使用过程中,从数据库到报表展示,只需业务人员操作通用查询面完成自己想要的查询。

权限控制都集中在前后的dfx脚本文件里实现,每个业务系统都有自己的权限方案,增补这些dfx脚本不困难,它也是业务系统期望精细控制的部分。

 

基于通用查询模块的核心功能,可扩展一些更广泛的用法:

1、元数据JSON不是直接对应数据库表,而是业务系统定义的一些虚拟宽表;

2、业务系统更精细的管理查询JSON,使查询操作能在用户间共享;

3、查询JSON转换成实际结果数据后,不用于展示,直接入库保存;

4、整个系统的页面跳转完全由业务系统自定义,把通用查询模块嵌入进去。