一个多重参数报表的制作
需求背景
在参数输入界面(如图示)
1、 选择需要在最终统计表中显示的字段;
2、 选择需要汇总的城市;
3、 选择汇总方式
分析
需求中动态显示字段的实现可以通过隐藏列的方式实现,如果显示数据量比较大的时候可以考虑宏的方式实现,在这里采用隐藏列的方法。
由于汇总城市的选择是单选的,因此采用报表提供的单选按钮完成。
汇总方式可以通过参数控制行隐藏实现。
详细步骤
制作参数报表
1、选择字段
2、汇总城市
参考选择字段的方式,设置填报属性
3、 汇总方式
下图中两个单元格类型设置为HTML
制作主表
接下来进行主表的主要部分设计
其中:
① 处为设置该列的隐藏属性,在隐藏列中输入表达式:if(like(@cols,”*1*”),false,true)。请注意此处的写法。由于cols参数传递过来的是类似”1,2,3,4“这样的串,所以此处采用上述表达式控制。
另外,C、F、I列的表达式分别为:if(like(@cols,”*2*”),false,true)、if(like(@cols,”*3*”),false,true)、if(like(@cols,”*4*”),false,true)
② 处表达式为:if(@sumType==”1″,”北京小计:“,@sumType==”2″,”上海小计:“,”小计:“)
③ 处设置隐藏行,以区别不同的汇总方式。在隐藏行中设置表达式:if(@flag==”1″,true,false)
JSP文件
下面是发布该报表的jsp中的部分关键代码
request.setCharacterEncoding( “GBK” );
String report = request.getParameter( “raq” );
String reportFileHome=Context.getInitCtx().getMainDir();
StringBuffer param=new StringBuffer();
String flag = request.getParameter(”flag”);
//保证报表名称的完整性
int iTmp = 0;
if( (iTmp = report.lastIndexOf(”.raq”)) <= 0 ){
report = report + “.raq”;
iTmp = 0;
}
Enumeration paramNames = request.getParameterNames();
if(paramNames!=null){
while(paramNames.hasMoreElements()){
String paramName = (String) paramNames.nextElement();
String paramValue=request.getParameter(paramName);
if(paramValue!=null){
//把参数拼成name=value;name2=value2;…..的形式
param.append(paramName).append(”=”).append(paramValue).append(”;”);
}
}
}
<script language=”javascript”>
function sumCode(flag){
//alert(”调用成功!”);
var cols = document.getElementById(”report1_C2″).value;
alert(”选择字段=====”+cols);
var sumType = document.getElementById(”report1_C4″).value;
alert(”汇总方式====”+sumType);
var url=”showReport.jsp?raq=/helishiDemo.raq&flag=”+flag;
url = url+”&cols=”+cols;
url = url+”&sumType=”+sumType;
window.open(url);
}
</script>
总结
使用报表参数的传递,以及各种隐藏方式的运用,可以实现诸多需求的报表。当然,这些都是在不断使用并熟悉报表工具的基础上进行的。