在Birt中动态插入子表字段
来源:互联网 发布:mac os 系统清理 编辑:程序博客网 时间:2024/05/16 04:14
库表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中使用动态图片
- 动态增删表字段.rar
- 动态增加数据库表字段
- 在Oracle中比较2表字段是否一样
- 在SQLPLUS中oracle查看表结构SQL语句 oracle修改表字段SQL语句 修改表字段SQL语句
- thinkphp5.0.2 多对多模型中插入中间表字段不存在的解决办法
- hibernate动态创建表,修改表字段
- SQL动态更新表字段(分享)
- hibernate动态创建表,修改表字段
- Liquibase中利用changelog增加表字段
- 数据库中 表字段数据类型-定长数据类型
- 数据库表字段中类型变更
- PHP表单提交数据表-自动填充表字段在$_POST中无数据单元
- Mybatis动态传表名(同样适用于动态传表字段)
- 表字段varchar2类型插入一段字符语句
- mysql将a表字段插入到b表
- Search Insert Position
- centOS 6.5关闭防火墙步骤
- 淘宝分布式数据库是如何实现高可用的
- stl之list
- All I Need To Know To Be A Better Programmer I Learned In Kindergarten
- 在Birt中动态插入子表字段
- php foreach用法和实例(转载,写的很详细)
- 二维指针,二维数组,以及指向数组的指针的相关问题
- 实战Ubuntu远程开机(Wake on Lan)
- java 常见内存溢出
- 测试这个博客如何吧
- NYOJ 122 Triangular Sums
- 化三为你解析气流粉碎机的六大性能特点
- 上传图片(http post,webservice与http区别)