报表知识库
我要提问

多重参数报表的制作

需求背景

在参数输入界面(如图示)

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>

总结

使用报表参数的传递,以及各种隐藏方式的运用,可以实现诸多需求的报表。当然,这些都是在不断使用并熟悉报表工具的基础上进行的。