在Birt中动态插入子表字段

原创 2015年07月10日 08:57:53

         库表dColThread是主表,主键是tID。dColQuestion是子表,外键是tID,如下:

         dColThread


         dColQuestion

        报表需要根据ApplicationName查询主表并以列表的形式展现数据。主表每条记录对应的status字段值有多个,但不超过5个,需要横向插入主表的Phone、Decline字段之间,依次命名为QuestionNo1、QuestionNo2…QuestionNo5。如果某列数据都为空,则这一列不显示。表样形如:


         用集算器准备数据,代码如下:


         A1:执行SQL,取出主子表关联数据。arg1是来自报表参数。假如arg1=”mfc”,则A1的计算结果如下:



         A2:按照tID分组,每组是一条主表记录及其对应的子表记录,如下图:

         A3:按照报表中列表的结构新建空二维表。

         A4:循环A2中的组,每次向A3插入一条记录。循环体中可用A4引用循环变量,用#A4来引用循环计数。

         B4:取当前组中status的字段值,并补足至少5条记录。

         B5:向A3追加新记录。循环结束后A3如下:

         A6:返回结果给报表。集算器对外提供JDBC接口,报表工具会将集算器识别为普通数据库。

 

         然后用BIRT设计list表,模板如下:

         如果QuestionNo列为空则应当隐藏。动态隐藏的方法有很多,这里介绍其中一种。对于QuestionNo5(其他列类似),可以先在dataSet的onFetch方法中使用如下脚本:

if(reportContext.getGlobalVariable("t5")==null){
    reportContext.setGlobalVariable("t5",row.QuestionNo5)
}else{
    reportContext.setGlobalVariable("t5",reportContext.getGlobalVariable("t5")+row.QuestionNo5)

         再在QustionNo5列的Visibility属性中使用如下表达式:BirtStr.trim(reportContext.getGlobalVariable("t5"))==""

         预览后可以看到报表结果:

         报表调用集算器的方法和调用存储过程一样,比如将本脚本保存为dColMiddle.dfx,则在BIRT的存储过程设计器中可以用call dColMiddle.dfx(?)来调用。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

BIRT 报表的动态交互性

birt 提供了不少报表交互性, 像是TOC (table of content) , Bookmark , Hyperlink , 图标的交互性和一些script 能够完成的工作. 但是有时候用户可...

Birt API 实现动态参数列报表

使用BIRT API 拓展 ReportEventAdapter 类,实现报表动态列展现。 传入参数columnNames字串,解析包含列,动态插入birt报表table列,实现动态参数报表展现。
  • hob007
  • hob007
  • 2011-06-01 18:26
  • 8053

动态增加数据库表字段

动态增加数据库表字段 预留足够的空白字段,运行时作动态影射 用xml格式保存在单字段里 改列为行,用另外一个表存放定制字段

表字段不确定,根据需求动态自定义字段的解决方式

最近遇到一个需求,要保存到数据库表中的字段不确定,用户自定义决定。保存后还有修改,展示等功能。       需求大概如下:       为用户提供在线的培训组织、报名统计、签到功能。难点在于,培训没有...

数据库表字段命名规范

  • 2017-09-20 15:32
  • 26KB
  • 下载

(3)birt笔记 - chart图表相关-利用java script&java动态添加折线图表的折线数

在实际使用birt图表时,其提供的视图界面能够很高效的帮助我们创建出所需的报表,但是有时涉及到一些复杂的,x/y/显示数据都为动态的情况时,单纯使用界面编辑已经无法满足需要。例如现在需要一张折线图报表...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)