关于报表基础知识

什么是报表

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

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

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

什么是报表软件

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

报表软件有什么用?

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

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

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

将数据库操作封装到Javabean

封装数据库操作,目的就是为了隐藏java.sql包内的类,在编码中去掉核心的数据库操作代码。以杜绝直接数据库操作容易带来的资源未释放问题。同时也减少了数据库操作的编码量。

   但是很多网友在封装时,却喜欢返回结果集(ResultSet对象),那么这个封装就没有意义了。

   1. 又是直接操作核心数据库类,跟封装前几乎没什么变化。

   2. 结果集总是依赖于它使用的连接(Connection)对象。因此当连接对象在方法内被关闭后,你返回的ResultSet就没有用了。

   如果真的要获得查询数据库的结果集,就把结果集对象内的所有数据,转储到以Map为元素的List对象内。

   当然,这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作. :)))

   下面是简单的数据库操作Javabean的代码

   DbWrapper.java

   import java.sql.*;

   import java.util.*;

   public class DbWrapper

   {

   // 定义连接池对象为静态变量,将一直存在,直到工作目录关闭。

   private static DataSource ds = null;

   // 1.用连接池的方式获得连接

   // 如果不是做多数据库程序,推荐使用此方法

   // 相关内容:在tomcat管理界面配置连接池

动态行的自动计算

随着B/S方式应用的普及,数据填报也逐渐转移到了网页上进行。数据录入最常见的需求之一就是动态增删行与自动计算。

所谓的动态增删行,即用户录入的过程中可以删除一些已有的行,也可以添加一些新的行,新的行和已有的行除数据外别的属性基本完全相似。

所谓自动计算,是指根据用户录入的某些单元格的值,自动计算出另外一些单元格的值,从而简化用户的输入,同时避免错误数据的录入。

因此,对于可以增加删除行的填报表,同样存在自动计算的问题。新增加的行如何添加到自动计算表达式中,比如sum\count等;已经删除的行如何从自动计算表达式中去掉?

在传统的C/S模式下,增删行的自动计算问题实现较为容易,采用通行的算法(在大多数数据结构教程中都有介绍)编写表达式计算程序来分析处理表达 式,在取单元格时根据当前环境从某逻辑行中取出数据参与运算即可(著名开发工具PowerBuilder中的Datawindow即是这样实现的)。

但是,在HTML页面上完成同样的工作则要困难得多。在纯HTML页面上通行的编程技术只有解释执行的JavaScript语言(以下简称JS)。 理论上采用JS编写表达式计算程序仍然可行,但实践中却会因JS效率过于低下而无法实用;同时由于JS语言本身能力较弱,写出这种复杂功能程序的代码量会 相当大,导致页面过于庞大而不利于下载。因此,在实际应用中不可能在纯HTML页面上实施上面的思路。

所幸的是,JS中固化了一个eval函数可用于计算表达式。但eval计算的表达式中只能出现事先定义过的JS变量或函数,而不能由程序员自行编写重载代码动态地取出某逻辑行的单元格值。

在这种限制下,采用静态报表方案可以有限地解决HTML页面上的表达式计算问题。即在报表发布成HTML之前,由后台程序为所有逻辑行生成由发布后 报表上静态单元格构成的表达式,其中统计表达式都分解成发布后报表上单个单元格的运算。这样,在HTML页面上执行eval函数时将不会再出现未定义的变 量(单元格)从而可以完成计算。

但是,这种方案不允许报表在填写过程中再插入或删除行。新增逻辑行上的行内表达式无法自动被添加出来(用JS自行计算出变换后的表达式与用JS编写计算表达式程序的复杂度是一致的),且统计表达式中将缺少新增行中的单元格。这时计算将不能完整地进行。

对于动态报表填写(即填写过程中要再插入或删除行)上的表达式计算,目前只能采用针对性编程的方案,为每种报表编写一段JS代码,拼出该报表发生变化后需要增加或修改的表达式。但显然这种方案没有通用性。

经过深入研究,快逸报表发明了一种新的算法,可以很轻松地解决增删行的的自动计算问题,其实现步骤如下:

实现步骤

  1. 设计一个行式填报表
  2. 按照业务要求写入自动计算表达式
  3. 现发布,系统会自动实现增删行时的自动计算

效果演示:

auto_computer1.png

报表设计界面

auto_computer2.png

C3单元格里写入的自动计算表达式

auto_computer3.png

浏览界面(尚未添加新行)

auto_computer4.png

浏览界面(添加了新行)

引自:报表工具知识库
原文链接: 快逸报表行式填报:动态行的自动计算
相关文章:普及报表系统功能说明 ; 好用的java开发工具 ; 数据集由内建还原为sql后没有数据 ; 快逸报表在瑞星2009下填报编辑框无法使用的解决办法
其他相关内容:润乾报表 ; RAQSOFT ; 润乾商业智能解决方案web报表研究专业.net报表工具

在润乾报表中使用超链接–常规超链接

超链接有多种灵活应用,比如我们可以利用超链接链接到某个网址,利用超链接来触发js函数,还可以利用超链接弹出新窗口等等。润乾报表为单元格提供了超链接属性,该属性可以是值也可以是表达式。润乾报表提供的超链接可分常规超链接、超链接中引用单元格的值和超链接触发js函数三种类型。如果超链接字符串不需要动态生成,可以直接写要链接到的页面路径,也就是常规超链接。下面将通过一个小例子来简单介绍一下如何在润乾报表中使用常规超链接。

首先, 制作一个报表,在E3中添加文字”链接到公司”,为了看上去明显,设置字体为蓝色,并加上下划线,设置E3的 超链接 属性的值为:http://www.runqian.com.cn,此网址就是待链接到的地址,如下图

ljdgs.png

注意:这里的链接地址是绝对路径,绝对路径一定要写完整,包含传输协议,例如:http://www.runqian.com.cn,不可只写www.runqian.com.cn。

然后,发布报表,当点击”链接到公司” 时,就会链接到润乾的网站,如下图

ljdgsxs.png

这样,就制作了一个简单的常规超链接,在报表展现时,点击超链接,就会链接到 超链接 属性值设定的地址。

说明

1、如果所用到的超链接已经定义好了,那么就不用设置单元格的超链接路径,直接选中单元格,双击该单元格 超链接属性表达式,弹出超链接编辑对话框,从JSP路径 下拉列表中选择链接对象即可。

2、超链接窗口 属性 是设置当超链接被激活时,打开的超链接显示在那个目标窗口。

超链接目标窗口有以下三种:

_self: 当超链接被激活时,在当前窗口刷新显示。

_blank: 当超链接被激活时,在新窗口中刷新显示。

目标窗口名: 指定窗口名,当超链接被激活时,在指定窗口中刷新显示。

该属性如果不写,缺省为_self。

后面的文章我们还会继续介绍如何在超链接中引用单元格的值和触发js函数。
引自:润乾报表知识库
相关文章:利用超链接传递下拉数据集的值特殊符号的处理如何使用序号函数给报表加序号动态设置滚动条高度宽度的方法

在润乾报表中使用超链接–引用单元格的值

润乾报表提供了为单元格设置超链接属性的功能。润乾报表提供的超链接可分为常规超链接、超链接中引用单元格的值,超链接中触发js函数三种类型。当超链接字符串需要根据单元格或者参数值动态生成时,很多情况下需要引用单元格的值。这里就介绍一下,如何在超链接中引用单元格的值,包括引用单元格的真实值和显示值。

例子说明:制作一个报表,报表标题:报表,报表中A2格展现的字段有真实值和显示值。点击:真实值链接,超链接会引用A2的真实值,展现报表文件 trueValue.raq,即展现客户信息表。当点击显示值连接,超链接会引用A2的显示值,展现报表dispValue.raq,即展现雇员信息表。

首先,准备两个报表trueValue.raq 和dispValue.raq,作为超链接引用单元格真实值和显示值后分别展现的报表文件,报表设计如下图

sjbb.png

然后,新建一个报表,先创建一个内建数据集ds1,数据集中的数据如下

zsjj.png

设置A4的内容:显示值,B4的内容:真实值;设置A4、B4的属性,显示-前景色:蓝色,字体:加下划线,设计好后,如下图

z设计.png

设置A2的值和显示值,如下图

zsj_xszsx.png

设置A4的超链接属性,如下图

sza4.png

设置B4的超链接属性,如下图

szb4.png

最后,发布报表,点击链接:显示值,则在超链接中引用的是A2的显示值dispValue.raq,会展现报表dispValue.raq,即展现雇员信息表;点击链接:真实值,则在超链接中引用的是A2的真实值trueValue.raq,会展现报表trueValue.raq,即展现客户信息表。如下图

zxg.png

这样就实现了在超链接中引用单元格的真实值或显示值。后面的文章我们还会介绍如何在超链接中触发js函数。
引自:润乾报表知识库
相关文章:利用超链接传递下拉数据集的值特殊符号的处理如何使用序号函数给报表加序号动态设置滚动条高度宽度的方法

在润乾报表中使用超链接–触发js函数

润乾报表提供了为单元格设置超链接属性的功能。润乾报表提供的超链接可分为常规超链接、超链接中引用单元格的值,超链接中触发js函数三种类型。前面的文章我们已经介绍过了前两种,这里将介绍如何在超链接中使用js函数。下面给出一个简单的例子。

首先,新建一个报表,在E1中添加文字:触发js函数,为了看起来明显,设置字体颜色为蓝色,并为字体加上下划线,设置E1 超链接 属性的值为:javascript:tips()。其中tips()为待触发的js函数,如下图

cfjssj.png

然后,在发布报表的页面上,编写js函数tips()如下

<script launguage=”javascript”>
function tips(){
alert(”被超链接触发的js弹出提示框!”);
}
</script>

或者,可以直接在该单元格的超链接属性的表达式中写javascript函数,如下图

biaodashi.png

此时就不用在发布报表的jsp页面上编写js函数了。

最后,发布报表,当点击报表E1中文字 :触发js函数,就会执行js函数,弹出提示框,如下图

cfjshsxs.png

这样就实现了在超链接中触发js函数。

注意:润乾报表中提供利用单元格的超链接属性触发js函数的接口,至于使用什么样的js函数,需要用户根据需要自己定义。例如,用户可以编写一个js函数,完成弹出新窗口展现报表的功能,函数举例如下

//在弹出新窗口中展现报表,并向该页面传递参数id的值
function show_product(id){
var strurl=’./chaolianjie.jsp?raq=test.raq&arg1=’+id;
window.open(strurl,”_blank”,” Width=650 ,Height=500,top=100,left=100″);
}

然后在报表触发单元格里写入如下超链接表达式,把A1的真实值传递到新窗口打开的报表展现页面。


引自:润乾报表知识库
相关文章:利用超链接传递下拉数据集的值特殊符号的处理如何使用序号函数给报表加序号动态设置滚动条高度宽度的方法

分页机制介绍

只要是报表就会有要分页的时候(纵向分页与横向分页),分页在web报表中也是最常见的一种需求。在快逸报表中为开发人员提供了3种强大的分页机制:按纸分页、按行分页、强制分页,通过这三种方式可以很方便的解决用户的各种分页需求。

按纸分页
在报表属性的分页方式中选择”按纸分页”,报表会根据纸张的大小来分页显示和打印。效果如下图:

快逸报表按纸分页设置

快逸报表按纸分页设置

设计器中的虚线为纸张大小的边界线,可以方便用户设计,报表设计时或者发布扩展时超出纸张大小则会分页。

按行分页
设定报表每页以固定行数在Web上展示和打印,设定界面如下图:

快逸报表按行分页设置

在浏览器中展示效果见下图:

快逸报表按行分页效果

我们可以看到一页中只显示设置的行数,10行。

强制分页
强制分页有类似在word中插入分页符或是在Excel中插入分隔符,通过行后分页和列后分页的设置强制报表在某行或者某列后分页,可以实现分组分页,或者特殊行分页等效果。
分组分页设置:

快逸报表分组分页设置

分组分页效果图1:

快逸报表分组分页效果

分组分页效果图2:

快逸报表分组分页效果

从上面的两个图我们可以看出分组分页的效果已经实现,每页只显示一个地区分组。

附注:强制分页的更多介绍可以参看:设计器-帮助-使用手册-用户手册(基础)-5.2.2.18行后分页

引自:报表工具知识库
原文链接: 分页机制介绍

主子表介绍

快逸报表web报表开发人员提供了3种主子表展现模式,分别是表单式主子表、嵌入式主子表、引入式主子表 。

表单式主子表


单表式主子报表的特点是用单个报表实现主子表的业务逻辑,效果见下图:

快逸报表表单式主子报表

嵌入式主子表

嵌入式主子报表的特点是在单元格中嵌入子报表,子报表和主报表的格线可以不对齐,子表之间格线也不对齐。子报表以独立报表的型式嵌入在主报表中,所以称为嵌入式主子表。

快逸报表嵌入式主子报表

引入式主子表

引入式子报表的特点是母报表单元格根据子报表的行数列数,双向同时扩展,子报表有几行几列,母报表中就扩展出几行几列,子报表占用母报表的空白行列,格线严格对齐。引入式的子报表扩展后,和母报表形成了一个统一的二维矩形单元格。

快逸报表引入式主子报表

报表开发人员可以根据实际项目需要选择合适的样式来解决主子表的需求。其具体区别和做法可以参照教程:设计器-帮助-学习教程-初级设计-第9章 主子表

引自:报表工具知识库
原文链接: 主子表介绍

免费版统计图介绍柱形图

免费版统计图介绍
统计图是web报表的增色剂,不仅能使报表看起来更美观,也能更形象直观的展示报表信息。在快逸报表免费版中为报表开发人员开放了以下多种功能强劲实用的统计图:

柱形图 三维柱形图 堆积柱形图
三维堆积柱形图 饼形图 三维饼形图
折线图 三维折线图 条形图
三维簇状条形图 堆积条形图 三维堆积条形图
散列图 三维簇状柱形图

各个统计图的显示效果如下:(统计图中的所有颜色都可以自己定义)

柱形图

快逸报表柱形图

三维柱形图

快逸报表三维柱形图

三维簇状柱形图

快逸报表三维簇状柱形图

堆积柱形图

快逸报表堆积柱形图

三维堆积柱形图

快逸报表三维堆积柱形图

饼形图

快逸报表饼形图

三维饼形图

快逸报表三维饼形图

多层三维饼形图

快逸报表多层三维饼形图

折线图

快逸报表折线图

区域图

快逸报表区域图

三维区域图

快逸报表三维区域图

条形图

快逸报表条形图

三维簇状条形图

快逸报表三维簇状条形图

散列图

快逸报表散列图

引自:报表工具知识库
原文链接: 免费版统计图介绍柱形图

语义层设计之指标

润乾报表语义层提供定义指标的功能。所谓指标,就是由表中的数据经过一些函数表达式运算而得到的结果,在报表设计中它的地位与字段完全相同。在语义层中定义了指标,用户在设计语义层报表时就可以像使用普通的字段一样使用指标,不用再写繁琐的字段间数据运算表达式了。下面就简单介绍一下,语义层中指标的定义和使用。

1、指标定义

在语义层设计器中,选定一个表,在右侧的【指标】标签页中,点击工具栏中的追加按钮,即可为表增加一条指标,我们还可以对指标的属性,如名称、表达式等进行设置,如下图

设置好的指标会显示在报表设计器语义层面板对应的指标项里,如下图

设计.png

2、指标使用

在设计报表时,就可以直接从语义层面板中像拖拽字段一样把预先设计好的指标拖拽到单元格。对于设置好样式的指标,拖拽到单元格后,会到有自己定义好的样式。

拖拽.png

这样,我们就完成了在语义层中定义和使用指标。

润乾报表提供的语义层中预先定义指标的功能,简化了报表的设计过程,为用户设计报表带来极大的方便。
引自:润乾报表知识库
相关文章:润乾报表:远程设计器使用语义层的一个问题解决;语义层设计之数据表视图;润乾报表语义层介绍;