一个多重参数报表的制作

需求背景

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

1、 选择需要在最终统计表中显示的字段;

2、 选择需要汇总的城市;

3、 选择汇总方式

分析

需求中动态显示字段的实现可以通过隐藏列的方式实现,如果显示数据量比较大的时候可以考虑宏的方式实现,在这里我们采用隐藏列的方法。

由于汇总城市的选择是单选的,我们采用报表提供的单选按钮完成。

汇总方式我们可以通过参数控制行隐藏实现。

详细步骤

制作参数报表

1、选择字段

2、汇总城市

参考选择字段的方式,设置填报属性

3、 汇总方式

下图中两个单元格类型设置为HTML

制作主表

我们来看一下主表的主要部分设计

其中:

处为设置该列的隐藏属性,在隐藏列中输入表达式:if(like(@cols,”*1*”),false,true)。请注意此处的写法。由于cols参数传递过来的是类似”1,2,3,4“这样的串,所以此处采用上述表达式控制。

另外,CFI列的表达式分别为: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>

总结

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

热门文章