关于中国式报表,有兴趣的可以来看看!

中国式报表的复杂性大家都应该遇到过吧?我开发了一个工具,大家看看怎么样。我先贴一下使用的源代码,大家看看好不好用。先介绍一下基本功能,如果觉的好使,请跟贴支持!
this.branch_no = branch_no;
this.select_date = select_date;
SqlMapSession ss = sqlMap.openSession();
try {
//增加分组名称和汇总关系
this.addGroup("pol_subtype", "[sum:*]");

HashMap paramMap = new HashMap();
paramMap.put("branch_no", branch_no);
paramMap.put("oper_date", select_date);
List item_noList = new ArrayList();
item_noList.add("Y"); //期交
item_noList.add("S"); //十年期
item_noList.add("W"); //趸交
item_noList.add("P"); //续期
item_noList.add("YR"); //期交撤单
item_noList.add("WR"); //趸交撤单
item_noList.add("SR"); //十年期撤单
item_noList.add("T"); //退保
item_noList.add("D"); //标保
paramMap.put("item_noList", item_noList);

StringBuffer expr = new StringBuffer();
//sql 语句为: select a.pol_code code,b.pol_name name,
// case when b.pol_subtype = "A" then "中介代理"
// when b.pol_subtype = "F" then "基金+医疗"
// when b.pol_subtype = "J" then "健康险"
// when b.pol_subtype = "Y" then "意外险"
// when b.pol_subtype = "T" then "团体"
// when b.pol_subtype = "P" then "个险"
// end pol_subtype
// ,item_no,trunc(sum(item_num),0) item_num,trunc(sum(item_amnt),1) sum_amnt
// from mb_year_pol a,pol_code b,branch c,branch d
// where .......

// 现在的目的是将该sql语句取出的结果经下面的关系转换到报表中去
//
//带$开头的表示报表中的列(例如$A1),不带的表示sql语句中的列(例如item_num)
// 报表中的每一列的计算关系很明显
expr.append("$A3=$A3+iif(item_no=='Y',item_num,0)+iif(item_no=='YR',item_num,0);");
expr.append("$A4=$A4+iif(item_no=='Y',sum_amnt,0)+iif(item_no=='YR',sum_amnt,0);");
expr.append("$A6=$A6+iif(item_no=='W',sum_amnt,0)-iif(item_no=='WR',sum_amnt,0);");
expr.append("$A7=$A7+iif(item_no=='W',sum_amnt,0)-iif(item_no=='WR',item_num,0);");
expr.append("$A9=$A9+iif(item_no=='T',sum_amnt,0);");
expr.append("$A10=$A10+iif(item_no=='C',sum_amnt,0);");
expr.append("$A11=$A11+iif(item_no=='D',sum_amnt,0);");
expr.append("$A0=code;");
expr.append("$A1=name;");

List polDataList = null;
try {
polDataList = this.sqlMap.queryForList("get_pol_policy_data", paramMap);
}
catch (SQLException e) {
e.printStackTrace();
}
// 开始转换数据到报表中
data2Report(polDataList, expr.toString());

StringBuffer expr = new StringBuffer();
expr.append("$a0='" + branch_no + "';");
this.setRootSumLogic(expr.toString());
//求汇总
this.mass();
expr = new StringBuffer();
//报表中列与列的运算
expr.append("$a2=$a4+$a8+$a9;");
expr.append("$a5=$a4/$a3;");
for (Iterator iter = getResultList().iterator(); iter.hasNext(); ) {
Object lineData = iter.next();
ExpressionFaced.execute(expr.toString(), lineData, null, null);
}
//报表排序
this.sort("a0", false);
//针对聚合值的排序
sortByGroupValue("pol_subtype", true);
//返回结果
return this.getResultList();

很实用,如果能做成可配置的框架就更好了

我以为没人在意呢!多谢版主支持!如果有人使用,我会进一步开发!我公司的复杂报表现在都是用我的工具实现的,总体感觉还是很方便的,现在的功能是目前我见过的报表工具都不能实现的(可能有,但我确实没有见过)。和其他传统报表工具相比较,现在的主要功能是:
1、取数的逻辑完全可以定制。举个例子吧,报表中经常可以见到,求工作进度的列的计算。传统做法都是在sql语句中求好或程序实现。但如果逻辑复杂的话就会很麻烦,但用我的工具,就可以通过表达式的方法来实现,使程序简洁明了。
2、分组逻辑完全可以定制。不象传统报表工具,只能指定某一具体列名。可以通过表达式计算动态分组。
3、支持多sql语句和多数据源的数据存取。
4、适合觉大多数中国式报表(我所见过的)。

近一步的程序开发,需要试用者的试用和支持!

忘了一个重要功能,现在补上。
支持自定义函数!

很好,有没有联系方式my qq:280053033

老兄怎样联系呢

有没有新的版本出来呢

楼主能不能提供个演示地址,想看看画出来的效果

为什么不把jar包及文档共享出来啊

现在不搞开源吗

本工具已经迁移到.net平台,提供设计器。支持多数据源、多数据集、集合运算、单一sql从多数据库取数,报表分片,sql语句写法扩展了ibaits的写法,更加灵活。打算做成共享软件让大家使用。
有兴趣的可以联系我:qq:59395983

顶起来,让更多需要的人来看看!
报表本人也开发过一些,不知道是中国人的思维导致还是真的就是要那样的需求,的确很烦锁!
希望楼主加油!