Posts Tagged ‘报表’

3种Web报表软件的体系结构

07.02.2010 by admin - 0 Comment - 0
Posted in web报表

今天有一位朋友问起有关Web报表软件的体系结构和性能问题,解释如下:

Web报表软件总的讲有三种体系结构。一种是纯Java报表,以润乾为代表;一种是控件方式,以数巨为代表;另一种是独立服务器方式的报表软件,以Crystal Report为代表。

1、控件方式

这种方式在浏览器端要安装一个ActiveX控件,在服务器端只负责取数据,报表的计算与生成都是在控件中进行的。采用这种方式的原因是它的报表功能往往都是采用Delphi实现的,包括许多产品都是采用相同的第三方组件。

控件方式的缺点在于:

1)部署:一个控件,要完成别人报表服务器所实现的大部分功能,体积可想而之。功能越强,控件的体积越大。这对于部署是一个很大的负担。不仅如此,而且,当报表系统升级时,用户都必须重新安装控件,Web报表软件的B/S结构在部署方面的优势荡然无存。(其实这种方式本身就是伪B/S)

2)性能:在PC端计算与在服务器端计算,对小报表可能差别不大,但对于大报表,显然差异非常大。并且,如果一个Web报表系统有多个用户都要使用,服务器方式所可以采用的定时计算、缓存等等都无法发挥作用。

所以,控件方式一般只适用于简单、小型报表。这里的简单,不仅是报表的样式简单,也包括计算量、报表规模上都比较简单。

2、独立服务器

这种方式安装一个独立(逻辑上)的报表服务器。它避免了控件方式的Web报表软件部署繁琐、升级不便的缺点,能够通过服务器有效地管理报表,很好地处理性能问题。但它部署起来也是比较麻烦的,实际很多这类Web报表软件产品也很难真正做到跨平台。尤其是涉及集群、连接池等问题,它就无法提供良好的可扩展性。

3、Java报表软件

首先它可以轻松实现Web报表的跨平台部署。对于ASP,.NET等非Java应用,它可以以报表服务器的方式提供Web报表服务,这时这种Web报表工具的工作方法是与Crystal Report之类的产品类似的,具有独立服务器相同的优点与缺点(这里所说的独立服务器是指逻辑上的,物理上仍然可以与其他服务器安装在一起)。而对于Java应用,则可以以类包的方式将报表软件嵌入到J2EE应用架构中,与应用系统形成无缝衔接。这时,它的优势就更加明显:

1) Java应用服务器的所有提高性能的手段,都可以在Web报表软件上充分发挥作用,如计算能力更强的服务器(对控件方式服务器起不了多大作用,独立报表服务器则很多难以在UNIX服务器上部署),负载均衡,连接池等等。

2) Web报表软件可以与应用程序更紧密地衔接,被应用程序更灵活地使用。

有人说,你不要总拿Unix说事,实际应用中很多应用服务器是采用PC Server的。确实是这样,但是(姑且不说许多Web报表工具并不能很好地支持Linux)不要忘记应用服务器层采用PC Server的原因是在于在这一层比较适合采用水平方向的扩展,即使用Cluster和负载均衡技术。对于Java报表软件,这一点太容易了,直接和应用部署在一起就可以,可以说是天生的,但对于独立服务器,这个就很麻烦了。

转自:http://elf8848.javaeye.com/blog/626808

利用快逸报表内置JS函数实现页码跳转功能

02.01.2010 by hewei - 3 Comments - 0
Posted in web报表

Web应用开发中一个很普遍的需求就是页码的跳转,快逸报表已经为项目开发人员提供了起始页,下一页,上一页,最后页的功能,节省了人工编写的复杂度,当然,如果想直接跳转到某一页,就需要稍微做一点工作了,我们知道快逸报表内置的javascript函数中有一个_toPage( )函数,此函数的语法为:tag中的name属性+_toPage( N),N为页数。下面就简单的做一个例子实现这一效果。
(注:更多的函数说明请参考 应用开发教程以及应用开发手册中的网页脚本控制一章节)

首先看一下效果图:

快逸报表 web报表 页面条状 js函数.png

实现步骤:
1:首先制作一张报表,报表属性设置为按行分页,每页十五行,如图所示:

快逸报表 web报表 页面条状 js函数 报表模板 分页

2:写jsp页面发布此报表,jsp代码如下:

<!-
< %@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” % >
< %
//以下代码是将常用的jsp中input元素拼为字符串
String tpagestr = “< input type=\”text\” style=\”width:30px;\” value=\”\” name=\”atpage\” id=\”atpage\”>< input type=\”submit\” value=\”go\” onclick=\”aa();\” >”;
%>
< html>
< head>
< title>快逸报表输入跳转页数跳转< /title>
< h2 align=”center” >快逸报表输入跳转页数跳转< /h2>
< /head>
< script type=”text/javascript” >
//定义名为aa的js函数,当点击value为”go”的按钮时调用
function aa(){
//获得定义ID为atpage输入框的值
var tpagenum = document.getElementById(”atpage”).value;
//调用快逸内置的_toPage()函数,将获得的值传入即可实现转到某一页
try{report1_toPage(tpagenum);}
catch(e){}
return false;

}
< /script>
< table align=”center”>
< tr >< td>
< %== 以下是用tag标签发布报表==% >
< report:html name=”report1″ reportFileName=”moreData.raq”
< %== userFuncBarElements是自定义的功能条中的功能元素,引入我们自定义的Html元素 ==%>
userFuncBarElements=”"
width=”-1″
/ >
< /td>< /tr>
< /table>
< /html>

总结:快逸报表内置了很多很实用的js函数供开发者调用,可以实现诸如此类的需求,熟练使用快逸报表中的内置js函数可以使开发变得更快速简单。

原文链接:利用快逸报表内置JS函数实现页码跳转功能

下拉菜单多选参数查询

01.31.2010 by hewei - 2 Comments - 0
Posted in web相关技术

快逸报表的下拉菜单功能可以很方便用在参数模板中,供报表浏览者轻松准确的选择需要的参数进行查询,但是默认的查询参数只能选择一个值如下图:

快逸报表下拉菜单多选的参数传递单选1.png

如果想要选择多个值就需要另外进行设置。本文就来介绍一下快逸报表是怎样利用下拉菜单进行多选查询的。
首先进行报表的设计:

22.PNG

第一步:增加数据集
ds1.SELECT EMPLOYEE.EMPID,EMPLOYEE.EMPNAME,EMPLOYEE.BIRTHDAY,EMPLOYEE.SEX,EMPLOYEE.DEGREE,EMPLOYEE.BONUS
FROM EMPLOYEE
ds2: SELECT DEGREE.ID,DEGREE.NAME FROM DEGREE

第二步:定义表达式
1、将A3单元格表达式修改为:=ds1.Select(int(EMPID),false)
该表达式是将字符串型的EMPID转换成整数,再做排序操作。
2、设置C3单元格的显示格式为:yyyy年MM月dd日
3、设置F3单元格的显示格式为:¥#0.00
4、设置D3的显示值为:map(list(”1″,”2″),list(”男”,”女”))
5、设置E3的显示值为:ds2.select1(name,id==value()),
6、设置E4为”统计时间:”,F5的值为=now(),F6()值为”第”+pno()+”页”。

第三步:添加参数

在报表中配置选项中添加参数,用来接收参数模板传过来的参数,参数名称为arg1,类型为字符串组。
进入到设计数据集的部分,其中的检索条件设置为DEGREE in (?) or ? is null,之后在参数标签中添加两个参数,其中两个参数的表达式的写法是第一个参数表达式为arg1,第二个参数表达式为str(arg1)格式如下:

快逸报表下拉菜单多选的参数传递参数设计3

然后设计参数模板,具体的设计方法如下:

66.PNG

C2单元格填报属性设置为下拉列表框,并在该单元格的web属性的变量名中填写与报表文件对应参数名称,这里填写为arg1:列表框数据如下图所示:

44.PNG

注意,一定要选择 允许多选和增强控件两个选项,否则无法进行多选。
这样报表就设计完了
发布到web,报表可以进行多选,点击查询得到查询结果,如下图:

77.PNG

这样,就在下拉菜单里完成了多选的查询,如果用户想在下拉数据集里进行多选查询的话,将模板的参数下拉菜单改为下拉数据集,然后在设置中除了添加显示列和数据列之外同样勾选上允许多选和增强控件,其他设计方法参照本例即可,就能实现下拉数据集的多选查询。

原文链接:下拉菜单多选参数查询

Web报表单元格内容竖排显示的制作方法

01.29.2010 by hewei - 3 Comments - 0
Posted in web报表

需求说明
普通报表常常需要将文字从纵向方向竖着排列,Web报表自然也不例外有这个需求。
快逸报表单元格的内容默认情况下是横向显示的,如何实现竖排显示单元格内容呢,下面介绍两种制作方法。

一.宽度限制加自动换行

大致思路:将该单元格内容居中显示,并设置单元格的宽度使每行只能显示一个字,然后设置自动换行,就可以实现单元格内容竖排显示了。
新建一个空白报表,然后内建一个数据集,内建数据集的内容如下

Web报表单元格内容竖排显示的制作方法1.png

然后在单元格中输入:
A1: 编号
A2:案卷题名
B1:=ds1.select(案卷_档号)
B2:=ds1.案卷_案卷题名
把没有用到的单元格删除掉。
设置B1的扩展方向为”横向扩展”

Web报表单元格内容竖排显示的制作方法2.png

现在报表已经做好了,浏览报表,单元格的内容是横向显示的。如下图

Web报表单元格内容竖排显示的制作方法3.png

下面添加竖排显示的功能:
设置A、B列的宽度为8,使每列只能显示一个汉字。实际运用中的具体宽度要根据字体具体大小算出。

Web报表单元格内容竖排显示的制作方法4.png

勾选上A1、A2、B2单元格的”自动换行”,使每行只能显示一个汉字

Web报表单元格内容竖排显示的制作方法5.png

设置完成,发布报表,在IE中浏览报表,效果图如下

Web报表单元格内容竖排显示的制作方法6.png

二.缩进控制加自动换行


方法一只能把列的宽度设置的很小,可以一行显示一个汉字;如果把列的宽度加宽,就不会出现上图中的效果。如果要把列的宽度设置的比较宽,一行又只能显示一个字,该怎么制作呢。
大致思路:将该单元格内容居中显示, 调整单元格的缩进值,然后勾选上”自动换行”属性,就可以在比较宽的列中实现单元格内容竖排显示了。
这种制作方法和上面的方法基本上一样,现在就用上面做好的报表,把B列的宽度改为25,然后设置B2单元格的缩进值为10,如下图:

Web报表单元格内容竖排显示的制作方法7.png

设置完成,保存报表,然后在IE中浏览报表,效果图如下:

Web报表单元格内容竖排显示的制作方法8.png

从上面的两种效果图可以看出,第一种不能加宽列的宽度,第二种方法可以调整列的宽度。以后遇到类似的需求就可以用上面的方法实现了。

原文链接:Web报表单元格内容竖排显示的制作方法

关于报表基础知识

01.28.2010 by hewei - 1 Comment - 0
Posted in web报表

什么是报表

一提起报表,人们最经常联想到的就是财务报表,象资产负债表、现金流量表、报销单等。其实除了财务报表,工作生活里还有很多报表,比如课程表、成绩表、员工登记表、工资表、物料登记单,银行记账单、手机话费单等等,各行业中的业务报表更是数不胜数。那么,什么是报表?

报表就是将内容信息(一般是数据、文字、图片等)以某种形式组织起来,并将组织结果呈现出来的文件。

对中国用户而言,凡是能打印出来的都可以叫报表。

什么是报表软件

顾名思义,报表软件就是用来制作报表的系统工具,目的是使做表工作简单化,提高总体工作效率。

报表软件有什么用?

报表软件可以帮助用户快速开发出自己想要的报表。这里的用户主要是指企业级用户市场,是除个人桌面级应用以外的市场。

企业级的用户一般有这么几个特征:
(1)应用复杂。企业级用户因为所处行业以及业务的不同,其应用软件涉及到财务、人员、物料、生产等各环节;
(2)数据量大,因为日常的业务往来会产生大量的生产数据;
(3)报表多且种类不同,处于不同生产环节上的人对报表有不同程度的要求。

专业的报表工具可以帮助企业级用户迅速定制出业务需要的报表。

Web报表通过参数动态得到一个参数区间

01.22.2010 by hewei - 0 Comment - 0
Posted in web相关技术

Web报表设计中,经常会遇到从一个时间区间内取得数据的问题,比如查询某个日期所在周的订货信息详情,如果使用普通参数来解决这个问题的话,需要用户手动设置一周的起始时间和结束时间,这样做不但容易出错,而且也增大了开发人员的负担,如果使用动态参数来解决这个问题,用户只需要选择某个日期,系统就会自动计算出该日期所在周的起始时间和结束时间, 简化了客户的操作,提高了准确程度。
下面以一个例子来说明如何实现这个需求:
预期效果如下图所示:

快逸报表Web报表通过参数动态得到一个参数区间预期效果1

第一步:设计报表

使用快逸报表demo数据源,建立两个数据集。
ds1:
SELECT 订单.订购日期,订单.订单ID,订单.货主地区,订单.货主城市,订单.运货商 FROM 订单 WHERE 订单.订购日期 >?AND 订单.订购日期 < ?
并添加两个参数定义arg2和arg3。
ds2:
SELECT 运货商.公司名称,运货商.运货商ID FROM 运货商
在报表设计器中添加以下数据:
A2单元格表达式为:=str(arg2)+ ” 到”+str(arg3)+” 订货单 ”
A4单元格表达式为:=ds1.Select(货主地区)
B4单元格表达式为:=ds1.货主城市
C4单元格表达式为:=ds1.订单ID
D4单元格表达式为:=ds1.运货商,显示值表达式为=ds2.select(公司名称,,运货商ID==value())
E4单元格表达式为:=date(ds1.订购日期),显示格式为:yyyy年MM月dd日
设置背景颜色如下:

快逸报表Web报表通过参数动态得到一个参数区间参数设计

第二步:设置参数

在设计器-配置-参数中,为报表添加一个日期型普通参数和两个日期型动态参数,这个普通参数的值设置为1996-07-08(作为首次查询的默认值,可为任意日期),两个动态参数值设置为:
动态参数arg2的值填写weekbegin(arg1),
动态参数arg3的值填写weekend(arg1),
其中weekbegin()和weekend()这两个函数是报表自带的函数,他们的作用是计算一个日期所在周的起始时间和结束时间。
在本例中,通过普通参数得到时间,然后动态通过函数计算,将得到的时间赋给arg2和arg3,然后系统将arg2和arg3作为条件进行检索。

快逸报表Web报表通过参数动态得到一个参数区间参数设计3

第三步:设计报表参数模板


模板为填报报表

快逸报表Web报表通过参数动态得到一个参数区间参数模板

B2: 提示输入日期:
C2: 可写,填报属性中的编辑风格为下拉日历。
在web中预览报表,形式如下:

快逸报表Web报表通过参数动态得到一个参数区间显示效果

参数输入框中通过下拉日历选择日期,系统自动算出日期所在周的起始和截止时间,并根据这个条件显示时间,并最终显示出结果。

点击报表头实现列表排序

01.21.2010 by hewei - 0 Comment - 0
Posted in web相关技术
点击报表头,列表自动从小到大或者从大到小排序是非常常见的需求,传统的报表单纯通过写sql和页面来实现,费时费力,快逸报表作为新一代的类excel智能WEB报表开发工具,在实现这种需求时可谓轻而易举。本文通过下面的小例子介绍一下。一:首先看一下效果图: 点击报表头实现列表排序效果点击类别ID后,效果图如下:点击报表头实现列表排序效果从上面的两个图片中可以看出点击报表头时,类别ID从由小到大排序变为了从大到小排序!二:实现思路:快逸报表中数据集函数可以传入参数,从而控制对某一字段的排序,通过宏和参数以及超链接的结合使用,可以动态为数据集函数传入不同的参数,实现了点标题点击标题实现列表排序。三:实现步骤: 1:首先看报表模版以及参数和宏的设置下图是报表模版及参数设置:点击报表头实现列表排序设置下图为报表模版和宏的设置:点击报表头实现列表排序设置
2:利用宏和超链接实现方法解析快逸报表的数据集函数可以控制排序方式,此例中用到的数据集函数为:ds1.grout(),A2单元格表达式为:=ds1.group(类别ID,${macro2},,${macro1})${macro2}表示分组前记录的排序顺序,true为逆序,false为顺序${macro1}表示分组前纪录的排序依据表达式,默认为类别ID所以只要能动态传入macro2以及macro1的值,就能控制类别ID的排序。(注:ds.group()数据集函数的说明请参考 润乾报表4.0用户手册 第八章 表达式及函数 第四节函数中的内容)第一次访问此报表时接受的宏值为默认值,A2单元格表达式为:=ds1.group(类别ID,false,, 类别ID),所以我们看到的效果是类别ID从小到大排序。接下来每次通过点击报表头单元格触发超链接来传递不同的宏值实现排序改变。我们在类别ID报表头单元格设置超链接,如下图:点击报表头实现列表排序设置
超链接表达式为:”/reportJsp/showReport.jsp?raq=/点列表排序.raq&macro1=类别ID&macro2=”+order+”&order=”+if(order==”true”,”false”,”true”)由表达式可以看出:超链接url中动态控制了macro2的值,macro2的值为报表定义的order参数(macro2=”+order+”),然后通过为参数动态赋值,进而为宏动态赋值,if(order==”true”,”false”,”true”)意思为:如果order为true,那么order赋值为false,否则order赋值为true。这样就实现了点击标题,动态控制排序方式的功能。同样的道理,也可以设置根据销售额的大小动态实现排序的方式,同样可以通过设置超链接,为A2单元格的ds1.group()函数动态传入宏值来控制。具体的实现,可以动手做一下。快逸报表作为新一代的企业级智能WEB报表工具,集成了参数,宏,函数等等,灵活的利用宏和参数能大大提高报表的简易度,灵活度。
原文链接: 点击报表头实现列表排序

用XML文件作为web报表数据源并建立数据集的方法

01.20.2010 by hewei - 0 Comment - 0
Posted in web报表
快逸报表服务器提供了多种类型的数据集供用户使用,有SQL检索、存储过程、复杂SQL 、Text文件、XML文件、内建数据、语义层视图、EssBase和自定义等数据集类型。 数据集如果是XML文件类型,表示该数据集的数据来自XML文件。 本文就来介绍一下是奶数据集类型为XML文件的报表制作方法 第一步,标准xml文件的写法 首先看个XML文件例子,说一下XML文件的写法,并制作一个xml标准文件 < ?xml version=”1.0″ encoding=”GBK”?> < ROWS> < COLNAME> < col>id< /col> < col>name< /col> < col>sex< /col> < col>born< /col> < col>city< /col> < /COLNAME> < COLTYPE> < col>4< /col> < col>1< /col> < col>4< /col> < col>91< /col> < col>1< /col> < /COLTYPE> < ROW> < col>1< /col> < col>李明< /col> < col>2< /col> < col>1985-07-18< /col> < col>北京< /col> < /ROW> < ROW> < col>2< /col> < col>王明< /col> < col>2< /col> < col>1985-08-28< /col> < col>南京< /col> < /ROW> < /ROWS> Xml文件内容说明: 根节点为ROWS,根节点下第一个节点为列名定义,第二个节点为列的数据类型定义,第三个节点开始是数据。 列名和列的数据类型都可以不定义,如果省略列名定义,那么表达式里引用列时用ds.#n的方式,n代表列号;如果省略列数据类型定义,那么数据类型全部默认为字符型。 数据类型的定义采用java.sql.Types里的标准定义。 一行数据为一个ROW节点定义。 大家可以根据上面的例子和规则自己创建一个xml文件,把文件保存为xmlData.xml(文件名可以另取),存放在reportFiles下。 第二步:把制作好的xml文件设置成数据集 新建一张空白报表,在数据集设置窗口选择”增加”,然后在数据集类型窗口选择”XML文件”,如下图 xml类型数据集的制作方法1.PNG 输入XML文件的名字,或者点击右边的”选择”按钮,选择xml文件,也可以直接输入xml文件的名字,如下图 xml类型数据集的制作方法2.png 然后确定。编辑框中只需要录入XML文件名,可以是绝对路径名,也可以是相对路径名。如果是相对路径,设计器中相对于”配置/选项”中的应用资源路径,WEB发布时,相对于web.xml中配置的ReportFileHome属性中的路径。 第三步,使用设置好的xml数据集设计报表 单元格输入内容如下 A1:ID B1:姓名 C1:性别 D1:出生日期 E1:城市 A2:ds1.select(ID) B2:ds1.name C2:ds1.sex D2:ds1.born E2:ds1.city 单元格内容输入完成,然后把其他没有用到的单元格删除。 至此,报表已经完成。发布报表,启动tomcat,然后在IE中浏览报表。浏览效果如下 xml类型数据集的制作方法3.png 如果数据集的类型是xml文件,就可以用上面的制作方法制作报表。
原文链接: 用XML文件作为web报表数据源并建立数据集的方法

巧用参数实现交叉表行列互换

01.18.2010 by hewei - 0 Comment - 0
Posted in web报表应用
对于普通的没有olap分析功能的快逸报表而言,一旦发布到web页面后,其样式就被固定了,如果想把报表换种形式展现通常的做法是重新设计一张报表模板来实现,难道快逸报表就没有一种特殊的方法可以解决这样的需求吗?答案就在下面的例子中。 首先来看这样一张报表(quieeReport\webapps\quiee\reportFiles\基础报表\交叉报表.raq),在页面上的展现效果如下图: 快逸交叉报表.png 从上图可以看到这是一个多维交叉分组报表,上表头是地区/城市,左表头是日期。 如果想动态改变一下报表的样式,左表头变成地区和城市的分组展现,上表头变成年份和月份的分组展现,并且只通过一张报表,这就需要用文章标题中提到的:利用参数实现行列变换的方法了。 实现思路: 1. 设计单元格表达式根据参数不同而变化,从而实现样式跟随表达式变动。 2.点击一个超链接按钮通过url强制传参给报表中的单元格,从而控制报表的样式。 本文就以此报表为础,做一个可以行列互换的功能(上表头和左表头互换),实现报表在web页面上样式改变。 第一步:设计器中选择配置-参数 给报表增加一个参数,我们把这个参数叫做转换参数,顾名思义,这个参数就是控制行列转换用的。 快逸报表参数设定.png 第二步:修改单元格表达式,让单元格接受参数 快逸交叉报表原始表达式.png 我们把C2单元格的表达式修改为: =if(@arg1==’1′,ds1.group(year(订购日期),false,订购日期!=null)+”年”,ds1.group(货主地区,false,货主地区!=null))。 此表达式的意思是:当参数arg1的值为1时,C2单元格的表达式为ds1.group(year(订购日期),false,订购日期!=null)+”年”,否则默认为ds1.group(货主地区,false,货主地区!=null)。 关于快逸报表中if()函数的用法请参考快逸帮助文档中的相关介绍。 据这个逻辑,依照地区与城市之间的关系,年份和月份之间的关系,把单元格的表达式做如下修改: C3:=if(@arg1==’1′,ds1.group(month(订购日期),false)+”月”,ds1.group(货主城市,false)) A4:=if(@arg1==’1′,ds1.group(货主地区,false,货主地区!=null),ds1.group(year(订购日期),false,订购日期!=null)+”年”), B4:=if(@arg1==’1′,ds1.group(货主城市,false),ds1.group(month(订购日期),false)+”月”)。 第三步:修改交叉表头并在其中设置超链接 快逸交叉表表头修改.png 红色框中的交叉表头区是整张报表的关键,既要在行列转换的时候做到文字跟随变化,又要充当转换控制的按钮。 修改此单元格的表达式为:=if(@arg1==’1′,”分布,运货费,时间”,”时间,运货费,分布”) 然后在此单元格的属性中: 快逸报表超链接属性.png 加入超链接属性: if(@arg1==null,”/reportJsp/showReport.jsp?raq=/交叉报表.raq&arg1=1″,”/reportJsp/showReport.jsp?raq=/交叉报表.raq”) 快逸报表超链接编辑框.png 这个超链接的作用就是点击这个单元格,赋予arg参数值,然后通过超链接中的url把参数传递到jsp中的报表里,通过对参数值的判断,来确定超链 接中的url,这样就可以来回转换,防止只能转换一次的情况出现。(超链接也可以设置在其他单元格中,本文中这样做是为了美观且容易理解) 接下来,我们把报表发布到页面上去看效果: 快逸报表行列转换前页面.png 点击设置了超链接的表头单元格后,url自动转换为/reportJsp/showReport.jsp?raq=/交叉报表.raq& arg1=1,强制把参数arg=1传给报表的各个单元格,单元格表达式发生变化,报表样式也随之变化,于是实现了行列互换的效果: 快逸报表行列转换后页面.png 此时,如果想转换到前一种样式,只需再点击一次表头单元格即可。 在这个报表中,我们运用了很多颇具技巧性的方法,例如参数结合超链接的运用,if()函数的运用,往往一些看似很复杂的报表,通过一些技巧性的做法都是可以迎刃而解的。
原文链接: 巧用参数实现交叉表行列互换

实现查询条件的保存

12.27.2009 by hewei - 0 Comment - 0
Posted in web相关技术

任务背景

在带参数的报表应用中,在查询的应用中,同一个用户每次查询所用的参数值或者查询条件往往是相同的,或者说常用的总是那几种查询条件,如果每次都让用户输入相同的条件值,用户会觉得很烦,于是用户往往会提出:能否提供查询条件保存的功能。

面临困难

所谓的查询条件的保存,乍一听似乎很简单,实际做起来并不容易。最直接的是要和用户关联,因为某个用户输入的查询条件,只能提供给该用户使用,不能 让别的用户看见。其次,要考虑和报表模块、查询模块关联,因为同一个用户在不同的报表模块、查询模块里用的查询条件是不同的。 另一个要考虑的是查询条件的存储格式,因为不同模块的参数个数、参数名均不相同,所以查询条件的存储格式要能够灵活扩充灵活解析。除了存储格式,还需要考 虑存储位置,由于和用户关联,很多人直接想到的是采用cookies来实现,可是由于是WEB应用,客户端的机器可能随时会发生变化,比如用户可能在办公 室上网,也可能在家里上网,在家里用另一台机器,于是预先存储的查询条件就没了。另外,由于每一个模块用户都可能存储多个查询条件供选择,cookies 用起来还是不方便。因此,查询条件最好保存到服务器上。 接着,还需要考虑界面上的制作,在原先的参数输入页面上,要提供一个历史查询条件的下拉选项,该下拉选项从服务器存储的查询条件里读取;其次还需要做一个 查询条件是否保存的选项,如果保存,则提供保存名称的编辑框。 做好这些之后,服务器端的程序还需要写不少,首先根据客户端的输入情况,判断使用历史查询条件还是使用当前的输入值,如果使用历史查询条件,则到库中读 取;如果使用当前的输入值,还需要处理是否保存查询条件。 总之,做起来非常麻烦!而所有这些程序还要考虑通用性,否则每个模块写一遍,那不是累死了!基于以上的考虑,建议还是采用快逸报表的 参数模板+参数处理类 来实现,简单方便许多,具体步骤描述如下:

实现步骤

  1. 设计一个参数模板,该模板里增加三个多余的参数:是否保存参数值,保存名,历史查询。
  2. 在参数处理类里,如果读取到需要保存参数值,则将参数值按名字存入一张预先设计的参数值表中,该表的结构为:用户名、报表名、保存名、参数名与值,建表SQL如下:
    CREATE TABLE param (
    userName varchar(100) not null ,
    reportName varchar(100) not null ,
    saveName varchar(100) not null,
    argName varchar(100) not null,
    saveValue varchar(200) )
    
  3. 用户访问该参数模板的时候,可以输入新的参数值,并选择是否把新输入的参数值保存下来,也可以选择历史保存的参数值进行查询,不需要重复的输入。
  4. 如果用户选择的是历史保存的参数值,那么在参数处理类里,从数据库中取出历史保存的参数值来进行查询。

效果演示

saveed_query_condition.png

引自:报表工具知识库

原文链接: 用快逸报表轻松实现查询条件的保存

相关文章:如何将多个报表导入同一个Excel中的多个sheet中; 好用的java开发工具用快逸报表不写代码实现Web应用中的下拉日历web报表的扩展功能高效易用的低端JAVA报表工具

其他相关内容:润乾报表 ; Java报表工具 ; 润乾商业智能解决方案商业智能BI联盟