61阅读

水晶报表教程-水晶报表(通俗易懂,优秀的入门教程)

发布时间:2018-03-08 所属栏目:通俗易懂的名字

一 : 水晶报表(通俗易懂,优秀的入门教程)

这里说一下水晶报表的坐标系和计量单位。

水晶报表的坐标系,以每个节的左上角为原点,往下往右两个方向递增延展。

计量单位是缇,与厘米的换算关系是:1厘米=567缇

所以在后面的代码中,你会看到我有这样的写法: 567*N 其实也就是N厘米。

另外还有ObjectFormat下面的属性,可以控制对象的隐藏与显示,这个很实用吧,呵呵。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

ReportObject是个通用对象,而其实际上又是一个具体的对象。他有各自的特殊属性。 以文本框为例,他就会多出一些特性,比如Text属性,这样我们可以修改到文本框的内容。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

另外说一下,前面没提到的数据字段,也可以这样操作。[www.61k.com)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

每个对象都有各自不同的属性,至于具体有多少对象,你可以按一下F2,

在CrystalDecisions.CrystalReports.Engine这个命名空间下,以 Object结尾的,基本都是。[www.61k.com)

2:子报表里对象的操作

子报表里的对象操作跟主报表是一样的,主要是要先找到这个子报表对象。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

这个只会定义子报表在主报表内的特性,不能设置到子报表内的部件

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

注意这个名称不是我们在子报表上点右键看到的名称,而是我们在设计子报表时指定的子报

表名称

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

3:参数的基本操作

参数是程序与报表交互的一个重要媒介,本节只做一个基础说明,后续的章节中会进一步介

绍。(www.61k.com]

新建一个参数p1

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

拖到模板上,会自动显示为 ?pa1

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

代码中传递参数给报表的代码为:

SetParameterValue 后面的几个参数依次为:参数名称,参数值,子报表名称(如果是子报表

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

当然,参数也可以传递给CrystalreportViewer,这里就不展开说了,用到的时候再说。[www.61k.com]

单纯从这个代码上来看,textbox和参数似乎可以等价

但是textbox一般只能用于显示一个字符串,但是参数则可以参与公式,过滤数据,控制对象的一些特性等等,用途更广泛一些。

好了,就到这里。这个基本上没有什么需要特别注意的。

修正记录:

20090707:

坐标系原点应该是每个节的左上角,而不是整个模板的左上角

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

【水晶报表内功心法】--数据过滤

============================================================

周末比上班忙,好不容易等老婆和孩子都睡下了,才终于能静下心来写点东西,不知不觉地

都是后半夜了。(www.61k.com)

在讲解了PULL和PUSH模式后,有一个问题随着而来。

两篇文章中,都从数据表中取了完整的数据,而实际应用中,我们一般只会用到其中的一部

分数据,也就是要对数据进行过滤。

数据过滤的操作,在这里我归并为两个要点:一是要实现数据过滤,二是要把过滤条件显示

在报表上。

1:PUSH模式下的数据过滤方法

这两个要点的实现,在PUSH模式下是非常方便的,我这里也只是做一下说明

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

加上过滤条件即可

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

很容易理解吧。

2:PULL模式下的数据过滤的几种实现方法

之前经常看到一些代码里,为了实现数据过滤,用PULL制作了模板,然后用PUSH方式

再SetDataSource一个动态记录集过去的错误做法。

PULL模式下,用到的是“记录选定公式”。

这里我直接在模板里操作一下,因为PULL模式是直接连数据库的,所以可以立刻看到效果

我们的初始模板是这样的,

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

目标是要显示出图上粉色标注出的数据,也就是Scores <=11

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(1)在模板上点右键,插入,特殊字段,记录选定公式

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

看到这个图,估计有些朋友会想到前面我们文章里用到的ReportObject,不错,这个也是报

表对象

不过我们这里暂时不是用报表对象的操作功能

(2)在这个“记录选定公式”上点右键,选“选择专家”

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(3)在这个界面上选我们要控制的字段“Scores”,点确定

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(4)在后面的界面上,设定条件为 小于或等于 11

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

点“显示公式”,可以看到我们设置的条件,在这个公式框里,可以输入更复杂的过滤条件,

如多个字段的过滤条件等

要注意,该过滤条件,必须符合当前数据的语法。[www.61k.com]

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

确定后我们要的结果就出来了,上面是选定的条件。[www.61k.com]

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

后面要说很重要的一点,就是这个过滤条件,是推到服务器端去执行的,而不是先拉下数据,

再过滤

下面是我在执行过程中在SQL性能监视器中的抓图(这个图可能被被缩小,请另存到本地

看)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

注意绿色的部分,条件已经直接附加上去了。(www.61k.com)

(5)如果要删除条件的话,仅仅把前面在模板上的那个记录选定公式拿掉是不行的。

再次进入刚才我们设置的那个界面,点“删除”才可以。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(6)

这个是模板上的设定,而且是个固定的值,那么怎么结合到代码中,实现灵活控制呢?其实

代码很简单。(www.61k.com]

前面是讲解了原理的,实际上操作中,根本不用上述的任何操作。(白讲了?呵呵,我更希

望大家能明白他具体是怎么去实现的)

只要在代码中加一行就可以了。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

这是方法一。(www.61k.com)

(7)延续上面的例子,忽略掉(6),结合起来参数来实现。这个实现起来稍微有点繁琐,

不过在某些场合用的到。

新一个数值型参数testP

(8)编辑我们的记录选定公式,使其大于参数{?testP}

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(9)预览一下,输入13

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

效果出来了

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

再跟踪一下SQL,仍然是组合好传给数据库的

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(10)写代码,使用此方法,因为记录选定公式已经内嵌在报表中,代码中只需要控制参数

就行了。(www.61k.com]

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(11)部分人的参数是这样写的。(www.61k.com]。好复杂。。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

之所以要说一下这个复杂的代码,是因为用这个复杂代码的目的,本来是为了做区间参数和多值参数的

其目的主要是为了实现过滤条件里的

{表名.字段} in (1,2,3,4,5) 或 {表名.字段} between 100 and 200这种效果

而实际上,这样的代码完全可以写在我们所说的方法1里面

myReport.RecordSelectionFormula = "{RPT_CR_TEST1.Scores} <=11";

界面上加一个简单的文本参数提示即可,不需要那么复杂,呵呵。

给使用这种方法的朋友,减轻点工作量,呵呵。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

其他:

1:实际上PUSH模式报表也可以用这种方法的,操作方法和基本代码都一样 但是因为其本身不连接数据库,所以这个条件不会被推送到数据库执行

而是在当前数据下依赖于报表能力的一个过滤,反而增加了报表的负担和数据的传输量 一般是不建议使用的。[www.61k.com)

写完这一篇,整个数据层面的基础体系就基本完善了。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

【水晶报表内功心法】--完美Excel(上)

============================================================

本来这一篇要放到很后面去写,不过论坛里有人问到,就提前了。[www.61k.com)

很多人说水晶报表导出的Excel太难看,或者导出的Excel根本没法用,其实水晶报表是可

以完整导出到Excel的

当然,水晶报表与其他基于CELL的报表工具相比,对Excel的支持是很弱的。而所谓的完

美,是相对的。

我抓了大量的操作图来进行解说,或许大家会体会到为什么我会说水晶报表是一个操作性很

强的工具的原因了。

一般我们画格线的时候,导出的Excel要么是乱的,要么是没格线。

有的朋友说我导出的时候选“显示网格线”就可以啊。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

但是:

1: Web项目导出时没这个项目,只在Winform下有

2:用户是不会愿意去做这个事情的

下面的方法,是基于字段的边框来实现的,不是线条和框。本篇的目标是实现将报表导出到

Excel后,显示成这样一个效果

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

第一步:基本操作方法

准备一个空的报表

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

把几个字段拖上去

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

为了便于精细操作,我们把模板放大一点。(www.61k.com]

视图-缩放,选一个150%

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

这样我们的模板就放大了,注意字段和字段之间是有间隙的(当然,不用放大也看得到,呵

呵)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

大家注意点这个图上有很多小点,这个就是报表的操作精度。[www.61k.com]

为了精细操作,设置这个精度小一点

进入如下菜单项目,

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

设置最小单位为0.1,当然还能再小,不过太小了反而操作起来更困难

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

然后我们再看,那个小点之间的间距明显变小了

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

保持第1个字段不动,点第2个,平行左移,不要太用力,很容易就拉到前一个字段的右边

沿了。(www.61k.com]

做多了,就会有手感。一拉就行了。表头上的文本也会跟着动

依次操作完后,效果是这样的,注意,两个字段之间的间隙已经没有了

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

下面简单讲解一下一些简单的操作机器

横线字段的对齐,选中要对齐的字段(可以划拉一下选中,或者是Ctrl选),在其中一个

上点右键,可以设置对齐方式和大小比例

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

纵向字段操作也是类似

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

好了完成了第一步。[www.61k.com]

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

第二步:加格线

选中表头上的所有字段,在其中一个上点右键,格式化多个对象

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

在出来的界面上,切换到模板标签页,设置边框线。[www.61k.com)为了方便描述,我就简称为:上下右

也就是上边下边和右边框有边线。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

出来的效果如下,左边第一个字段有个小缺口

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

,补一下。(www.61k.com)

在第一个字段上点右键,格式化对象,在边框标签页上,设置左边框为单线,其余不要动.

然后选中详细资料节上的字段,设置边线为:下右(下边沿和右边沿单线),

再把第一个字段补一个左边沿单线,出来如下效果。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

大功告成,预览一下

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

导出来看看,注意选第一个XLS格式

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

如果出来这个界面,不要管,点确定然后继续

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

看一下效果吧

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

看这效果我来具体说一下原理。[www.61k.com]

竖线的部分我就不讲了,单独讲讲横线的为什么这么设。

我们知道页眉是每页固定的,每页只出现一次因为我们设置了上下边框都是横线。那么他的

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

下边沿就是显示为一条横线,仅贴在页眉的下边沿。[www.61k.com]

而我们在设置详细资料节的时候,设置了下边沿。因为详细资料节是循环的,于是每行的下

边沿又刚好是下一行的上边沿。

只有第一条记录上边沿是没有的,而刚好页眉下边沿的线就成为这条记录的上边沿。

所以整个数据就闭合起来了。

第三步:稍微完善一下

左边空出来一列?再改进一下吧。

进入模板,把所有的字段全选中,然后平行往左拖,拖到最左边为止。

实际上不是绝对的左边,还是有个小缝隙的,不过没关系,只要不能再拖了就行

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

继续向着我们的目标(第一个图迈进)

选中表头上的所有字段,点右键,格式化多个对象,进入边框标签页

下面的颜色处,勾选“背景”,我们选个银色,然后确定

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

界面是这样的,线条没了。[www.61k.com)这样操作,从第2个字段开始,在字段上点右键,移动,移动到

底层

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

设置好了就是这个模板效果

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

然后再预览一下(为了便于显示,我稍微改了下一些字段的样式)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

导出来,效果就是我们要的

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

补充说明:

1:不适用于“自动换行”需求的报表

2:在Web项目中可能会出现边框不显示的情况,这是VS2005里版本的BUG,这样修正

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

3:如果发现详细资料节上有隐藏的空行,那应该是你的字段没有顶到详细资料节的上下边

沿

把字段往上拖,顶到详细资料节上边沿。(www.61k.com)鼠标滑到详细资料节的下边沿,会出现红色形状的

那个标记

实际上不是红的,这个是我画上去的。。按下去,往上拖,然后下边沿就往上走了。顶到字

段的下边沿即可

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

4:特别说明一下数据如果分页的话,要把表头放在页眉上。(www.61k.com)不然导出的文件里页眉会重复。实际上放到页眉上也可以(某些情况可能确实需要放到页眉上),这个时候导出的时候用代

码控制一下

基本原理如下:

报表页眉上方一个同样的表头,抑制显示掉。页眉上放一个表头,正常显示。页面展示和打

印时,按原样打印。

而导出时,控制模板的报表页眉显示,页眉抑制显示,然后用代码导出,从而实现导出效果。

5:NULL值的处理

如果数据中存在NULL值,那么导出和显示的时候,边线都就没有了。

报表中户多了很多不规则的“窟窿”。

这个时候有两种解决方法,一是传入报表之前,把数据处理成非NULL值,二是在报表端

处理

针对有NULL的字段,做一个公式,如xx,把报表里的原始字段删掉,把这个xx拖到原来

的位置,设置大小位置边线,跟原始字段的设置一样

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

其他数据类型以此类推。(www.61k.com]

就是要在字段等于null的的情况下,给一个空格(而不是空)进行占位,如果非NULL就显示原来的值。

有时候会出现无效的情况,就把isnull判定放到前面

if {字段}='' or isnull(

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

字段) then

改为

if isnull(字段) or {字段}='' then

【非常感谢llsen的提醒,另外还纠正了我不少笔误。】

这是完整的一篇,可以独立成文。

下篇主要是讲解横向和纵向上的单元格合并,也就是这个效果。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

【水晶报表内功心法】--完美Excel(下)

主要讲解了如何做一个基础的到处样式,

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

本文在上文的基础上,实现类Excel的一个操作,就是单元格横向和纵向合并。[www.61k.com)以及加底色的效果,如下图

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

以前文的基础进行改造

1:横向单元格合并

删除掉后表头最后一个文本项

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

然后把前一个项目拉到与最后一个字段等宽,注意右边要对齐

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

预览一下

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

导出效果

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

很简单吧,呵呵

2:纵向合并

我们仅以第一列为例,每三行合并做一次合并。[www.61k.com)

其原理是这样的:

根据数据序号,当是3的倍数的时候,线条显示。如果不是3的倍数,线条就不显示。

示意图

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

在一个3行的区块内,把蓝色标识的两条线拿掉。(www.61k.com]

可能你不是太理解,继续往下看

选中第一列,点右键,格式化对象,在“边框”标签页上设置底边的边框后面的公式

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

上面绿色的注释是原来自带的

特别说明一下,考虑到可能数据不是3的倍数,那么最后一行可能就是空白了(线条被抑制显示掉了)

所以增加了一个onlastrecord的保护

onlastrecord是水晶报表中最后一条记录的标识。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

设置好后看预览效果,我做了放大。[www.61k.com)注意每个行之间有个缝隙。

这就是这个方案的缺点。这个缝隙,就是我们线条设置为CrNoline后的空隙。

因为第1个字段跟后面的字段是等高的(包含边框的高度),去掉边框后,它就比后面的字段少了一条线的高度

于是空隙就出来了

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(此问题在本文的最后已经得到完善)

导出来看一下,效果还是很好的,呵呵

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

合并单元格里的内容我没有改,因为这个数据不是太合适。[www.61k.com)

这个可进一步参考我之前写的《如何实现中式报表的组名合并风格》

3:加底色

按住Ctrl,选中详细资料节中要加底色的列。在其中一列上点右键

进入到图中所示的界面上,勾选背景色。点“更多”,选择一个合适的颜色

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

注意色盘中的颜色,右侧可以看到RGB值,记录下来 255,255,128

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

然后点确定,这时候所有的行都染色了。(www.61k.com]而且会出现压线的情况(部分竖线不见了) 先不管,先按照之前,把后面的字段依次移动到底层

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

然后继续将颜色限定在第3行,再次选中这几个字段,点右键,在出来的界面上,编辑"背景"后面的公式(x+2)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

3的倍数的行上显示我们要的颜色,否则就不显示背景色,预览效果如下

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

再后面就简单了,在报表页脚上增加一个汇总和一个文本框,设置边框为:下右

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

设置好对齐(可参考前文的方法),然后设置其背景为我们要的颜色

预览效果如下

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

导出效果如下

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

有时候我们会发现,有些地方怎么对都对不齐,比如我们这个图,放大一点也可以看出来

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

而实际上,导出来的效果仍然是好的,这是设计器本身的问题

说明:

有时候对齐确实很困难,可以用设定属性的方法来更精确的定位,就是麻烦一些 点中某一字段,看属性里面,可以设置其:Top,width,Left,Height

注意这个Top是从每个节的左端点开始算起的,不是整个报表的左端点。(www.61k.com)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

版本修订:

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

20090709:

很意外,没想到这个方案的最大问题,就是有间隙的问题,竟然被解决了。(www.61k.com)。。 解决方法:

因为线条在世纪导出Excel的时候是不导出的,

所以用在原来有空隙的位置上覆盖一条线,盖住原来的缝隙,

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

注意线条的起始端点位置。

显示效果如下:

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

这样既保证了显示效果,又不影响导出效果,非常不错。

(PS:

这个方法不是我想出来的,是SAP的技术人员想出来的,

最近SAP派了几员大将来解决历史遗留问题,看来我也终于能更新更新知识了。呵呵~~)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

【水晶报表内功心法】--第一阶段小结

============================================================

今天数据库狂慢,数据库服务器是百万大元的超强机器,还是被折腾得半死不活的。[www.61k.com)刚好有点时间,写一下这篇。

本文是第一阶段的小结,第一阶段主要讲解了推拉模式,以及基本操作,和数据的过滤。它的主要目的就是解决怎么把数据与报表的交互问题。

前后历时近一月,反响一如我当初所料,不会很强烈。而且很多人,也是因为推荐到首页后,习惯性的顶一下。并没有认真的去看内容。

毕竟水晶报表的应用范围比较小。不过我也很高兴能看到几位朋友,能真正的去看了,还参与了讨论。

我本来的目的,就是为了系统地介绍水晶报表的应用,一来是方便大家在用到的时候查阅和学习,二来也能减少自己的重复回复。

下一阶段,则主要讲解报表在拿到数据后的进一步处理。

大致会分为以下几个章节:

参数、函数与公式、运行时总计

分组

子报表

交叉表

图表

仍然是讲解基本概念和应用技巧以及应用场景,这些讲完,也基本完成了整个报表功能的基本介绍了。这些预计在7月份完成。

有时间的话,我会零散讲一下水晶易表(水晶报表的兄弟产品)的应用,看一下这个工具的酷炫效果。

1:PULL模式和PUSH模式的选择

PULL执行效率高,开发简单,适用于WinForm程序,用户不是很多的系统。

但是多了一个数据库连接,而且这个链接的占用时间还比较长,所以不适合用户多的系统。 有一种特例,就是数据量特别大的情况,我推荐用PULL。

PUSH则很灵活,可以承接任何数据源。比如不是从数据库里直接出来的数据,或者是来自于WebService等其他应用的数据接口。

2:WebForm开发的一个重要技巧:小代码,大作用

在前面的文章中,我一直是用WebForm演示的,主要是因为 HTTP是无状态的,在此链接的操作,不会带到下一连接中。

所以我们经常会遇到这样的情况,当前显示好的,在翻页、导出、打印等动作的时候,出出现无数据,或者需要重新登陆数据库的提示。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

这是因为这些动作都重新触发了页面,导致我们前一次的操作丢失了。(www.61k.com]

所以之前的代码,我一直是写在Page_load里的,但是这样一是不能解决所有的问题,特别是涉及到有参数传递等情况。

二是可能会多次请求数据库,导致资源的消耗。

前面说到既然是状态丢失,那么我们可以用.Net里的session,cache或viewstate来进行保持状态。

这里我用session做一个范例,场景是这样的:

一个PUSH模式的报表,带一个参数p1.

界面上有一个Button,点击后展现报表。然后报表可以进行翻页、打印和导出(这些是工具条实现的,不进行编码实现)而不会出现错误提示。

其实只要改造两处地方即可,注意红色的部分。

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

//使用Session保持ReportDocument对像

//每次页面更新时,不再需要重新走数据库

//注意:如果是VS2008,这段代码要放到Page_Init事件中

If (Session["myRpt"]!=null) then

{

CrystalReportViewer1.ReportSource = (ReportDocument)Session["myRpt"];

}

}

//点击按钮后,报表进行第一次呈现

protected void Button1_Click(object sender, EventArgs e)

{

//连接字串

String connstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:CrZentestall.mdb;";

OleDbDataAdapter da = new OleDbDataAdapter();

OleDbConnection cn = new OleDbConnection(connstr);

da = new OleDbDataAdapter("SELECT * From RPT_CR_TEST1", cn);

DataSet2 dt1 = new DataSet2();

da.Fill(dt1, "RPT_CR_TEST1");

ReportDocument myReport = new ReportDocument();

string reportPath = Server.MapPath("crystalreport1.rpt");

myReport.Load(reportPath);

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

//绑定数据集,注意,一个报表用一个数据集。[www.61k.com) myReport.SetDataSource(dt1.Tables[0]);

myReport.SetParameterValue("p1","参数测试"); CrystalReportViewer1.ReportSource = myReport;

//保存到Session

Session["myRpt"]=myReport;

}

}

本文将持续更新一段时间。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

【水晶报表内功心法】--公式、函数与运行时总计

============================================================

一如既往地忙碌,一如既往地加班。[www.61k.com)

这个月马上就要过去了,回头一望,本月最令人激动的事情就是去了美女如云的 ChinaJoy。

附照片一张。

本文的主题是:函数与公式、运行时总计。

本文还是以基础讲解为主,后面的一些实际场景中会有具体的使用

1:公式

公式可以说是水晶报表里精髓,其重要性有点像Excel的宏一样。

公式基本上可以分为两类,一是格式化类。一是运算类。当然,格式化的公式也是需要运算

的。

水晶报表的一些内置的功能,本身也是依赖于公式的,只是做了封装。

公式有两种语法:crystal语法和Basic语法,没有根本性差异。

如果你之前用过Basic类的语言,那么这个就非常容易了。

可以从此处下载一个独立版本的水晶报表帮助文档,方便查阅。

《CR XI水晶报表开发官方中文帮助文档》

格式化类主要出现在如下位置:

比如,我们要把某个列中值等于12的值设置为蓝色,等于15的设置为红色,其余的设置为

黑色。

在字段上点右键,格式化该字段,

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

这个图上的(x+2)后面就是一个公式,如果里面没有内容,这个图标就是这种默认的颜色。(www.61k.com)

如果里面有内容,则图标会变成红色。

本文的示例数据延续前文中的例子

实例1,如果用户分数等于12,则显示为蓝色,如果等于15分则显示为蓝色,其他显示为

黑色。

点击上图中的(x+2),进入公式编辑界面。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

我抓了个大图,里面做了一些标记。(www.61k.com)

公式本身就比较简单了,不必再进行说明。

注意前面的图上左上角的两个指向,x+2是指检查该公式是否正确,检查完毕后停留在当前

界面

保存并关闭,则是先检查后保存公式并且关闭本界面,回到前一界面上。

好了,我们再运行一下程序,效果就出来了。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

实例2,控制每3条记录换页

进入节专家

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

点中“详细资料节”,勾选后面的“在后面新建页”,然后编辑后面的公式为

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

如果公式有错误,则会有类似下面的提示,当然,根据错误的不同,提示也不一样

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

再预览一下,之前我们显示1页的数据,已经分页了。[www.61k.com]注意上面的 1+,说明页数多于一页。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

但是并没有显示实际页数,这是水晶报表的一个优化机制。如果是多页的数据,它只显示第

一页

有点类似于我们的一些数据库分页操作一样。但是这个也带来很多批评。

而实际上,解决方法也是有的。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

实际上也是模拟了我们的一个手工动作,就是先点击跳到最后一页,然后再切到第一页。(www.61k.com)

这个动作用户是感觉不到的,尚可以接受。

前面的是两个格式化类的公式,下面说一下运算类公式。

实例3,如果分数 <15则显示不合格,等于15则为合格,大于15则为优秀

这个就是对数据的再加工了。

新建一个公式字段x1

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

然后把x1拖到界面上,放到原来数据的后面,预览后就显示

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

实例4,代码中修改公式

新建一个公式字段x2,里面就放一个现有字段即可

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

显示效果如下

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

恩,没什么感觉吧。[www.61k.com]

另外做一个公式字段x2title,作为x2这一列的题头

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

然后代码里控制一下:

C# code

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

特别注意的是,原公式中返回的是字符串的话,要把引号带进去。[www.61k.com]

myReport.DataDefinition.FormulaFields["x2title"].Text = "'得分情况'";

再看效果

这个可以实时变化的字段,有很多用处的。

用过的朋友应该记得,在分组、图表、交叉表的时候,都可以使用公式字段作为运算字段的

如果我们在代码中控制公式里的字段变化,那么自然也达到了动态分组、动态图表等效果了

类似的应用可以参考:

《在水晶报表中实现任意选择指定字段显示-模板及C#升级版》

《用公式实现动态设置图表的轴数据项 》

这个是单一公式,公式之间可以嵌套使用,有时候也可以结合全局变量进行多公式协作

这些在后面的一些实际应用场景中会讲到。

2:运行时总计

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

我们知道报表里内置了求和和计数等汇总功能,但是如何只求部分数据的和呢?

实例5:

求大于15分的所有分数的和,求大于15分的人的个数,并求得平均值

新建一个运行时总计字段Rtotal0,这个用于获取分数和

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

注意在“求值”的位置,编辑后面的公式:

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

新建一个运行时总计字段Rtotal1,这个用于获取人数

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

注意这个求值也是用了公式的,所以(x+2)是红色的,公式的内容跟Rtotal0一样。[www.61k.com)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

因为都是同样的规则。[www.61k.com)

新建一个公式字段x3,

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

这个公式是个小典型,里面用到了变量。

实质上跟我们在程序里用的变量差别不大。

因为考虑到求平均值时可能出现分母为0的情况,所以进行了一个保护。

注意公式的默认语法是Crystal语法,其赋值方式为 x:=5,x=5 则是一个逻辑判断 (有时候又可以混用,不过最好按照规则走)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

看一下实际的运行效果

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

运行时总计,就是数据从上往下显示时的一种数据处理,

他的数据只能从上往下走,按照一定的规则处理其中的一些数据。(www.61k.com]

它一定要出现在数据的下面(或与数据平行),而不能与其他Max,Sum等聚合函数一样可以出现在数据之前。

实质上,运行时总计,本身就是公式的一种特殊应用。

3:函数

函数其实也是基于公式的,跟我们普通程序一样。如果有很多重复的公式,那么可以提炼成函数进行复用。

我们就以前面的公式x1进行改造。

模板上不能直接进入函数编辑界面,先要进入公式编辑界面。

新建一个函数,setTitle

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

先使用编辑器,

直接把现在的公式拷贝进去,注释一份做参考,实际一份做改造 点击保存的时候,有报错。[www.61k.com)函数中是不能直接使用字段的。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

我们做一个变量x来接后面可能的输入值,可能是字段,也可能是其他

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

然后我们把公式x1改掉

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

还是可以实现同样的效果。(www.61k.com]

前面的界面上我们看到另外一个“使用提取器”的按钮。 我们也来用一下

新建一个函数setTitle2,点击使用提取器按钮

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

这个就是从现有的公式中提炼成函数的,很方便吧,呵呵。(www.61k.com]

我们选中x1(为了方便演示,我把函数删掉,恢复到原来的公式内容),这时候工具会自动把数据库字段设置为参数。

点击确定后,函数就建好了,可以再进行适当编辑

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

其他:

公式可以通过与参数的结合,实现更复杂的效果。[www.61k.com)

函数是基于公式的,公式是可以直接调用函数。

函数间可以互相调用。

函数中不能使用报表参数字段(parameterField),不能使用数据库字段

公式和运行时总计中则都可以使用。

本文中的公式相对比较基础一些,后面开始进入更复杂的阶段。

主要是分组、图表、子报表及交叉表,这些部分的处理方法与之前稍有不同

基础应用之外,还会结合一些实际场景,并且会综合之前讲解的一些内容,做一些深入。

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

【水晶报表内功心法】--信手拈来,掌控对象 之 多值参数传入

在前文【水晶报表内功心法】--信手拈来,掌控对象 中,讲解了参数的输入方法。[www.61k.com] myReport.SetParameterValue(参数名称,参数值,[子报表名称]);

比如我们这样传参数值:

myReport.SetParameterValue("x1","我是参数值");

但是如何传入多值参数,或者是区域值参数呢。

实质上我们再来看一下SetParameterValue方法,

Title

public virtual void SetParameterValue(string name, object val, string subreport)

CrystalDecisions.CrystalReports.Engine.ReportDocument 的成员

摘要:

设置子报表中的参数字段的当前值。值可以是基元、ParameterValue、上述两种类型中某一种的数组或 ParameterValues 集合。

参数:

name: 参数字段的名称。

value: 表示一个有效的参数值。可以是基元、ParameterValue、上述两种类型中某一种的数组或 ParameterValues 集合。

subreport: 参数字段所属的子报表的名称。

value 是可以是一个ParameterValues的,所以解决方法也来了。

我们首先建立一个多值参数px,一个区域值参数py。

注意如果直接把px拖到模板上,会只显示第一个值。而py则直接不显示。

所以为了验证效果,做两个公式

fx: join({?px},',') //将值用,组合成一个字串

fy:Minimum ({?py}) //取最小的端点

这两个公式主要是为了验证显示效果的,与代码无关。

代码如下:

1 //多值

2 ParameterDiscreteValue pv;

3 ParameterValues pvs = new ParameterValues();

4

5 for (int i = 0; i < 5; i++)

6 {

7 pv = new ParameterDiscreteValue();

8 pv.Value = i.ToString();

9 pvs.Add(pv);

10

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

11 }

12

13 myReport.SetParameterValue("px", pvs);

14

15 //区域值

16 pvs = new ParameterValues();

17 ParameterRangeValue pv1=new ParameterRangeValue(); 18 pv1.StartValue=100;

19 pv1.EndValue = 200;

20 pvs.Add(pv1);

21 myReport.SetParameterValue("py", pvs);

这个是通过ReportDocument来传值的。(www.61k.com]

当然也可以传给CrystalReportViewer。

二 : 水晶报表使用教程-CrystalReportsManual_Sun

工欲善其事,必先利其器.

下载链接:

http://cid-cefa84cbb[www.61k.com)247ad90.skydrive.live.com/self.aspx/.Public/%e6%b0%b4%e6%99%b6%e6%8a%a5%e8%a1%a8%e4%bd%bf%e7%94%a8%e6%95%99%e7%a8%8b-Crystal%20Reports%20Manual.chm

三 : 水晶报表Crystal Reports培训教程 35

Crystal Reports 用户指南

Crystal Reports 11

专利Business Objects 拥有以下美国专利,涵盖 Business Objects 提供和销售的产品:

5,555,403、6,247,008 B1、6,578,027 B2、6,490,593 和 6,289,352。

Business Objects、Business Objects 徽标、Crystal Reports 和 Crystal Enterprise 是

Business Objects SA 或其附属公司在美国和其他国家/地区的商标或注册商标。此处提到

的所有其他名称可能是各自所有者的商标。

Copyright (C) 2004 Business Objects。保留所有权利。商标版权所有

目录

第1章 Crystal Reports 11 简介

1.1关于 Crystal Reports .....................................21

1.2关于本指南 ...............................................22

1.2.1联机帮助 ...................................................22

1.2.2Business Objects 信息资源 ..................................22

第2章 Crystal Reports 11 中的新功能

2.1介绍 .....................................................23

2.2强大的报表创制功能 .......................................23

2.3提高的实用性 .............................................24

2.4扩展的应用程序开发功能 ...................................25

2.4.1一般说明 ...................................................25

2.4.2报表应用程序服务器 (RAS) ...................................26

2.4.3报表设计器组件 (RDC) .......................................27

2.4.4Crystal Reports .NET .......................................27

2.5与 BusinessObjects Enterprise 11 的集成 ..................28

第3章 安装 Crystal Reports 11

3.1安装 Crystal Reports 11 ..................................30

3.2安装要求 .................................................30

3.3在本地计算机上安装 Crystal Reports .......................31

3.4创建安装点并从网络服务器进行安装 .........................32

3.4.1创建 Crystal Reports 的安装点 ..............................32

3.4.2从网络安装 Crystal Reports .................................33

3

4Crystal Reports 用户指南

3.5自定义安装 ...............................................34

3.6运行无提示安装 ...........................................35

3.7升级 Crystal Reports 组件 ................................37

第4章 快速开始

4.1学习如何使用 Crystal Reports .............................39

4.1.1示例数据 -- Xtreme.mdb .....................................39

4.2报表创建向导 .............................................39

4.2.1标准 .......................................................

4.2.2交叉表 .....................................................

4.2.3邮件标签 ...................................................

4.2.4OLAP .......................................................

4.3.1开始之前 ...................................................

4.3.2创建报表 ...................................................

4.3.3记录选定 ...................................................

4.3.4分组及排序 .................................................

4.3.5完成报表 ...................................................4040404041425255584.3新用户快速入门 ...........................................41

4.4高级用户快速开始 .........................................59

第5章 报表设计概念

5.1基本报表设计 .............................................64

5.2决定报表内容 .............................................64

5.2.1说明目的 ...................................................

5.2.2确定报表布局 ...............................................

5.2.3查找数据 ...................................................

5.2.4操作数据 ...................................................

5.2.5确定打印区域特性 ...........................................6465666768

5.3设计纸张原型 .............................................69

第6章 建立报表简介

6.1报表创建选项 .............................................70

6.1.1报表创建向导 ...............................................70

6.1.2另一个报表 .................................................70

6.1.3新建报表 ...................................................70

目录5

6.2选择数据源和数据库字段 ...................................71

6.2.1数据库专家 .................................................71

6.2.2字段资源管理器 .............................................73

6.3关于报表设计环境 .........................................74

6.3.1“设计”选项卡 ..............................................74

6.3.2“预览”选项卡 ..............................................77

6.3.3HTML 预览选项卡 ............................................80

6.4创建新报表 ...............................................81

6.4.1选择数据源 .................................................81

6.4.2添加表 .....................................................82

6.4.3链接多个表 .................................................82

6.4.4将数据放在报表上 ...........................................84

6.4.5格式化数据 .................................................90

6.4.6记录选定 ...................................................90

6.4.7分组、排序和汇总数据 .......................................90

6.4.8对汇总数据使用深化选项 .....................................91

6.4.9使用缩放功能 ...............................................92

6.4.10插入页眉和页脚 .............................................92

6.4.11将标题页添加到报表中 .......................................93

6.4.12将汇总信息添加到报表中 .....................................93

6.5浏览报表和处理多个报表 ...................................94

6.5.1报表资源管理器 .............................................

6.5.2工作台 .....................................................

6.5.3依赖项检查器 ...............................................

6.5.4打开和停靠资源管理器 .......................................94969798

6.6超出基本报表 .............................................99

第7章 BusinessObjects Enterprise 储备库

7.1BusinessObjects Enterprise 储备库是什么? ..............100

7.1.1工作流程 ..................................................101

7.2访问 BusinessObjects Enterprise 储备库 ..................101

7.2.1工具栏 ....................................................102

7.2.2Enterprise 项文件夹 .......................................103

水晶报表Crystal Reports培训教程 35_水晶报表教程

6Crystal Reports 用户指南

7.3在储备库中添加文件夹 ....................................104

7.4在储备库中添加项目 ......................................104

7.4.1添加文本对象或位图图像 ....................................105

7.4.2添加自定义函数 ............................................105

7.4.3添加命令 ..................................................106

7.5在报表中使用储备库对象 ..................................106

7.5.1在报表中添加文本对象或位图图像 ............................

7.5.2在报表中添加自定义函数 ....................................

7.5.3在报表中添加命令 ..........................................

7.5.4将值列表添加到参数中 ......................................106107107108

7.6修改储备库中的对象 ......................................108

7.7在报表中更新连接的储备库对象 ............................109

7.8从储备库中删除项目 ......................................109

7.9在储备库中使用“撤销”命令 ..............................110

第8章 设计优化的 Web 报表

8.1概述 ....................................................111

8.2通过 BusinessObjects Enterprise 缩放 ....................112

8.2.1BusinessObjects Enterprise 中日期函数的求值时间 ...........113

8.3作出正确的设计选择 ......................................114

8.3.1使用更快的报表格式 ........................................

8.3.2在实时数据和已保存数据之间选择 ............................

8.3.3设计汇总报表 ..............................................

8.3.4慎用子报表 ................................................

8.3.5有效地使用其他设计元素 ....................................

8.3.6设计报表以最大程度地利用数据共享 ..........................

8.4.1选择最快的数据库和连接 ....................................

8.4.2使用表索引 ................................................

8.4.3改进表链接选择 ............................................

8.4.4使用线程安全数据库驱动程序 ................................

8.4.5使用存储过程进行更快的处理 ................................1141151161171181181191191201211218.4优化您的制表环境 ........................................119

目录7

8.5使用增强的记录选定公式 ..................................122

8.5.1下推记录选定 - 示例 ......................................

8.5.2记录选定性能提示 ..........................................

8.5.3编写高效记录选定公式的策略 ................................

8.5.4将参数字段合并到记录选定公式中 ............................

8.5.5适时使用 SQL 表达式 .......................................

8.6.1在服务器上执行分组 ........................................

8.6.2在服务器上分组的好处 - 示例 ..............................

8.6.3将 SQL 表达式用于分组、排序和总计 .........................

8.6.4将 SQL 表达式用于 Case 逻辑 ...............................

8.6.5在可能的位置插入汇总和运行总计字段 ........................1221231241251271281281291301308.6改进分组、排序和总计 ....................................128

第9章 记录选定

9.1选择记录 ................................................131

9.1.1使用“选择专家” ..........................................132

9.1.2使用公式 ..................................................133

9.1.3“选择专家”和“公式编辑器”的相互作用 ....................134

9.2使用公式模板 ............................................135

9.2.1记录选定公式模板 ..........................................135

9.3将记录选定下推到数据库服务器 ............................137

9.4记录选定公式疑难解答 ....................................137

9.4.1修正未生成数据的选定 ......................................139

第10章 排序、分组及总计

10.1数据排序 ................................................14110.1.1理解排序选项 ..............................................14110.1.2单一或多个字段排序 ........................................14210.2将数据分组 ..............................................14410.2.1创建自定义组 ..............................................14510.2.2有条件地对组进行排序 ......................................14610.2.3将组内记录排序 ............................................14710.2.4组选定 ....................................................148

8Crystal Reports 用户指南

10.2.5按间隔将数据分组 .........................................10.2.6根据公司名称的第一个字母分组 .............................10.2.7分层次对数据分组 .........................................

10.2.8编辑组 ...................................................15115315415910.3汇总分组的数据 ..........................................16010.3.1根据汇总值对组排序 .......................................16110.3.2选择最前或最后 N 个组或百分比 ............................16110.3.3有条件地选择处在最前或最后的组或百分比 ...................16310.4小计 ....................................................16410.4.1数据小计 .................................................16410.4.2扩展价格并小计扩展 .......................................16510.5百分比 ..................................................16610.5.1计算百分比 ...............................................16610.6组页眉 ..................................................16710.6.1创建组页眉 ...............................................16710.6.2取消组页眉 ...............................................17110.6.3深化组页眉 ...............................................171

第11章 运行总计

11.1了解运行总计 ............................................17211.1.1运行总计如何工作 .........................................17211.2创建运行总计 ............................................17311.2.1在列表中创建运行总计 .....................................11.2.2为组创建运行总计 .........................................11.2.3创建条件运行总计 .........................................

11.2.4在一对多链接关系中创建运行总计 ...........................17317417517611.3使用公式创建运行总计 ....................................178

第12章 多节报表

12.1关于节 ..................................................18012.2使用节 ..................................................18012.2.1插入节 ...................................................180

目录9

12.2.2删除节 ....................................................18112.2.3移动节 ....................................................18112.2.4合并两个相关节 ............................................18212.3拆分并调整节大小 ........................................18312.3.1拆分节 ....................................................18312.3.2调整节大小 ................................................18312.4在报表中使用多个节 ......................................18412.4.1防止可变长度的对象相互覆盖 ................................18512.4.2当字段为空时消除空白行 ....................................18512.4.3有条件地添加空白行 ........................................18612.5套用信函 ................................................18712.5.1使用文本对象 ..............................................18712.5.2使用文本对象创建套用信函 ..................................18912.5.3在套用信函内打印条件消息 ..................................193

第13章 格式化

13.1格式化概念 ..............................................19513.2使用模板 ................................................19513.2.1应用模板 ..................................................13.2.2删除应用的模板 ............................................13.2.3重新应用上次选定的模板 ....................................13.2.4使用“模板字段对象” ......................................19519619719713.3使用报表设计环境 ........................................19813.3.1设计解决方案 ..............................................19813.3.2节特性 ....................................................19913.3.3使对象延伸到后续节 ........................................19913.3.4预先打印好的窗体 ..........................................20113.3.5多列 ......................................................20113.3.6隐藏报表节 ................................................20213.3.7隐藏报表对象 ..............................................20213.3.8放置基于文本的对象 ........................................20413.3.9放置多行、基于文本的对象 ..................................20613.3.10从文件导入基于文本的对象 .................................207

10Crystal Reports 用户指南

13.3.11基于文本的对象间的间距 ..................................13.3.12溢出字段表示法 ..........................................13.3.13选择多个对象 ............................................13.3.14自由格式位置 ............................................13.3.15垂直位置 ................................................13.3.16插入字符间距和行间距 ....................................13.3.17设置小数字体大小 ........................................13.3.18TrueType 字体 ...........................................13.3.19页边距 ..................................................13.3.20默认打印机 ..............................................

13.3.21打印机驱动程序 ..........................................20721221321321521621621721721821913.4格式化属性 ..............................................22013.5使用绝对格式化 ..........................................22013.5.1向字段添加边框、颜色和阴影 ...............................13.5.2将报表、节、区域或对象设置为只读 .........................13.5.3锁定对象的大小和位置 .....................................13.5.4更改默认字段格式 .........................................13.5.5添加和编辑行 .............................................13.5.6添加和编辑框 .............................................13.5.7向报表添加形状 ...........................................13.5.8使用常规计帐格式 .........................................13.5.9在横排页面上重复报表对象 .................................13.5.10在行间使用空白区域 ......................................13.6.1条件开或关属性 ...........................................13.6.2条件特性属性 .............................................13.6.3有条件地更改字体 .........................................13.6.4有条件地更改 X 位置 ......................................13.6.5在第一页之后创建页脚 .....................................13.6.6使用“突出显示专家” .....................................

13.6.7撤消/恢复活动 ...........................................22022122222222422422522622722823023023223223323423713.6使用条件格式化 ..........................................22913.7使用格式刷 ..............................................237

水晶报表Crystal Reports培训教程 35_水晶报表教程

目录11

第14章 图表

14.1绘制图表概念 ............................................23914.1.1绘制图表概述 ..............................................14.1.2图表布局 ..................................................14.1.3图表类型 ..................................................14.1.4在哪里放置图表 ............................................14.1.5使用图表深化 ..............................................14.1.6使用图例深化 ..............................................14.2.1在详细资料或公式字段上绘制图表(高级布局) ................14.2.2在汇总或小计字段上绘制图表(分组布局) ....................14.2.3在交叉表汇总上绘制图表(交叉表布局) ......................14.2.4在 OLAP 多维数据集上绘制图表(OLAP 布局) .................23924024024324324324424624724814.2创建图表 ................................................24414.3使用图表 ................................................24914.3.1使用“图表专家”编辑图表 .................................24914.3.2使用“图表选项”菜单项编辑图表 ...........................24914.3.3使用其他菜单项编辑图表 ....................................25014.3.4在条形图和折线图中使用缩放功能 ............................25114.3.5自动排列图表 ..............................................25114.3.6设置统计图格式 ............................................25214.3.7在图表上使用延伸功能 ......................................253

第15章 地图功能

15.1地图功能的概念 ..........................................25415.1.1地图功能概述 ..............................................15.1.2地图布局 ..................................................15.1.3地图类型 ..................................................15.1.4地图放置在何处 ............................................15.1.5使用地图深化 ..............................................15.2.1基于详细资料字段制作地图(“高级”布局) ..................15.2.2基于组字段制作地图(“组”布局) ..........................15.2.3基于交叉表汇总制作地图(“交叉表”布局) ..................15.2.4基于 OLAP 多维数据集制作地图(OLAP 布局) .................25425425525725725826026126315.2创建地图 ................................................258

12Crystal Reports 用户指南

15.3使用地图 ................................................26415.3.1使用“地图专家”编辑地图 .................................15.3.2更改地图标题 .............................................15.3.3更改地图类型 .............................................15.3.4更改地图层 ...............................................15.3.5解决数据不匹配 ...........................................15.3.6更改地理地图 .............................................15.3.7放大和缩小地图 ...........................................15.3.8平移地图 .................................................15.3.9地图居中 .................................................15.3.10隐藏和显示“地图导航器” ................................15.3.11设置地图格式 ............................................

15.3.12对地图使用延伸功能 ......................................264264265265266267267268268268269269

第16章 OLE

16.1OLE 概述 ................................................27016.1.1OLE 术语 .................................................27016.1.2OLE 对象的类型 ...........................................27116.1.3常规 OLE 注意事项 ........................................27116.2将 OLE 对象插入报表 .....................................27216.3OLE 对象在报表中如何表示 ................................27316.4编辑报表中的 OLE 对象 ...................................27316.4.1现场编辑 .................................................27316.4.2动态 OLE 菜单命令 ........................................27316.4.3OLE 和“插入图片”命令 ...................................27416.5处理静态 OLE 对象 .......................................27416.6处理嵌入和链接的对象 ....................................27616.6.1嵌入对象 .................................................27616.6.2链接对象 .................................................277

第17章 交叉表对象

17.1什么是交叉表对象? ......................................279

目录13

17.2交叉表示例 ..............................................28017.2.1订单数据的报表 - 未排序/未分组 ...........................28017.2.2订单数据的报表 - 按地区分组 ...............................28117.2.3订单数据的报表 - 按产品分组 ...............................28117.2.4订单数据的报表 - 按地区和产品分组 .........................28217.2.5交叉表对象中的订单数据 ....................................28317.3创建交叉表报表 ..........................................28417.4使用交叉表 ..............................................29017.4.1以百分比显示值 ............................................29017.4.2缩写大的汇总字段 ..........................................29117.4.3自定义行/列标签 ..........................................29117.4.4在交叉表中使用运行总计 ....................................29217.4.5打印跨越多页的“交叉表” ..................................29317.5设置交叉表格式 ..........................................29317.5.1更改交叉表单元格的宽度、高度和对齐方式 ....................17.5.2设置整行/整列的背景颜色的格式 ............................17.5.3设置个别字段的格式 ........................................17.5.4一次设置若干字段的格式 ....................................17.5.5取消“交叉表”数据 .......................................17.5.6水平显示汇总字段 ..........................................294294294295295296

第18章 构建查询

18.1连接到 Universe .........................................29718.2为查询定义数据选定区域 ..................................29718.2.1快速引用对象 ..............................................29818.3编辑现有查询 ............................................29918.4查看查询后面的 SQL ......................................30018.5查询筛选器和提示 ........................................30018.5.1创建查询筛选器 ............................................18.5.2构建提示 ..................................................18.5.3合并查询筛选器和提示 ......................................18.5.4创建高级查询筛选器 ........................................18.5.5命名高级筛选器 ............................................300301302303305

14Crystal Reports 用户指南

18.5.6合并高级查询筛选器 .......................................18.5.7使用“和”或“或”合并查询筛选器 ........................18.5.8编辑和删除查询筛选器 .....................................

18.5.9查询筛选器运算符的快速参考 ...............................306308308309

第19章 创建和更新 OLAP 报表

19.1用创建 OLAP 报表 Crystal Reports ........................31119.1.1OLAP 网格对象 ............................................31119.2创建 OLAP 报表 ..........................................31219.2.1指定数据源 ...............................................19.2.2定义网格结构 .............................................19.2.3设置切片维度并指定网格数目 ...............................19.2.4应用预定义样式 ...........................................

19.2.5插入图表 .................................................31231231431531619.3更新 OLAP 报表 ..........................................31619.4格式化 OLAP 网格中的数据 ................................31719.4.1更改维度的背景颜色 .......................................19.4.2创建维度的别名 ...........................................19.4.3格式化网格线 .............................................

19.4.4标注维度 .................................................31831931931919.5更改 OLAP 数据的视图 ....................................32019.6对 OLAP 网格数据进行排序和筛选 ..........................32119.6.1对 OLAP 网格中的数据进行排序 .............................32219.6.2对 OLAP 网格中的数据进行筛选 .............................32319.7向 OLAP 网格添加计算 ....................................324

第20章 打印、导出和查看报表

20.1分发报表 ................................................32520.1.1打印报表 .................................................20.1.2传真报表 .................................................20.1.3导出报表 .................................................20.1.4使用 Web 文件夹 ..........................................

20.1.5使用 Enterprise 文件夹 ...................................325325326334335

目录15

20.2查看报表 ................................................33720.2.1什么是报表部件? ..........................................20.2.2什么是导航? ..............................................20.2.3“报表部件深化”选项 ......................................20.2.4“其他报表对象”选项 ......................................20.2.5查看器中显示的超级链接 ....................................33833834134334720.3使用智能标记 ............................................349

第21章 报表警报

21.1关于报表警报 ............................................35121.2使用报表警报 ............................................35121.2.1创建报表警报 ..............................................35121.2.2编辑报表警报 ..............................................35321.2.3删除报表警报 ..............................................35321.2.4查看报表警报 ..............................................35421.2.5在公式中引用报表警报 ......................................355

第22章 使用公式

22.1公式概述 ................................................35622.1.1公式的典型用途 ............................................35622.2公式组件和语法 ..........................................35722.2.1公式组件 ..................................................35722.2.2公式语法 ..................................................35822.3公式中的用户函数库 ......................................35922.4指定公式 ................................................36022.4.1使用 公式工作室 ...........................................36122.4.2使用公式编辑器 ............................................36222.5创建与修改公式 ..........................................36322.5.1创建公式并将其插入到报表中 ................................36322.5.2在“公式专家”中创建公式 .................................36422.5.3编辑公式 ..................................................36522.5.4搜索和替换文本 ............................................36622.5.5从联机帮助复制公式 ........................................36622.5.6将公式从一个报表复制到另一个报表 ..........................367

水晶报表Crystal Reports培训教程 35_水晶报表教程

16Crystal Reports 用户指南

22.6删除公式 ................................................36822.6.1从报表删除工作公式 .......................................36822.6.2删除公式规范 .............................................36822.7调试公式 ................................................36922.7.1调试求值时间错误 .........................................36922.7.2调试教程 .................................................369

第23章 参数字段和提示

23.1参数和提示概述 ..........................................37423.1.1参数字段注意事项 .........................................37423.1.2提示考虑因素 .............................................37523.2了解动态提示 ............................................37523.3了解值列表 ..............................................37823.3.1值列表类型 ...............................................37823.3.2确定要使用的值列表类型 ...................................38023.3.3值列表和提示组的对比 .....................................38123.4创建带有静态提示的参数 ..................................38123.5创建带有动态提示的参数 ..................................38423.6创建带级联值列表的参数 ..................................38623.7使用值列表 ..............................................38823.7.1在报表中共享公共值列表 ...................................23.7.2使用不同的值字段和说明字段 ...............................23.7.3将命令对象用作值列表的数据源 .............................23.7.4空值处理 .................................................23.8.1不受控报表 ...............................................23.8.2受控报表 .................................................23.8.3将不受控报表转换为受控报表 ...............................

23.8.4部署带有动态提示的受控报表 ...............................38838939039039139139239223.8有关提示的最佳做法 ......................................39123.9删除参数字段 ............................................39323.10响应参数字段提示 .......................................39423.10.1第一次预览报表 ..........................................39423.10.2刷新报表数据 ............................................394

目录17

23.11高级参数功能 ...........................................39523.11.1创建具有多个提示值的参数 .................................39523.11.2使用参数字段应用条件格式设置 .............................39623.11.3使用参数字段创建报表标题 .................................39623.11.4指定单个值或范围值 .......................................39723.11.5将参数包含在公式中 .......................................39823.11.6使用参数字段定义排序顺序 .................................39923.11.7使用编辑掩码定义输入类型和格式 ...........................400

第24章 子报表

24.1什么是子报表? ..........................................40124.1.1未链接的子报表与链接的子报表 ..............................40124.1.2子报表链接如何工作 ........................................40224.1.3数据库链接与一对多情况下的子报表 ..........................40324.2插入子报表 ..............................................40324.2.1预览子报表 ................................................40424.2.2将子报表另存为主报表 ......................................40524.2.3更新子报表 ................................................40524.3将子报表链接到主报表内的数据 ............................40624.3.1在不修改选定公式的情况下将子报表链接到主报表 ..............40724.4通过使用子报表组合不相关的报表 ..........................40724.4.1组合两个或更多不相关的报表 ................................40824.5对无法链接的数据使用子报表 ..............................40824.5.1与公式字段进行相互链接 ....................................40924.5.2链接没有索引的表 ..........................................40924.6创建按需要显示子报表 ....................................41024.6.1向按需要显示子报表中添加标题 ..............................41024.7在单个报表中显示相同数据的不同视图 ......................411

第25章 了解数据库

25.1数据库概述 ..............................................41225.1.1关系数据库基础知识 ........................................41225.1.2别名 ......................................................413

18Crystal Reports 用户指南

25.1.3定位文件 .................................................41425.1.4索引表 ...................................................41525.2链接表 ..................................................41725.2.1链接自和链接到 ...........................................25.2.2链接关系 .................................................25.2.3一对多链接中的性能考虑 ...................................25.2.4数据文件考虑 .............................................25.2.5SQL 数据库考虑 ...........................................25.2.6对所有报表的性能考虑 .....................................25.2.7“数据库专家”的“链接”选项卡 ...........................25.2.8链接索引表 ...............................................25.2.9链接处理顺序 .............................................25.2.10链接选项 ................................................25.3.1什么是 SQL? .............................................25.3.2SQL DBMS .................................................25.3.3Crystal Reports 如何使用 SQL? ..........................

25.3.4SQL 语言 .................................................41841841842142242342542542642643643944044025.3使用 SQL 和 SQL 数据库 ..................................43625.4服务器端处理 ............................................44225.4.1服务器端分组如何影响 SQL 查询 ............................44425.5映射数据库字段 ..........................................44525.5.1关于映射字段对话框 .......................................44525.5.2重新映射进程 .............................................44625.5.3重新映射已更改的数据库字段 ...............................44725.6已保存数据的索引 ........................................44825.6.1报表索引如何工作 .........................................44825.6.2使用“已保存数据的索引”的考虑因素 .......................44925.6.3选择正确的字段进行索引 ...................................44925.7Crystal Reports 中的 Unicode 支持 .......................45025.8有关更多信息 ............................................450

目录19

附录A 报表处理模型

A.1概述 ....................................................451

A.1.1什么是“传递”? .........................................451

A.1.2第 1 次预传递 .............................................451

A.1.3第 1 次传递 ...............................................451

A.1.4第 2 次预传递 .............................................452

A.1.5第 2 次传递 ...............................................452

A.1.6第 3 次传递 ...............................................452

A.1.7多次传递建立报表流程图 ....................................453附录B Crystal Reports错误消息

B.1Drive:\filename.extension ...............................454

B.2Drive:\test.rpt .........................................454

B.3加载数据库连接器失败 ....................................455

B.4未能打开该连接。详细资料: [数据库厂商代码: <厂商代号>]。 455

B.5检索数据库中的数据失败。详细资料: [数据库厂商代码: <厂商代号>]。 456

附录C 创建可访问报表

C.1关于辅助功能 ............................................457

C.1.1可访问报表的好处 ..........................................457

C.1.2关于辅助功能准则 ..........................................458

C.1.3辅助功能和 Business Objects 产品 ..........................459

C.2改善报表的辅助功能 ......................................459

C.2.1在报表中放置对象 ..........................................

C.2.2文本 ......................................................

C.2.3颜色 ......................................................

C.2.4导航 ......................................................

C.2.5参数字段 ..................................................459461464466466

C.3设计时注重灵活性 ........................................467

C.3.1辅助功能和条件格式设置 ....................................467

C.3.2辅助功能和抑制显示节 ......................................468

C.3.3辅助功能和子报表 ..........................................469

20Crystal Reports 用户指南

C.4改善数据表的辅助功能 ....................................470

C.4.1文本对象和数据表值 ........................................470

C.4.2数据表设计的其他考虑因素 ..................................474

C.5辅助功能和 BusinessObjects Enterprise ...................475

C.5.1设置 BusinessObjects Enterprise 的可访问首选项 ............475

C.6辅助功能和自定义 ........................................476

C.7资源 ....................................................477附录D Business Objects 信息资源

D.1文档和信息服务 ..........................................478

D.2文档 ....................................................478

D.2.1文档集中有什么内容? ......................................478

D.2.2文档的位置 ................................................478

D.2.3发送您的反馈 ..............................................479

D.3客户支持、咨询和培训 ....................................479

D.3.1如何能为您提供支持? ......................................479

D.3.2是否在寻求适合于贵公司的最佳部署解决方案? ................479

D.3.3是否在寻求培训选件? ......................................480

D.4实用地址一览 ............................................480索引.............................................481

水晶报表Crystal Reports培训教程 35_水晶报表教程

第1章 Crystal Reports 11 简介

1.1关于 Crystal Reports

Crystal Reports 的设计用途是,使用数据库来帮助您分析和解释重

要的信息。Crystal Reports 可以方便地创建简单的报表,并且,它还拥有生成复杂报表或专用报表所需的一整套工具。

创建所能想象的任何报表

Crystal Reports 几乎可以从任何数据源生成您所需要的报表。内置

报表专家在您生成报表和完成一般的报表任务过程中,会一步一步地指导您进行操作。报表专家通过公式、交叉表、子报表和设置条件格式帮助表现数据的实际意义,揭示可能被隐藏掉的重要关系。如果文字和数字确实不够充分,则用地理地图和图形进行形象的信息交流。

将报表扩展到 Web

Crystal Reports 的灵活性并未停留在创建报表这一功能上 -- 您可

以用各种格式来发布报表,其中包括 Microsoft Word 和 Excel,通过电子邮件发布甚至在 Web 上发布。高级的 Web 报表功能允许工作组中的其他成员在他们自己的 Web 浏览器中查看或更新共享报表。

将报表并入应用程序

通过将 Crystal Reports 的报表处理功能整合到自己的数据库应用程

序中,应用程序和 Web 开发人员可以节省开发时间并满足用户的需求。支持大多数流行的开发语言,可以方便地在任何应用程序中添加报表。

无论您是 IT 行业的站点管理员,还是营销推广经理,也无论您是金

融业的数据库管理员还是 CEO,Crystal Reports 都堪称是一个功能强大的工具,它可以帮助每一个人分析并解释重要的信息。

22Crystal Reports 用户指南

1.2关于本指南

本指南介绍了典型的报表任务过程,例如放置字段、格式化报表和排

序记录。其中还包含多个为人关心的特定内容的有关信息,如创建高级公式、访问不同类型的数据。使用本指南作为基本报表过程的参考,同时作为对报表创建过程中新概念的介绍。

1.2.1联机帮助

Crystal Reports 联机帮助包含用户指南中的所有主题。它还提供了

其它的参考材料,范围涉及从按钮功能这样的特定信息到如何基于企业方案示例创建报表公式这样的常规信息。

1.2.1.1 快速定位信息

可从 Crystal Reports 的帮助菜单访问联机帮助。

使用“内容”选项卡查看联机帮助中所有主要的节,并可深化到每一

节中特定的标题;使用“索引”选项卡按字母顺序查看主题;使用“搜索”选项卡输入关键字,以查看与该关键字相关的所有节。

1.2.1.2 示例报表

Crystal Reports 联机帮助中的许多主题都包含了相关示例报表的列

表。使用这些报表可解释主题所描述的概念。您可根据自己的需要改变这些示例报表。

示例报表位于 Crystal Reports 目录中的 \Samples\Chs\Reports

之下。

1.2.2Business Objects 信息资源

有关更多信息和帮助,请参阅D附录:Business Objects 信息资源。本

附录描述 Business Objects 文档、客户支持、培训和咨询服务,并提供指向在线资源的链接。

第2章 Crystal Reports 11 中的

新功能

2.1介绍

本节高度概括了最新版本的 Crystal Reports 提供的组件、功能和好处。

?

?

?

?Crystal Reports 11 的重要主题包括: 第1 页上的 “强大的报表创制功能”. 第2 页上的 “提高的实用性”. 第3 页上的 “扩展的应用程序开发功能”. 第6 页上的 “与 BusinessObjects Enterprise 11 的集成”.可以在所有重要主题中找到新功能信息。另外,还对现有的一系列功能进行了重大改进。

2.2强大的报表创制功能

动态和级联提示

Crystal Reports 现在提供了动态和级联提示。此新功能使您可以利用数据库中的值来填充提示值。可以按级联形式编排提示;在级联中,提示中的一个值限制了随后的选取列表中的值。报表设计者不再需要在各个报表中维护静态提示列表。可以将单个提示定义存储在储备库中,并在多个报表之间共享此定义,从而提高运行时的可伸缩性及设计时的工作效率。

新的 RTF 导出格式

提供了新的 RTF 导出格式。此新格式经过专门优化,可使用户能轻松编辑它产生的文件。此功能补充了现有针对准确性和表单处理优化的RTF 导出功能。结果是,您现在有两种不同的 RTF 导出格式可供选择,具体取决于您是需要准确性还是需要编辑能力。

24Crystal Reports 用户指南

动态图形位置

现在,您可以通过存储在数据库中的链接将图片和图形放入报表中,从而无需再将图像存储于数据库中。此新功能支持这一习惯做法:在 Web服务器上存储图像,并在数据库中存储对这些图像的引用。

参数化排序

现在,可以通过公式推导出组排序顺序以及最前或最后 N 个报表的排序值。此新功能意味着,您现在可以使用参数来控制排序顺序,以及最前或最后 N 个报表的 N 值。这就产生了一个不仅更灵活而且能满足更多用户需求的报表,从而减少了您要创建和支持的报表的总数。层次分组的改进

改进的层次分组提供了增强的布局控制能力,使得组现在嵌套于层次结构中,而且您现在能更细致地控制层次结构的缩进。现在,您可以按照某节中的特定对象的层次结构级别缩进此对象,而不是自动缩进层次结构中的所有对象。

保存导出配置选项

对于许多导出格式,您现在可以将报表导出配置信息与报表本身一起保存。此功能意味着,报表设计者可以预设适当的导出选项,而最终用户将在通过报表查看器导出报表时使用这些选项。通过此过程,导出结果更为准确,而且减少了最终用户所需的培训。

2.3提高的实用性

HTML 预览

Crystal Reports 现在提供了新的 HTML 预览功能,可让您看到将报表发布到 Web 时报表的外观。用户可在熟悉的 Crystal Reports 设计环境中找到此功能(作为附加的查看选项卡提供)。使用此功能时,您无需重复在设计报表时执行的将报表发布到 Web 的交互式任务,从而可以节省时间。

更新的储备库资源管理器

利用新的储备库资源管理器,用户能更轻松地在 BusinessObjectsEnterprise 系统中进行浏览。您能更好地通过储备库与其他用户共享报表生成组件。

扩展的应用程序开发功能25

工作台

工作台可让您有条理地组织项目,并允许您按照自己的偏好将报表分类到文件夹中。

拖放图表和交叉表

新的拖放图表和交叉表功能通过允许 Crystal Reports 根据报表中的数据自动创建图表或交叉表,引入了智能制图和交叉表设计技术。用户现在能更快速、更轻松地设计图表和交叉表。

更新修补程序安装

此新功能使您能及时获得 Crystal Reports 的最新更新,在这一点上它与 Windows Update 很相似。

增强的报表查看器

可调整大小的组树改进了长组名情况下的报表查看效果,而且更新了工具栏,使它在各查看器中更为统一。

2.4扩展的应用程序开发功能

2.4.1一般说明

对报表格式的控制

开发人员现在可以像在 Crystal Reports 设计器中一样对报表格式进行细致的控制。

服务器端打印和子报表配置

新的和改进的跨平台应用程序编程接口包含了服务器端打印功能,以及将子报表当作完整的 Crystal 报表进行配置的能力。

Java 用户函数库

自定义 Java 用户函数库允许 Java 开发人员将他们的代码合并到Crystal Reports 中。

Java Server Faces

通过新的 JSF 查看器软件开发人员套件,为 Java Server Faces(JSF) 提供了支持,从而简化了用户界面开发。

水晶报表Crystal Reports培训教程 35_水晶报表教程

26Crystal Reports 用户指南

开发人员文档

此版本提供了改进的开发人员文档,这些文档涵盖了最常见的报表创

建应用案例。

2.4.2报表应用程序服务器 (RAS)

报表应用程序服务器 11 包含了许多新功能。在这些功能中,值得注

意的是:动态提示和级联值列表、可编辑的 RTF 导出格式、单一登录支持、完全以编程方式控制子报表,以及动态图像位置。向后兼容性继续是一个重要特性 -- 与版本 10 相比,并未从此版本中去除了任何 API 或主要功能。

新的 API

?

?

?

?

?

?增加了完全以编程方式控制导出的接口。增加了通过 RAS SDK 提供的新的跨平台打印支持。增加了完全以编程方式对检索、修改和创建子报表对象进行控制的接口(细致程度与主报表一样)。可通过编程方式将 BMP、JPG 或 PNG 格式的图像添加到报表的任何节中。对于受控报表,支持对主要数据库的单一登录。新的可扩展 URL 报表生成组件使用户可以利用 ActiveX、Java 插件

或 DHTML 查看器通过 Web 轻松查看报表。

改进的部署选项

?

?现在提供了这样一个合并模块:它适用于将 RAS、.NET 和 COM 部署到 IIS Web 应用程序服务器上的所有方案。改进的可配置部署选项使用户能完全控制所部署的数据库和导出

DLL。此外,还增加了一个可配置的选项,用于决定是否创建

crystalreportviewers11 IIS 虚拟目录。

改进的报表查看器

?

?ActiveX、.NET Winform 和 Webform 以及 DHTML 查看器均经过改进,可以使用动态提示功能,而且它们都能将报表导出为可编辑的RTF 格式。有关对报表查看器所作改进的完整列表,请参阅《查看器 Java SDK

指南》。

扩展的应用程序开发功能27

2.4.3报表设计器组件 (RDC)

在版本 11 中,RDC 的新功能主要侧重的是在格式上兼容于在

Crystal Reports 11 中创建的报表。这一侧重点包括与在以前版本的RDC 中创建的应用程序保持兼容。

新的 API

?现在,可以为报表中的表项目检索全限定的数据库表名称。

改进的部署选项

?

?

?现在,会自动将 RDC 合并模块安装到 Program Files\CommonFiles\Merge Modules 中。这些合并模块经过改进,可以支持最新版本的 InstallShield。改进的可配置部署选项使用户能完全控制所部署的数据库和导出

DLL。

改进的 ActiveX 查看器

?

?

?

?

?

?新的导出对话框支持可编辑的 RTF 格式。通过在高速缓存中保存呈现的输出,显著地提高了许多情况下的页面绘制性能。输出和打印的视觉质量经过改进,以便与 Crystal Reports 的预览选项卡相配。可以逐个或成组突出显示在 ActiveX 查看器中显示的对象,然后将它们复制并粘贴到应用程序中,如 Microsoft Word、Excel 和Outlook。页面导航现在支持前后翻页按键。打印现在支持在打印对话框中选择多个页码范围。

2.4.4Crystal Reports .NET

Crystal Reports .NET 包含许多项新功能。在这些功能中,值得注

意的是:动态提示和级联值列表、可编辑的 RTF 导出格式、单一登录支持以及动态图像位置。向后兼容性继续是一个重要特性 -- 与版本 10 相比,并未从此版本中去除了任何 API 或主要功能。

新的 API

?

?增加了完全以编程方式控制导出的接口。对于运行进程内 RAS 的受控报表和不受控报表,支持对主要数据库

的单一登录。

28Crystal Reports 用户指南

?显著地提高了将只能进行查看的 Crystal Reports .NET 应用程序

连接到 BusinessObjects Enterprise 的速度。

改进的部署选项

?

?现在提供了一个适用于所有 Crystal Reports .NET 部署方案的合并模块。改进的可配置部署选项使用户能完全控制所部署的数据库和导出

DLL。此外,还增加了一个可配置的选项,用于决定是否创建

crystalreportviewers11 IIS 虚拟目录。

改进的 Winform 查看器

?

?

?

?

?新的导出对话框支持可编辑的 RTF 格式。在运行时支持新的动态提示。可以禁用工具提示。添加了一个错误事件处理程序。现在,查看器允许将开发人员编写的动态资源本地化为不支持的语言。改进的 Webform 查看器

?

?

?

?

?新的导出对话框支持可编辑的 RTF 格式。在运行时支持新的动态提示。可以禁用工具提示。现在,查看器遵守 ASP.NET Page Directive(页面指示)的 Culture属性。现在,查看器允许将开发人员编写的动态资源本地化为不支持的语言。

2.5与 BusinessObjects Enterprise 11 的集成

已在以下方面实质性地增强了 Crystal Reports 设计器和

BusinessObjects Enterprise 之间的集成:

?储备库资源管理器经过改进,使用户能更轻松地进行登录和浏览

Enterprise 对象及储备库项目。

?储备库资源管理器可以打开 BusinessObjects Enterprise 中央管

理控制台 (CMC)。

?“依赖项检查器”使您可以确认报表中的所有储备库对象是否有效。?“工作台”使您可以逐个或成组将一组报表发布到单个对象包中。

与 BusinessObjects Enterprise 11 的集成29

单一登录

现在提供了单一登录功能,这样就可将 Crystal 报表集成到现有的

安全性基础结构中。

URL 报表生成

已将基于 URL 的报表集成作为 ASP、ASPX 和 JSP 页面重新实施,

这些页面完全向后兼容于旧的 viewrpt.cwr 技术。这一简易和常用的报表集成方法将在标准的应用程序服务器平台上继续受到支持。

Business Objects Universe

现在,基于 Business Objects Universe(Web Intelligence 之类

的 Business Objects 查询和分析工具的语义层)的 Crystal 报表可以支持 Universe 运行时安全性和联合查询。利用这些改进,当您在Crystal Reports 中依据 Universe 创建报表时,将可以支持在该Universe 中定义的大部分过载。

上下文报表链接

上下文报表链接使您可以从 Crystal Reports 中调用 Business

Objects 和 Web Intelligence 文档,反之亦然。此功能使报表设计者可以为位于 Crystal Reports 环境(不受控)或 BusinessObjectsEnterprise 环境(受控)中的文档指定关联。创建了这些关联之后,用户就可以采用链接文档中嵌入的结果导航路径。

第3章 安装 Crystal Reports 11

3.1安装 Crystal Reports 11

Crystal Reports 安装向导使用 Microsoft Windows 安装程序指导您完成安装过程。该安装向导自动识别您计算机上的操作系统并根据要求对文件进行更新。

本章提供安装 Crystal Reports 的逐步骤说明并介绍了如何进行自定义安装。主要有以下主题:

? 第1 页上的 “安装要求”

? 第2 页上的 “在本地计算机上安装 Crystal Reports”

? 第3 页上的 “创建安装点并从网络服务器进行安装”

? 第5 页上的 “自定义安装”

? 第6 页上的 “运行无提示安装”

? 第8 页上的 “升级 Crystal Reports 组件”

作为安装过程的结束步骤之一,安装程序将询问您是否要注册此产品。请按照屏幕上的说明完成此过程。

3.2安装要求

3.2.0.1 最低安装要求

操作系统Windows 2000

Windows XP Professional

Windows 2003 Server

133 MHz 或更高频率的 Pentium 兼容型 CPU

至少 128 兆字节 (MB) RAM。建议 256 MB。

最大 4 吉字节 (GB)

320 兆字节

CD-ROM 或 DVD 驱动器计算机/处理器内存磁盘空间驱动器

?

?注意: .NET 组件要求 .NET 1.0 或 .NET 1.1 运行时。Java 组件要求 J2EE 1.3.x 或 J2EE 1.4.x 兼容运行时。

水晶报表Crystal Reports培训教程 35_水晶报表教程

31Crystal Reports 用户指南

3.3在本地计算机上安装 Crystal Reports

如果在运行任何支持的操作系统(请参阅上面的最低安装要求)的计算机上安装 Crystal Reports,您必须拥有管理员权限。安装过程将创建注册表项并可能更新一些需要管理员权限的系统文件。

安装 Crystal Reports 时,应关闭所有正在运行的程序,并尽可能多地停止服务。

如果希望限制要安装的功能,请参阅 第5 页上的 “自定义安装”。X在本地计算机上安装

1除非启用了 CD-ROM 驱动器的自动播放功能,否则请从产品分发介质

的 win32 目录中运行 Setup.exe。

注意:根据当前系统配置,可能会出现一个对话框,告诉您更新现有文件。如果出现该对话框,单击“是”并重新启动您的计算机。安装向导将更新所需文件。

阅读并接受许可协议继续进行安装。

在“用户信息”对话框中,键入您的姓名、组织和产品激活密钥号码。单击“下一步”。

出现“选择安装类型”对话框。234

5选择您要执行的安装类型:

?“典型”安装最常用的应用程序功能。

?“自定义”安装使您可以选择要安装的功能、指定安装位置,并查

看各项功能所需的磁盘空间。有关详细信息,请参阅 第5 页上的“自定义安装”

创建安装点并从网络服务器进行安装32

6如果不打算在默认位置安装 Crystal Reports 或其常用文件,请单

击“浏览”指定其他目录。

Crystal Reports 的默认位置是 C:\Program Files\BusinessObjects\

Crystal Reports 常用文件的默认位置是 C:\ProgramFiles\Common Files\Business Objects\3.0\

注意:如果在同一计算机上安装了 BusinessObjects Enterprise,则这些位置字段可能不可用。

7单击“下一步”。

出现“开始安装”对话框。

注意:如果在具有 Internet 连接的计算机上安装 CrystalReports,则可以选择禁用自动 Web 更新服务功能。此功能使您在每次打开 Crystal Reports 时可以检查更新和 Service Pack;如果禁用它,则以后不能激活。

单击“下一步”开始将文件复制到本地驱动器。8

3.4创建安装点并从网络服务器进行安装

从中央网络位置安装 Crystal Reports 的过程包含两个步骤:1将 Crystal Reports 产品分发介质复制到网络上的某台服务器计算

机上(此副本将成为安装点)。请参阅 第3 页上的 “创建 CrystalReports 的安装点”。

从工作站访问服务器计算机,并运行 Setup.exe 在工作站上安装Crystal Reports。请参阅 第4 页上的 “从网络安装 CrystalReports”。2

3.4.1创建 Crystal Reports 的安装点

这个过程必须由拥有写访问权限和网络权限的网络管理员执行。此过程完成后,最终用户将能从网络上访问 Setup.exe,从而将 CrystalReports 安装到其本地计算机上。

注意: 如果用户的计算机上没有配置 Microsoft Windows 安装程序,安装过程将检测工作站的操作系统并安装相应的 MicrosoftWindows 安装程序包。

X若要创建安装点

1在网络上创建一个文件夹,并为需要运行 Setup.exe 的用户共享此

文件夹。

33Crystal Reports 用户指南

2

3将 Crystal Reports 产品分发介质的全部内容复制到在步骤 1 中创建的文件夹。为需要从该文件夹中安装 Crystal Reports 的用户分配权限。

注意:限制对此文件夹的访问可使您不会违反许可证限制的规定。

3.4.2从网络安装 Crystal Reports

如果网络管理员已将 Crystal Reports 复制到网络,请在开始本过程前确认您是否具有该网络的读取权限。

如果在运行任何支持的操作系统(请参阅 第1 页上的 “最低安装要求”)的计算机上安装 Crystal Reports,您必须在该计算机上拥有管理员权限。安装过程将创建注册表项并可能更新一些需要管理员权限的系统文件。

安装 Crystal Reports 时,应关闭所有正在运行的程序,并尽可能多地停止服务。

X若要从网络安装 Crystal Reports

1

2访问包含 Crystal Reports 安装文件的网络文件夹。双击 Setup.exe。

注意:根据当前系统配置,可能会出现一个对话框,告诉您更新现有文件。单击“是”并重新启动您的计算机。安装向导将更新所需文件。阅读并接受许可协议继续进行安装。

在“用户信息”对话框中,键入您的姓名、组织和产品激活密钥号码。提示:您可能需要与您的管理员联系,以获得产品激活密钥号码。单击“下一步”。

出现“选择安装类型”对话框。

选择要执行的安装类型:

?“典型”安装最常用的应用程序功能。

?“自定义”安装使您可以选择要安装的功能、指定安装位置,并查

看各项功能所需的磁盘空间。有关详细信息,请参阅 第5 页上的“自定义安装”。

如果不打算在默认位置安装 Crystal Reports 或其常用文件,请单击“浏览”指定其他目录。

Crystal Reports 的默认位置是 C:\Program Files\BusinessObjects\34567

Crystal Reports 常用文件的默认位置是 C:\Program Files\CommonFiles\Business Objects\3.0\

自定义安装34

8单击“下一步”。

出现“开始安装”对话框。

注意:如果在具有 Internet 连接的计算机上安装 CrystalReports,则可以选择禁用自动 Web 更新服务功能。此功能使您在每次打开 Crystal Reports 时可以检查更新和 Service Pack;如果禁用它,则以后不能激活。

单击“下一步”开始将文件复制到本地驱动器。9

3.5自定义安装

选择“自定义安装”选项将打开“选择功能”对话框,您可以通过此对话框安装特定的功能、更改各功能的默认位置,以及查看各功能所需的磁盘空间量。

?

?

?

?功能树状结构中的图标表明是否安装该功能及其子功能:白色图标表示将安装该功能及其所有子功能。阴影图标表示将安装该功能及其部分子功能。黄色的 1 表示将根据需要安装该功能(按需安装)。红色的 X 表示没有或不安装该功能及其子功能。

Crystal Reports 支持对其某些功能使用“按需安装”技术。因此,某些功能在安装后第一次使用时,必须再等“按需安装”过程完成后才能使用。这种行为只对新的安装有一次影响,在重新启动功能后不会再发生。

要选择某个功能或子功能的配置和位置,单击其图标。

注意:

每个功能或子功能都可以有其自己的配置和位置。

35Crystal Reports 用户指南

您可以使用下表确定各功能或子功能的安装选项:

功能安装的类型

将安装于本地硬盘驱动器对已安装的说明?

?

所有功能将安装于本地硬?

盘驱动器

安装以从产品分发介质/网?

络运行在本地硬盘驱动器上安装该功能。使用“典型”安装设置将该功能的某些子功能安装到本地硬盘驱动器。将该功能及其所有子功能安装到本地硬盘驱动器。脱离产品分发介质/网络运行该功能及其典型子功能。

整个功能将安装以从产品

分发介质/网络运行注意: 某些子功能未安装为从产品分发介质/网络运行。这些子功能将安装到本地硬盘驱动器上。?脱离产品分发介质/网络运行该功能及其所有子功能。

注意: 某些子功能未安装为从产品分

发介质/网络运行。这些子功能将安装到

本地硬盘驱动器上。

?第一次使用该功能或子功能时从产品

分发介质/网络安装。

?该功能及其子功能均不安装。根据需要安装功能所有功能均将不可用

注意: 子功能列在每个功能下面。子功能的安装类型可以与其父功能不同。

3.6运行无提示安装

无提示安装是一种您通过命令行运行的安装,它会将 CrystalReports 自动安装到您系统中的任何计算机上,并且在安装过程中安装程序不会提示任何信息。要进行无提示安装,请通过命令行运行 msiexec 命令。此命令必须包括一系列参数,以提供安装设置和目录路径的信息。

在您需要执行多个安装并且不想干扰使用您系统中的计算机的人员时,Crystal Reports 无提示安装特别有用。您也可以在自己的脚本中使用无提示安装命令。例如,如果贵组织通过使用脚本将软件安装到计算机上,则可以将 Crystal Reports 无提示安装命令添加到脚本中。?注意: 通过 Crystal Reports 安装程序不能进行无提示安装,而且它只适

用于有经验的 Crystal Reports 管理员。

水晶报表Crystal Reports培训教程 35_水晶报表教程

运行无提示安装36

?

?执行无提示安装时,您默认接受 Crystal Reports 最终用户许可协议。可以在产品分发介质的 Docs 文件夹中找到此许可协议的副本(license.pdf)。无提示安装专门用于新安装;不要在升级时使用它。

无提示安装命令包含后接安装可执行文件的位置的 msiexec 命令,以及许多提供有关安装的信息的参数。下例在 mymachine 上安装Crystal Reports:

Msiexec /i "\\mymachine\Business Objects\Crystal

Reports11\scr.msi" REBOOT=ReallySuppress /qn+ PIDKEY=A1234-ABCD123-12345A6-AB12 INSTALLDIR="C:\Program Files\Business Objects\Crystal Reports 11" COMMONVERDIR="C:\Program

Files\Common Files\Business Objects\3.0"

此示例使用了最常用的参数。可以选择任意数量的有效参数,但最好是使无提示安装保持尽可能的简单。

下表列出了在无提示安装中使用的最常用参数。要使用某个参数,请将其放在 msiexec 命令和安装文件的路径之后的命令行上。

注意: 此表中未列出的参数可能可用,但它们未经测试。不支持未测试的参数。安装参数

INSTALLDIR="filepath"说明指定您想在其中安装 Crystal Reports 的

计算机和目录。请用安装目录的完整路径

替换 filepath。例如,“C:\Program

Files\Business Objects\Crystal

Reports 11”。

COMMONVERDIR="filepath"指定您想将在安装过程中创建的公共文件

目录存储到的计算机和目录。请用公共文

件目录的完整路径替换 filepath。例如,

“C:\Program Files\Common

Files\Business Objects\3.0”。

PIDKEY=00000-0000000-指定您的产品激活密钥号码。

0000000-0000

REBOOT=ReallySuppress防止 Crystal Reports 提示用户重新启动

计算机。

/qn+以静默方式执行安装,但在安装完成时提

示用户。

/qn以静默方式执行安装,但不提示用户。

37Crystal Reports 用户指南

安装参数

ADDLOCAL说明指定您想安装的功能的列表(由逗号分

隔)。

例如,ADDLOCAL=ALL

注意: 如果在此表中使用任何 EXCLUDE

参数,则还必须使用 ADDLOCAL。

EXCLUDEDOTNETFILES

EXCLUDEJAVAFILES

EXCLUDERDCFILES例如,ADDLOCAL=ALL EXCLUDERDCFILES=1指定是否应安装 .NET 开发人员组件。例如,EXCLUDEDOTNETFILES=1默认值为 0,它指示应安装 .NET 开发人员组件。值 1 指示不应安装这些组件。指定是否应安装 Java 开发人员组件。例如,EXCLUDEJAVAFILES=1默认值为 0,它指示应安装 Java 开发人员组件。值 1 指示不应安装这些组件。指定是否应安装 RDC 开发人员组件。

例如,EXCLUDERDCFILES=1

默认值为 0,它指示应安装 RDC 开发人员

组件。值 1 指示不应安装这些组件。

注意: 可以使用无提示安装仅添加您已购买了许可证的功能(由许可证密钥控制)。如果添加没有许可证的功能,则该功能会被无提示安装程序忽略。

3.7升级 Crystal Reports 组件

如果购买了升级产品激活密钥号码,您将发现安装程序不会删除Crystal Reports 的前一版本。通常,Crystal Reports 组件的升级过程提供了并列式安装(也就是说,在旧版本或新版本的 Crystal Reports中都可运行的安装)。

注意: 当从 Crystal Reports 10、Crystal Reports 9 或 CrystalReports 8.5 升级时,支持 Crystal Reports 11 并列式安装。

升级 Crystal Reports 组件38

这种并列式行为适用于 Crystal Reports 和各种软件开发工具包(SDK)。Crystal Reports 11 for Visual Studio .NET 可在运行时用于并列模式中(也就是说,使用 Crystal Reports 10 for Visual Studio.NET 编写的应用程序将继续使用 Crystal Reports 10 for VisualStudio .NET 程序集运行)。但是,Visual Studio 集成并不是并列的;在任何给定的时间都只能将 Crystal Reports 的一个版本集成到Visual Studio .NET IDE 中。此原则同样适用于 Report DesignerComponent (RDC):RDC 可在运行时用于并列模式中,但 IDE 集成并不是并列的。

?

?注意: 当您升级 Crystal Reports 9 组件时,BusinessObjectsEnterprise 储备库 的情况比较特殊。您必须从 CrystalEnterprise 标准产品开发介质中安装 BusinessObjectsEnterprise 储备库(有关信息,请参阅《Crystal Enterprise 11 安装指南》)。然后,您必须将在 Crystal Reports 9 中添加的储备库内容移动到新的储备库。有关如何执行此操作的信息,请参阅《业务视图管理员指南》中名为“迁移 Crystal 储备库”的章节。有关可能与报表创建环境相关的更多信息,请参阅产品分发介质附带的“发行说明”(release.htm)。

第4章 快速开始

4.1学习如何使用 Crystal Reports

?

?

?可以在本章中Crystal Reports:可以学习 Crystal Reports 中的示例报表和示例数据库。可以使用 第3 页上的 “新用户快速入门”中详细的描述和说明。可以使用 第21 页上的 “高级用户快速开始”中的摘要和主题相互

参考,这对于已经熟悉报表概念的用户尤其有用。

每种方法对于学习和理解 Crystal Reports 都很有帮助。尽管您可使用任何一种方法开始,您总可以返回本章并查阅所需要的其它方法。

4.1.1示例数据 -- Xtreme.mdb

Crystal Reports 附带了示例数据库 Xtreme.mdb,供您在学习程序时使用。Xtreme.mdb 是 Microsoft Access 数据库,里面包含了所有必需的驱动程序。您应该能直接打开该数据库,然后开始设计报表。本手册中的所有示例实际上都基于 Xtreme.mdb 中的数据。

Xtreme.mdb 是一个数据库,其中包含了有关 Xtreme Mountain Bikes(Xtreme 山地车)的数据,Xtreme Mountain Bikes 是一家虚构的山地车及零件制造商。

注意: 示例数据用于阐明在培训环境中的各种报表概念,而不是用来教授数据库设计。设计数据库的方法有很多,选择此设计方案是因为它将教程和示例的焦点始终放在报表上,而不是数据上。

4.2报表创建向导

本章中的教程教您如何从头开始创建报表。但是作为一种补充或选择,您可能想要使用开始页上提供的报表创建向导。共有四个报表创建向导:

?标准

?交叉表

?邮件标签

?OLAP

40Crystal Reports 用户指南

每个向导提供一系列屏幕以指导您创建报表。许多向导有特定报表类型所独有的屏幕。例如,“邮件标签报表创建向导”有一个屏幕,允许您指定希望使用的邮件标签类型。

注意: 在报表创建向导中单击了“完成”按钮之后,如果不希望程序收集数据源中的所有数据,则可以单击“导航工具”工具栏上的“停止”按钮。如果想调整向导创建的报表布局,此方法十分有用。

4.2.1标准

“标准报表创建向导”是最常用的向导。它指导您如何选择数据源和链接数据库表。它还可以帮助您添加字段及指定要使用的分组、摘要(总计)及排序判据。最后,“标准报表创建向导”还指导您创建图表和选择记录。

“模板”屏幕包含预定义布局,可应用于报表使其效果更鲜明。

4.2.2交叉表

“交叉表报表创建向导”指导您创建一种以交叉表对象的形式显示数据的报表。其中的两个特殊屏幕(“交叉表”和“网格样式”)可帮助创建交叉表本身并设置其格式。

4.2.3邮件标签

“邮件标签报表创建向导”允许您对要创建的报表进行格式设置,以打印在任意大小的邮件标签上。您可以使用“标签”屏幕选择一种商用标签类型,也可以自己定义用于任何多列样式报表的行列布局。

4.2.4OLAP

使用“OLAP 报表创建向导”可以创建以网格对象的形式显示 OLAP 数据的报表。“OLAP 报表创建向导”虽然在某些方面与“交叉表报表创建向导”类似,但由于需要处理 OLAP 数据源的缘故,因而仍然有些区别。首先指定 OLAP 数据的位置,然后选择要包含在网格中的维度。接下来筛选报表数据并选择网格对象的样式,您也可以对其进行自定义。最后,如果希望的话,可以为网格定义标签并插入图表。

这只是 Crystal Reports 中提供的四种“报表创建向导”的简要概述。

水晶报表Crystal Reports培训教程 35_水晶报表教程

新用户快速入门41

4.3新用户快速入门

下面的教程帮助您在创建第一张报表时即树立信心。

在本教程中,当创建“客户列表”报表时,会获得有关该程序的介绍。“客户列表”是最基本的商务报表,一般含有诸如客户名称、城市、地区和联系人姓名之类的信息。

现在开始学习基本概念:选择数据库,在报表中放置一些字段,然后选择要包含的特定记录。接下来学习如何:

?插入和移动数据库字段。

?添加标题并设置格式。

?在“预览”选项卡中显示报表,以便可以精细调整报表。

?使用“选择专家”以确保在报表中只包含所需的数据。

?移动对象。

?数据分组及排序。

?插入图片。

?打印报表。

4.3.1开始之前

本教程假设您已经熟悉了 Microdoft Windows,并使用 Windows 环境中常见的惯用术语和过程。如果您还不熟悉 Windows,请参考Microsoft Windows 文档,以获得进一步的解释。

程序中所有报表节的默认字体都设置为宋体、10 磅。如果更改了默认字体,或者打印机不支持这种字体,那么字段大小、字段间距和屏幕显示看上去将和教程中的不一样。

本教程是在 Microsoft Windows 2000 平台上设计的。如果使用不同的平台,则屏幕显示可能略有不同。

如果您不熟悉 Crystal Reports 环境,请查看 第195 页上的 “格式,其中介绍了如何使用网格、自由格式位置、使用准则及格式化活动。化”

42Crystal Reports 用户指南

4.3.2创建报表

1如果 Crystal Reports 中尚未显示开始页,请单击“开始页”选项

卡。

开始页的“新建报表”区域包含了多个向导,可引导您完成创建特定类型报表的过程。因为在此处是学习报表的概念,所以可以跳过向导,从头开始创建报表。在完成本教程的学习之后,可以使用向导创建一些报表,以比较哪种报表创建方法最适合您。

2在“新建报表”区域中,单击“空白报表”。

出现“数据库专家”对话框。

注意:可以基于数据库文件、SQL/ODBC 数据源、业务视图以及其他各种数据源来创建报表。

4.3.2.1 选择要使用的数据库

创建报表的下一个步骤是选择数据库。在本教程中选择 Xtreme.mdb示例数据库。

X选择数据库

1在“数据库专家”对话框中,展开“创建新连接”文件夹,展开“数

据库文件”;然后搜索 Xtreme.mdb 示例数据库。

\Program Files\Business默认情况下,此文件安装在

Objects\Crystal Reports 11\Samples\Chs\Databases 目录下。

注意:

?必须使用“打开”对话框才能找到 Xtreme 数据库。

?如果希望在选择数据库后看到数据库和服务器属性,请在“数据

库专家”中右击数据库节点,然后从快捷菜单中选择“属性”

2

3

4新用户快速入门43展开 Xtreme.mdb 连接的“表”节点,查看表的列表。因为在本教程中只处理客户信息,因此请选择“客户”表。选择“客户”并单击 > 箭头,将其添加到“选定的表”列表中,然后单击“确定”。出现 Report Designer 的“设计”选项卡。单击“标准”工具栏上的“字段资源管理器”。

出现“字段资源管理器”对话框。

注意:现在“字段资源管理器”对话框可能处于停靠或浮动模式,这取决于您最后一次使用 Crystal Reports 时该对话框的外观。有关停靠资源管理器的更多信息,请参阅 第98 页上的 “打开和停靠资源管理器”

44Crystal Reports 用户指南

4.3.2.2 报表节

“设计”选项卡分为五个节:“报表页眉”(RH)、“页眉”(PH)、“详细资料”(D)、“报表页脚”(RF) 和“页脚”(PF)。不论何时,只要不能确定所在的报表节,只需简单地查看一下报表左侧的阴影区,这里一直显示节名称或指派给该名称的首字母。请参阅 第74 页上的 ““设计”选项卡”。

如果在“选项”对话框的“设计视图”区域中选中了“短节名”复选框,那么报表页眉、页眉、详细资料、报表页脚和页脚分别显示为 RH、PH、D、RF 和 PF。如果没有选定该复选框,请遵循下列步骤:

X若要显示短节名

1在“文件”菜单上,单击“选项”。

出现“选项”对话框,其中的“布局”选项卡是当前活动的选项卡。在“设计视图”区域,选中“短节名”复选框。

单击“确定”按钮返回报表。23

4.3.2.3 插入字段

当创建新报表时,可以使用“字段资源管理器”对话框插入数据库字段。该对话框在关闭前一直保留在屏幕上。该对话框中列出所有可使用的表。

通过插入“客户名称”字段开始在报表上放置对象。

X插入字段

1

2展开“字段资源管理器”对话框中的“数据库字段”节点,然后展开一个表。通过单击一次字段名突出显示该字段名。

新用户快速入门45

在突出显示字段名时,通过右击字段并选择快捷菜单中的“浏览数据”,可以查看该字段的值的子集、字段类型和大小。

3单击“客户名称”字段,将它拖动到报表的“详细资料”节中。

在将字段拖动到报表时,出现带箭头光标的对象框架:

?

?

4该对象框架代表刚选定的要放置的对象。对象框架的大小与选定字段中数据的大小近似。在“详细资料”节中尽量将对象框架向左移动。

如果将字段向左移动得过多,箭头光标就会变为停止光标,说明不能将字段移动得那么远。请牢记:不能将任何对象放置在页边距之外。“设计”选项卡看上去应类似于:

4.3.2.4 了解字段

?

?在进一步学习之前,请查看一下刚才放置在“详细资料”节中的字段。首先,对象框架表明在打印报表时,字段值将出现在该框所在位置。如果未选择“选项”对话框的“布局”选项卡上的“显示字段名称”

复选框,则对象框架会包含多个 X,指明数据库字段包含文本字符串。其他数据类型有不同的字符表示。例如,货币数据类型用

$55,555.56 表示。

水晶报表Crystal Reports培训教程 35_水晶报表教程

46Crystal Reports 用户指南

?

?

?

?如果报表未显示字段名,则对象框架中 X 的数目为数据宽度,也即由数据库定义的字段中的最大字符数。不管报表是否显示字段名,对象框架的宽度都是字段宽度(分配给字段用于打印的空间量)。开始的时候设置为显示字段中最大字符数所需的宽度(使用选定的字段字体)。可以调整字段大小以更改字段宽度。字符或 X 的大小指示为字段中的字符选定的磅值。显示字符或 X 时所用的字体和样式(加粗、下划线等)指示为字段中的字符选定的字体和样式。在本教程的下面内容中,将学习如何更改这些属性。将行间距调整到为字段中字符选定的磅值。

4.3.2.5 添加附加字段

下一步将在报表中插入两个附加字段。但是,这一次将使用 Ctrl-单击组合方式同时添加它们。

X添加附加字段

1突出显示“字段资源管理器”对话框中的“城市”字段,按下键盘上

的 Ctrl 键,然后突出显示“国家/地区”字段。释放 Ctrl 键。如果在字段列表中滚动,可以注意到两个字段已经选定。

注意:使用 Ctrl-单击组合方式可以选择非连续范围内的字段。使用Shift-单击组合方式可从列表中选择多个连续的字段。

拖动字段然后放置。

当光标在报表上移动时,对象框架和箭头光标一起出现。

将字段放置到“客户名称”字段的右侧。

两个字段都出现在报表“详细资料”节中,其顺序和在“字段资源管理器”对话框中所列顺序相同。23

4.3.2.6 选择字段

选定字段时,出现对象框架,在对象框架的右侧、左侧、顶部和底部各有一个手柄(框)。这些手柄说明字段已被选定,是活动字段。要对字段进行任何操作(如更改字体、移动等),首先需要选定这个字段:?将光标定位到对象框架内部然后单击。出现手柄,表明已选定该对象。?将光标从对象框架中移开,然后单击窗口中的空白部分。手柄就会

消失。

这就是选择对象和取消选择对象所要做的全部工作。

新用户快速入门47

4.3.2.7 调整字段大小

若要调整字段大小,请遵循下列步骤:

1

2

3

4单击“详细资料”节中的“客户名称”字段将其选定。按下 Ctrl 键,单击字段标题选定两个对象。将光标移动到字段右侧调整大小手柄上,直到光标变为调整大小光标。向右调整字段大小,调整到大约 2 英寸长。

4.3.2.8 检查所做工作

现在让我们看一看放置三个字段后报表的外观。

1单击“标准”工具栏上的“打印预览”激活“预览”选项卡。

屏幕看上去应类似于:

注意:第一次预览报表时,必须单击标准工具栏上的“打印预览”来激活“预览”选项卡。“预览”选项卡出现在“设计”选项卡的右侧。可以通过单击相应的选项卡在设计和预览报表之间来回切换。

您已经有了一个初步的客户列表报表,但是还有几个字段需要添加。2完成对报表的检查后,单击“设计”选项卡返回。

4.3.2.9 在文本对象中组合数据库字段

可以将“联系人名”和“联系人姓”字段插入到一个文本对象中,而不是将它们作为单独的两个对象添加。这样只需更改一个对象,就可控制两个字段的格式设置。在文本对象中插入字段时,字段自动剪裁(即在两边没有任何额外的空白区域)。这一点很重要,因为字段大小是固定的,而字段数据的大小却各不相同,

导致产生长短不一的多余空白区域。

48Crystal Reports 用户指南

X在文本对象中组合字段

1

2单击“插入工具”工具栏上的“插入文本对象”。在报表上移动鼠标时,一个对象框架将出现在它旁边。在“详细资料”节中字段的右侧插入字段。

在拖动字段时,“设计”选项卡会在必要时自动向右滚动。在单击以放置对象时,出现文本对象,“设计”选项卡的水平标尺变为用于编辑文本对象的标尺/选项卡选择器。单击报表的空白区域或字段对象,出现标准的“设计”选项卡标尺。

单击文本对象的边框,以选定它调整大小。手柄出现在对象的所有边上。

在文本对象右侧的大小手柄上移动光标,将宽度增加 1 英寸。也许需要继续向右侧滚动调整大小。

双击文本对象内部以选择它来进行编辑。请注意此时插入点在文本对象中闪烁。

在“字段资源管理器”对话框中选择“联系人姓”字段。请记住:通过拖放标题栏可移动“字段资源管理器”对话框。

将字段拖动到文本对象。

在文本对象上移动光标,直到它变为拖放光标。

释放鼠标按钮将字段放在文本对象中。现在光标出现在文本对象中的“联系人姓”字段后。

在“联系人姓”后键入一个逗号和一个空格。

在“字段资源管理器”对话框中,突出显示“联系人名”字段。将字段拖动到文本对象。

在文本对象上移动光标,直到它变为拖放光标。将光标移动到刚才键入的逗号和空格的右侧,然后释放鼠标按钮。该字段插入到逗号和空格的右侧。

单击

“预览”选项卡查看刚才放置的字段。34567891011121314

新用户快速入门49

报表现在看上去应类似于:

4.3.2.10 添加汇总信息

下一步是往报表中添加汇总信息。在添加汇总信息时,允许您指定报表的作者、标题和主题,以及和报表相关的任何关键字或者备注。在添加汇总信息后,用户可以快速查找报表的相关信息。

X添加汇总信息

1在“文件”菜单上,单击“摘要信息”。

出现“文档属性”对话框,其中“摘要”选项卡为活动选项卡。2

3在所提供的文本框中输入报表的有关信息。一定要在“标题”文本框中输入标题“客户列表”。该信息将在本教程的下一个节中使用。完成时,单击“确定”

50Crystal Reports 用户指南

4.3.2.11 添加标题

正如您所看见的一样,没有标题的报表看上去不完整。尽管可以使用文本对象添加标题,但也可以让程序直接从“文档属性”对话框的“标题”文本框中直接提取标题信息。

X添加标题

1

2

3

4

5

6单击“设计”选项卡。在“字段资源管理器”中,向下滚动到“特殊字段”并展开它。选择“报表标题”。在报表上拖动光标。出现一个对象框架。将对象框架定位到“报表页眉”(PH) 节的左上角,然后释放鼠标按钮以放置该对象。单击“预览”选项卡或“刷新”,检查所做的更改。

报表标题对象显示您刚才在“文档属性”对话框中“标题”文本框中输入的标题。

4.3.2.12 设置对象格式

现在可以设置报表标题格式。但是这一次将在“预览”选项卡中完成此项任务。以便在设置标题格式时更容易查看所做的工作。

X设置对象的格式

1

2若要使标题居中,应该首先扩展“标题”字段,让它和报表中数据的宽度大致相同。若要完成此项任务,请单击该对象将其选定。将光标定位到该对象的右侧,直到光标变为调整大小光标。拖动字段

框的右边缘,直到它与“联系人姓名”字段对象中数据的右边缘平齐。

即创建了一个大字段,它从报表的左边缘一直延伸到右边缘。

在继续选定报表标题对象的情况下,单击“格式设置”工具栏上的“居中”。标题移动到该对象中间位置。

右击该对象,从快捷方式菜单选择“格式字段”。

在“格式编辑器”出现时,单击“字体”选项卡。

从“样式”列表中选择“加粗”,从“大小”列表中选择16(或者适合于所使用字体的磅值)

,将报表标题的字体变大、加粗。3456

水晶报表Crystal Reports培训教程 35_水晶报表教程

新用户快速入门51

7

8

9从“颜色”调色板中选择“深红色”更改文本的颜色。注意在“示例”框中显示了文本外观的示例。完成时,单击“确定”。调整报表标题对象垂直方向的大小,以适应增大的标题。

设置格式后,该标题在报表中变得醒目了。

4.3.2.13 添加字段标题

正如您所看见的一样,“联系人姓名”字段是唯一没有标题的字段。在这一节中,将创建一个标题。

X添加字段标题

1

2

3

4单击“插入工具”工具栏上的“插入文本对象”。在“联系人姓名”字段正上方的“页眉”节中插入文本对象。单击“格式化”工具栏上的“下划线”,然后在文本对象中键入“联系人姓名”。在文本对象外部单击光标。

现在“联系人姓名”字段有了标题,其外观和其它字段的标题一样。

4.3.2.14 保存报表

1单击“标准”工具栏上的“保存”以保存所做的工作。

因为这是第一次保存报表,所以“另存为”对话框出现,并显示将在其中保存文件的默认目录。请注意,同时还显示了基于以前定义的报表标题的默认文件名。

在“文件名”框中键入 Custlist.rpt,然后单击“保存”

。2

52Crystal Reports 用户指南

报表即保存到默认目录或所选择的其他目录。

3单击“预览”选项卡以查看报表。

报表现在看上去应类似于:

恭喜!您刚才已经创建了一个基本的列表报表。在本教程下面内容中将继续工作以改进该报表。

4.3.3记录选定

Crystal Reports 允许您限制或约束要包括在报表中的记录。在本节中将学习如何:

?选定要包含在报表中的记录。

?保存报表(包括选择条件)。

例如,也许希望有一个客户列表,在此列表中只列出美国的客户。示例数据中包含了来自美国和世界客户的记录。使用“选择专家”很容易对列表进行此类限制。

4.3.3.1 输入选择条件

在报表中滚动时,可以看见报表中包含了来自于许多不同国家/地区的客户信息。在本步骤中,将要显示的国家/地区限制为 USA。

X输入选择条件

1

2

3首先单击“设计”选项卡返回设计模式。单击报表的空白区域,以确保所有字段均取消选择。单击“专家工具”工具栏上的“选择专家”

新用户快速入门53

出现“选择字段”对话框。

该对话框在“报表字段”节中列出该报表当前的全部字段,然后在“数据库字段”节中列出来自各个表的全部可用字段。

4因为要基于“国家/地区”字段选定记录,所以请选择“字段”列表

中的“国家/地区”,然后单击“确定”。

出现“选择专家”。

假设正编写下面的语句:

选择所有记录,其中记录中客户的国家/地区

在语句中加上希望程序在为报表选择记录时所使用的条件。现在条件是“任意值”,说明对记录选定没有任何限制。

5单击运算符框上的箭头以查看其他选项。因为只需要国家/地区是

USA 的那些记录,所以选择“等于” 条件。

在右边出现一个新框。对话框中的语句是:

选定所有记录,其中记录中客户的国家/地区等于

至此,加上值 USA 即可完成该语句。

6单击空白列表上的箭头。出现国家/地区值列表。从列表中选择 USA。

现在语句是:

选定所有记录,其中记录中客户的国家/地区等于 USA

7单击“确定”返回

“设计”选项卡。

54Crystal Reports 用户指南

8单击“预览”选项卡检查工作结果。

将出现“记录选定公式中的更改”对话框。

单击“刷新数据”。

通过从“文件”菜单中选择“另存为”,并将新报表命名为 USA.rpt,可以在不覆盖原始报表的情况下保存这一版本的报表。910

恭喜!您已经开始设置报表格式,并在报表上添加了选择条件。此外,还学习了如何操作数据。至此,已经对自己能准备的各种功能强大的报表类型有了很好的了解。

4.3.3.2 删除字段

既然在报表中只包含来自于 USA 的记录,那么就没有必要在报表的正文中显示“国家/地区”字段了。在继续操作之前,可以删除该字段。X删除字段

1

2使用 Ctrl-单击组合方式选择“国家/地区”字段和“国家/地区”列标题。按键盘上的 Delete 键。

这就是从报表删除字段所需的全部操作。

报表现在看上去应类似于:

4.3.3.3 平衡字段间距

因为删除了“国家/地区”字段,所以在“城市”和“联系人姓名”字段之间存在大量的空白区域。您也许对出现的间距感到满意,但是如

果列在页面上分布得更均衡,也许可读性更强。

新用户快速入门55

X平衡字段间距

1

2

3返回“设计”选项卡。使用 Ctrl-单击组合方式选择“联系人姓名”字段及字段标题。将光标放置在两个突出显示的文本对象中的某一个上,将它们向左侧拖动,使其距“城市”字段更近。单击“预览”选项卡再次检查所做的工作。

报表看上去应类似于:字段之间的间距好多了,但是报表标题看上去好象不居中。

45

单击报表标题将其选中。将光标定位到该对象的右侧手柄上,直到光标变为调整大小光标。拖

动对象框架的右边缘,直到它和“联系人姓名”字段对象中的数据的右边缘平齐。

报表标题将根据对象的大小自动居中对齐。

4.3.4分组及排序

可以用各种方式对报表中的数据进行分组及排序。排序和分组工具为自定义报表提供了高度的灵活性。

4.3.4.1 将报表分组

在许多报表中需要将数据进行分组,以便于阅读和理解。CrystalReports您可以很容易地实现这一点。对于客户列表,将根据地区对客户进行分组,然后在每一组内按字母顺序对客户排序。

X将报表分组

1当在“设计”选项卡上时,单击“插入工具”工具栏上的“插入组”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

56Crystal Reports 用户指南

出现“插入组”对话框。

2从第一个下拉列表中的“客户”表中选择“地区”。

程序提取“地区”字段中值相同的全部记录,将它们放置在报表的一个分组中。

从第二个下拉列表中选择“按升序”。

地区分组将按字母升序顺序显示在报表上。

单击“确定”。

请注意,现在在“设计”选项卡中出现了两个新节:GH1(组页眉 #1)和 GF1(组页脚 #1)。这就是程序显示报表已分组的方法。

单击“预览”选项卡查看报表的外观。345

6如果组树不可见,选择“标准”工具栏上的“切换组树”以查看报表

中的组。

新用户快速入门57

可以单击“组树”中的组名以查看感兴趣的组。例如,要查看德克萨斯 (Texas) 客户组,单击“组树”中的 TX。程序跳转到德克萨斯组,在“预览”选项卡中显示该组。“组树”允许快速跳转到感兴趣的特定组,而无须滚动报表查找该组。有关组树的更多信息,请参阅 第78 页上的““组树”视图”。

注意: 对许多报表来说,可能需要在其中插入汇总、小计和总计。例如,如果创建的是销售报表,而不是客户列表,则可能需要计算每个地区的总销售额。请参阅 第141 页上的 “排序、分组及总计”。

4.3.4.2 了解“活动”组页眉

在插入组时,组名字段自动插入到报表的“组页眉”节中。组名字段显示当前的组名。例如,如果根据地区分组,预览报表时可以看见 CA(加利福尼亚)组的组页眉显示为“CA”。

组字段名自动设置格式,以便相对于组中的记录而言更醒目。

4.3.4.3 对记录排序

在典型的客户列表报表中,客户名称按字母顺序排列。在本例中,将对每个地区内的客户名称按字母顺序排序。

X对记录排序

1在“预览”选项卡上时,单击“专家工具”工具栏上的“记录排序

专家”。

将出现“记录排序专家”。

“可用字段”列表框显示当前在报表上的所有字段和数据源中的所有

字段。可以选择基于任何字段进行排序。

在“排序字段”列表框中显示报表中已排序的字段。因为地区字段已排序,所以要做的排序是在每个地区内进行,而不是针对整个报表。

58Crystal Reports 用户指南

2

3突出显示“客户姓名”字段,然后单击 > 箭头按钮将其添加到“排序字段”列表中。在“排序方向”中选定“升序”,然后单击“确定”。报表现在看上

去应类似于:

请注意每组中的记录都按字母顺序显示。

4.3.5完成报表

距完成报表只差一步了。需要在报表的第一页上添加公司徽标。

4.3.5.1 插入公司徽标

在本节中,将在报表的第一页的顶部放置公司徽标。

X插入公司徽标

1在“设计”选项卡上时,单击“插入工具”工具栏上的“插入图片”。

出现“打开”对话框。

选择一个位图徽标 (.bmp) 文件,然后单击“打开”。

在报表上移动光标时出现对象框架。该对象框架代表将要放置的徽标。

将对象框架定位到报表的“报表页眉”(RH) 节的左上角,然后单击鼠标放置。

将徽标放置在“报表页眉”(RH) 节中,以确保只在报表的第一页中打印徽标。

注意:虽然在放置图形时“报表页眉” (RH) 节中的空间似乎不够,

但是该节将自动展开以容纳该图片。23

高级用户快速开始59

4单击“预览”选项卡以查看报表。

最终报表看起来应如下所示(带有在步骤 2 中选择的徽标):5单击“标准”工具栏上的“保存”以保存该报表。

您刚才已经完成了第一份报表。

相关主题

?有关分发报表的信息(打印、导出等),请参阅 第195 页上的 “格

式化”和 第325 页上的 “打印、导出和查看报表”中的打印主题。

4.4高级用户快速开始

如果您是经验丰富的 Windows 用户,希望直接进入该程序,第一次时请遵循这些步骤建立报表。

如果您不是很有经验的用户,请查看 第3 页上的 “新用户快速入门”。

X选择报表类型及数据源

1

2在 Windows 中,单击“开始”>“程序”>“BusinessObjects 11”>“Crystal Reports”,然后选择“Crystal Reports 11”。单击“空白报表”以打开“数据库专家”对话框。

作为创建空白报表的一种替代方法,您可以选择四个报表创建向导中的一个。

选择向导后,可以在各种数据源的基础上生成报表。

浏览

“数据库专家”中的内容,查找要用于报表的数据源。3

60Crystal Reports 用户指南

4

5选择要在报表中使用的表,单击 > 箭头将其添加到“选定的表”列表中。添加完所有要使用的表后,单击“数据库专家”上的“确定”。

注意:如果在“数据库专家”对话框中选择多个表,则出现“链接”选项卡。有关链接的更多信息,请参阅 第82 页上的 “链接多个表”。出现带“报表页眉”、“页眉”、“详细资料”、“页脚”和“报表页脚”区的“设计”选项卡。通过在各区中插入项目和设置格式来创建报表。

注意: 若要在报表中使用附加的数据库表,并逐条记录地匹配这些表,请单击“专家工具”工具栏上的“数据库专家”,选择这些表,然后在“链接”选项卡出现时在其中建立链接。

X在“设计”选项卡上处理报表元素

1每个默认报表区中都包含一个节。若要添加附加节,请单击“专家工

具”工具栏上的“节专家”,然后用“节专家”添加所需节。

在区中添加节后,即可以在“节专家”中移动、合并及删除节。请参阅 第208 页上的 “使用准线设计”。

若要打开或关闭网格,可从“文件”菜单中选择“选项”命令,出现“选项”对话框后,选中或清除“布局”选项卡上“设计视图”区域中的“网格”复选框。请参阅 第207 页上的 “使用网格”。

如果在网格关闭的情况下想使用对齐准线定位对象,请在希望准线出现的地方单击顶部或左侧标尺。

更进一步使用准线的方法:

?将字段向准线拖动,直到与准线对齐。

?拖动准线箭头以移动准线(及任何与之对齐的对象)。

?将准线箭头从标尺上拖走以删除准线。请参阅 第208 页上的“使用准线设计”。

如果“字段资源管理器”对话框不可见,请单击“标准”工具栏上的“字段资源管理器”。

展开“数据库字段”节点显示字段列表。为提高输入多个字段的速度,该框将一直保留在屏幕上,直到您关闭它。如果愿意,可以将该对话框移动到新的位置,或者调整其大小。请参阅 第84 页上的“将数据放在报表上”。

选择希望在报表上出现的字段。

可以一次选择并放置一个字段,使用 Shift-单击组合方式选择相邻的多个字段,或使用 Ctrl-单击组合方式从列表中任意选择字段。拖放也是活动的。将字段放置在“详细资料”

节中希望字段出现的位置。2345

水晶报表Crystal Reports培训教程 35_水晶报表教程

6

7

8

9高级用户快速开始61在放置多个字段时,字段显示的顺序和它们在“字段资源管理器”对话框中显示的顺序相同。程序用矩形框架标记每个字段的位置。框架中的字符指示字段是文本 (xxx...)、数字 (555...)、货币 ($555...)、日期 (12/31/99)、时间 (00:00:00)、日期时间 (12/31/99 00:00:00)还是布尔值 (T/F) 类型。注意:?选择“选项”对话框中(“布局”选项卡)的“显示字段名”复选框,可查看字段名和字段类型。?除非未选中“选项”对话框中(“布局”选项卡)的“插入详细字段标题”复选框,否则程序自动在“页眉”节中放置字段标题。?如果向报表添加了附加的“详细资料”节,那么对于报表中“详细资料 A”(原始)节中的字段,字段标题将只放置在“页眉”节中。在放置好对象后,可能还需要调整报表节。若要这样做,请右击节标尺左侧的阴影区,使用显示的快捷方式菜单:?若要展开节以容纳附加的行,请选择“插入行”命令。?若要使程序沿水平方向自动对齐节中的对象,请选择“排列行”命令。?若要缩小节的大小,以消除对象上下不必要的空白区域,请选择“适应节”命令。请参阅 第228 页上的 “在行间使用空白区域”。若要生成报表标题,首先必须在“文档属性”对话框中输入标题。在“摘要信息”。在“文档属性”对话框的“标题”文本框中输入标题。单击“确定”。从“字段资源管理器”中的“特殊字段”中选择“报表标题”。在报表上移动光标时,出现矩形位置框架。在“报表页眉”(RH) 节中单击,以放置报表标题。报表标题字段中包含了在“文档属性”对话框的“标题”文本框中键入的文本。请参阅 第93 页上的 “将标题页添加到报表中”。若要查看如何打印结果,请单击“标准”工具栏上的“打印预览”。

若要在创建报表过程中加快处理时间,可以在预览报表时只使用可用数据的一个小子集。若要这样做,请在“文件”菜单上选择“打印”,然后单击“预览示例”。请参阅 第77 页上的 ““预览”选项卡”。在任一种情况下,程序都将您带至“预览”选项卡。在“预览”选项卡中,在查看作为实际报表数据的结果的同时,可以仔细调整报表。也可以关闭“预览”选项卡,在

“设计”选项卡中继续处理报表。“文件”菜单上,单击

62Crystal Reports 用户指南

X使用其他报表功能

1

2

3

4

5

6

7

8如果希望设置字段格式,改变字段的位置或宽度,或者插入汇总,请单击该字段将其选中。在每个选定字段的顶部、底部和两侧都出现手柄:?若要更改字段位置,请使用鼠标将字段位置框架拖动到新位置。?若要更改字段宽度,请使用鼠标拖动右侧手柄或左侧手柄。?右击该字段对其进行格式设置或汇总。出现快捷菜单,其中列出用于字段格式设置及汇总的命令。提示:在“格式设置”工具栏上有许多字体和格式设置选项。注意:若要只在特定条件下应用格式设置,请单击“格式编辑器”中格式设置属性旁边的“条件公式”,然后创建定义那些条件的公式。请参阅 第229 页上的 “使用条件格式化”。若要创建进行数据计算或比较的公式,请选择“字段资源管理器”中的“公式字段”。注意:还可以单击“专家工具”工具栏上的公式工作室,以便处理公式、自定义函数、SQL 表达式等等。单击“新建”。出现“公式名称”对话框。输入公式名,然后单击“确定”。公式工作室将出现,“公式编辑器”处于活动状态。在“公式编辑器”中输入公式。输入字段、运算符和函数,方法是从其各自的列表中选择或者键入它们。可以通过单击“检查”来检查公式语法。完成编辑后,单击“保存并关闭”以返回到“字段资源管理器”对话框。正如您对数据库字段所做的操作一样,单击“插入到报表”以放置公式。请参阅 第356 页上的 “使用公式”。若要插入子报表(报表中的报表),请单击“插入工具”工具栏上的“插入子报表”,然后选择现有的报表作为子报表导入,或者使用“报表创建向导”创建新的子报表。请参阅 第403 页上的 “插入子报表”。如果希望子报表中的记录和主报表中的记录匹配,请单击“插入子报表”对话框中的“链接”选项卡。出现该选项卡时,在其中指定链接。请参阅 第406 页上的 “将子报表链接到主报表中的数据”。若要在报表中插入交叉表对象,请单击“插入工具”工具栏上的“插

入交叉表”。出现“交叉表专家”时,在其中设置交叉表。请参阅第279 页上的 “交叉表对象”

高级用户快速开始63

9若要创建参数字段(每当为报表检索数据时,提示您输入值的字

段),请单击“标准”工具栏上的“字段资源管理器”。出现“字段资源管理器”对话框时,选择其中的“参数字段”。单击“新建”建立参数字段。一旦创建完成,就可以像处理数据库字段一样将参数字段插入到报表中,或者从公式工作室的“字段”列表中进行选择。参数字段可以用在报表中(作为标题或标签提示)、选择公式中(作为选择条件提示)和公式中(用于各种目的,包括指定排序字段)。请参阅 第374 页上的 “参数字段和提示”。

若要添加图表,请单击“插入工具”工具栏上的“插入图表”。请参阅 第239 页上的 “图表”。

若要添加地图,请单击“插入工具”工具栏上的“插入地图”。请参阅 第254 页上的 “地图功能”。

若要插入电子数据表、图片或者其他 OLE 对象(可以在 ReportDesigner 中使用这些对象原应用程序提供的工具对其进行编辑),请从“插入”菜单中选择“OLE 对象”。请参阅 第270 页上的“OLE”和 第274 页上的 “处理静态 OLE 对象”。

若要更改记录排序顺序,请单击“专家工具”工具栏上的“记录排序专家”。将出现“记录排序专家”。突出显示您希望用于对报表数据排序的字段及排序方向。请参阅 第142 页上的 “单一或多个字段排

。序”

若要将报表限制为特定的记录(例如,今年到现在为止购买金额超过一万美元的加利福尼亚客户的记录),请单击希望选择所基于的第一个字段,然后单击“专家工具”工具栏上的“选择专家”。出现“选择专家”后,设置记录选择条件。

若要打印报表,请单击“标准”工具栏上的“打印”。

就这些了!创建报表就这么容易。101112131415

第5章 报表设计概念

5.1基本报表设计

本章旨在提出用于准备 Crystal 报表的一个结构化方法。此方法包括下列方面:

?决定报表内容。

?设计纸张原型。

这一节将使您对制表过程有个概念性理解。

5.2决定报表内容

在进行一切工作之前,您首先应当列出希望报表提供的信息的大纲。下面各节提供生成此大纲的指南。

5.2.1说明目的

5.2.1.1 报表的总体目的是什么?

报表是管理工具。其目的在于帮助您快速掌握原始数据中具有的要素和关系,以帮助您进行有效的决策。有效的报表须以逻辑方式提供正确的数据。如果提供错误的数据,或用随意的样式提供正确数据,此报表将会减慢决策的进程,甚至导致不正确的决定。

用一两句话说明报表的用途是报表设计的好的开始。用途陈述有助于您将注意力集中在主要需求上,并为报表指定出发点和目标。 ?

?

?下面是一些目的说明的示例。这个报表的目的是按销售代表显示每个月和年初至今的销售额,比较今年和去年的数量,并对销售额没有达到公司标准的代表作出标记。此报表旨在显示每个库存项目的销售活动,并在此基础上提出下一步的定货量建议。这个报表的目的是计算保铃球的平均分数,分析球队每个成员的不利

条件。

在开始之前先定义报表的用途是关系整个设计过程的关键步骤。

65Crystal Reports 用户指南

5.2.1.2 谁会阅读此报表?

一个报表通常会为许多人所使用。例如,一份详细的全公司范围的销售报表可能由销售代表、地区销售经理、全国销售经理和首席运营官(COO) 使用。

?

?

?

?这些人会对报表的不同方面感兴趣。销售代表会使用报表去评价个人的销售业绩,并与本地区其他代表的业绩相比较。地区销售经理会使用报表评价地区代表,并将本地区的业绩与其他地区的业绩相比较。全国销售经理将使用报表去评价地区经理们的业绩,并将整体销售额与当前销售计划相比较。COO 将使用报表从总体上评价营销副总裁和销售部的业绩,并计划生

产量和库房位置等问题。

由于报表的每个用户所关注的内容有所不同,所以对报表进行规划以包含每个用户所需的信息就非常重要。

5.2.2确定报表布局

5.2.2.1 报表的标题是什么?

为报表拟订指导性的标题。可能以后会修改它,但至少在创建原型报表时有标题可用。

5.2.2.2 页眉页脚中需要什么识别信息?

可能希望包含打印日期、制表人信息、一段描述报表目的的文字、数据包含的范围或其他类似信息。如果打算包含这些信息,将其记下来以便在准备原型中使用。

?

?

?根据所需的信息种类,信息来源多种多样。制表人信息可能取自所用数据库表的个别数据字段。如果取自数据库表,是什么表?或是什么组合表?可将一段文字作为文字对象进行创建,并放置在报表的任何位置。Crystal Reports 可生成诸如打印日期或页码等信息。

水晶报表Crystal Reports培训教程 35_水晶报表教程

决定报表内容66

5.2.3查找数据

5.2.3.1 要在报表中使用什么数据?

是否清楚报表所用数据库的类型?是根据数据文件、SQL/ODBC、业务视图还是字典创建报表?

如果不清楚,则向所在机构的数据库管理员寻求帮助,确定数据库的类型和数据的位置。有关更多信息,请参阅本联机帮助中的“访问数据源”。

是否足够熟悉该数据,可找到必要信息?当要查找“客户联系人”名字时,是否能从数据库表中找到此字段?

如果不能,则 MIS 专业人员、数据库管理员或合作者将必须帮助您熟悉该数据。

5.2.3.2 在报表正文中将出现什么特殊数据?

正文应包括达到该报表目的所需的全部数据。还应包括所确定的不同用户所需的全部数据。

此步骤需要考虑可用的数据库表。创建报表时,Crystal Reports 允许从不同数据库中组合数据,所以在工作中有很大的灵活性。

?典型报表中的很多数据可直接取自数据字段。哪些数据字段将被采

用?这些字段位于什么地方?

?另外一些数据将根据数据字段计算得出。计算时将用到哪些数据字段??还有另一些数据将用文本对象(如标题、注释及标签等)直接放入报表。

5.2.3.3 所需的数据是否存在?或是否需要计算?

一些报表信息(例如销售信息)可以直接从数据字段提取;而其他信息将不得不根据数据字段值进行计算(例如销售佣金,要根据销售额与配额的关系计算)。在设计中,将那些需要计算的数据分开或作出标记是十分有用的。请参阅 第360 页上的 “指定公式”。

5.2.3.4 何种类型的字段包含数据?

要花时间弄清计算所用的数据字段的数据类型。由于公式函数和运算符使用特殊种类的数据,所以在开始计算之前认清所用的数据类型很重要。例如,一些函数需要数字数据,而另一些函数仅处理字符串字段。

67Crystal Reports 用户指南

5.2.4操作数据

5.2.4.1 是否需要将数据组织成组?

怎样做?根据客户?根据日期?根据层次?或根据其他的标准?Crystal Reports 为在报表中数据编组提供几个选项。请参阅 第144 页上的 “将数据分组”。

5.2.4.2 是否需将数据按记录或组值排序?

Crystal Reports 提供两个选择。请参阅 第141 页上的 “理解排序选项”。

5.2.4.3 是否需要报表只包含特殊的记录和组?

Crystal Reports 提供选择是根据给定数据库的所有记录生成报表,还是根据数据库的有限记录集生成报表。Crystal Reports 可以根据简单的数据范围或比较关系选择记录,或创建复杂的公式来确定要包括的记录。花些时间来确定报表需要的记录,并列出选择这些记录的准则。请参阅 第131 页上的 “选择记录”。

5.2.4.4 是否需要总结数据?

对于报表中所有列的所有数值,是否需要合计、求平均数、计数或确定最大值或最小值?

Crystal Reports 允许这样做,它也能将总计(或总计平均数、总计计数等)放到选定列的底部。请参阅 第166 页上的 “计算百分比”和第161 页上的 “选择最前或最后 N 个组或百分比”。

5.2.4.5 在报表中何种信息需要标记?

您可能需要对报表上的数据进行标记以引起注意。例如,在库存报表上通常对不流动的库存项目进行标记,以引起特别注意。您可能需要对所显示的、上月、上季度或其他特定时间区间没有活动的项目作出标记。要标记信息,请标识该信息和触发标记的条件。

5.2.4.6 怎样做信息标记?

可能需要用星号或其他符号标记项目,或用字词作为标记。无论哪种情况,都应当写出标记说明,以方便使用。

Crystal Reports 可以给报表元素加下划线,或改变特殊报表项的字型、字号或颜色。它可以给项目加边框、画线和方框(将报表分成节)、设置标题等等。所有这些格式设置工具都可用来突出显示报表上的关键数据。请参阅 第195 页上的 “格式化”。

决定报表内容68

5.2.5确定打印区域特性

每个报表区域都有自己的打印特性。由于它们影响到不同的报表对象输出显示的时间和频率,因此了解这些特性很重要。

5.2.5.1 报表上的区域将按何种顺序打印?

区域按照在“设计”选项卡上出现的顺序(从顶到底)打印。如果在区域内有多个节,则按其出现的顺序打印。例如,如果有三个报表页眉节,在页眉区域内的节开始打印之前,将首先打印这三个节。

5.2.5.2 报表对象以何种频率打印?

对象输出显示的方式决定了您应如何设计报表。这将有助于确定图表、“交叉表”及获得明确结果的公式放置的位置。

报表页眉

?

?置于“页眉”区域中的对象在报表的开始处打印一次。置于该区域中的“图表”及“交叉表”包含用于整个报表的数据。注意:图表和“交叉表”都可以使用“组排序”来筛选报表数据;在这种情况下,图表或“交叉表”中显示的数据是整个报表数据的子集。置于该区域中的公式在报表的开始处计算一次。

页眉

置于“页眉”区域中的对象在每页的开始处打印一次。

?“图表”及“交叉表”不能置于该节中。

?置于该区域中的公式在每页的开始处计算一次。

组页眉

?

?置于“组页眉”区域中的对象在每个组的开始处打印一次。置于该区域中的“图表”及“交叉表”包含仅用于该组的数据。置于该区域中的公式在每个组的开始处计算一次。

细节区域

置于“细节”区域中的对象在每条记录处打印。

?“图表”及“交叉表”不能置于该区域中。

?置于该区域中的公式为每条记录计算一次。

组页脚

?

?置于“组页脚”区域中的对象在每个组的末尾处打印。置于该区域中的“图表”及“交叉表”包含仅用于该组的数据。置于该区域中的公式在每个组的末尾处计算一次。

69Crystal Reports 用户指南

报表页脚

?

?置于“报表页脚”区域中的对象在报表末尾处打印一次。置于该区域中的“图表”及“交叉表”包含用于整个报表的数据。注意:图表和“交叉表”都可以使用“组排序”来筛选报表数据;在这种情况下,图表或“交叉表”中显示的数据是整个报表数据的子集。置于该区域中的公式在报表末尾处计算一次。

页脚

置于“页脚”区域中的对象在每页的底部打印。

?“图表”及“交叉表”不能置于该区域中。

?置于该区域中的公式在每页末尾处计算一次。

5.3设计纸张原型

不管您的 Crystal Reports 专业技术水平如何,纸张原型都非常有用。当您初次学习使用此程序时它特别有价值。掌握这个纸张原型,将会把整个精力放在学习使用这些命令上,而不是放在试图同时设计与学习上。X设计纸张原型

1

2

3

4

5使用与即将完成的报表相同大小的纸张。定位标题和其他描述标题的信息,用方框与线条表示报表元素。定位页脚信息。检查页面布局是否均衡。查看要纳入到报表正文中的信息:

?统计所用的字段数量,并判断字段之间适当的间距。

?用矩形在判断的间距之内的字段中标记。

?如果需要,改变间距。

?确定数据在报表正文中出现的合理顺序。

?标志字段以表明该顺序。

用小方框表示组值和合计。

在需要出现标志的列上放置随意的标志。

将需要突出显示的元素变暗,以使其区分于原型其余部分。

检查完成的产品布局和均衡,并根据需要进行修改。6789

第6章 建立报表简介

6.1报表创建选项

?

?

?每次创建新报表时,都有三个选项:使用“报表创建向导”。使用另一个报表作为模型。从头开始创建报表。

您或许将在某些时候用到各个选项。

6.1.1报表创建向导

“报表创建向导”帮助用户尽可能快地创建报表,很多新用户和开发人员都喜欢使用它们来创建报表。您所要做的只不过是选择与您的报表类型最相匹配的向导。该向导将一步一步地引导您完成创建报表的过程。

6.1.2另一个报表

若要基于某个已经存在的报表生成新报表,可以将另一报表用作模型。通过选择“打开文件”选项来打开要以这种方式使用的报表,并使用“另存为”(位于“文件”菜单上)将其保存为新文件。这种方法对于下面的情况十分有用:

?创建的新报表与现有报表相比,具有不同的分组或不同的记录选定。?使用与目前所用报表相同的结构,以较早时段为基础重建报表。?以另一个报表内所链接的一组数据库为基础创建全新的报表。可以创

建报表并删除字段而不打乱基础链接。接着,不用重新链接便可以基于该报表来生成全部新报表。

Crystal Reports 还使您可以通过应用模板来设置报表的格式。有关更多信息,请参阅 第195 页上的 “使用模板”。

6.1.3新建报表

“空白报表”选项用于从头开始创建报表。当需要具有完全的灵活性和控制能力,想要从头开始创建报表时,或当报表类型与向导中许多可用的报表类型都不同时,应选择该选项。

水晶报表Crystal Reports培训教程 35_水晶报表教程

71Crystal Reports 用户指南

已为 第41 页上的 “新用户快速入门”选择了“空白报表”选项,因为从头开始创建报表的过程最充分地说明了建立报表的基础知识。

6.2选择数据源和数据库字段

Crystal Reports 通过在“数据库专家”对话框和“字段资源管理器”对话框中提供易于使用的功能,使得选择数据源和数据库字段变得简单。这些对话框中的每一个都使用用户所熟悉的 Windows 树目录结构,使您可以定位备选项。

6.2.1数据库专家

“数据库专家”提供可以用于 Crystal Reports 的所有数据源的集成树视图。在“数据库专家”中,可以从以下内容选择报表数据源:?当前已连接的数据源。

?已保存到 BusinessObjects Enterprise 储备库中的 SQL 命令。?已添加到“收藏夹”文件夹中的数据源。

?最近访问过的数据源(“数据库专家”自动为您维护一个包含这些数

据源的列表)。

?现有的数据源(例如,本地驻留的数据文件,或已经建立的 ODBC 数

据源)。

在“数据库专家”中,当已为报表选定多个表时,还可指定这些数据库表之间的链接。

6.2.1.1 “数据”选项卡

树视图

“数据库专家”的“数据”选项卡显示可能的数据源的树视图,在创建报表时可以选择这些数据源。树目录(在“可用数据源”列表中)由以下文件夹组成:

?当前连接

?收藏夹

?历史记录

?创建新连接

?储备库

“创建新连接”文件夹包含针对许多最常见的数据源的子文件夹。其中有:

?Access/Excel (DAO)

?数据库文件

选择数据源和数据库字段72

?

?

?ODBC (RDO)OLAPOLE DB (ADO)

注意: “创建新连接”文件夹中可用的数据源选项取决于安装过程中选定的数据访问组件。

有关每一个这些文件夹和子文件夹的简短说明,请参阅 第12 页上的 “选择数据源”。

快捷菜单

可以右击“数据库专家”的“可用数据源”列表中的任何项,以查看带有以下选项的快捷菜单:

?“添加到报表”

使用该选项将表或存储过程添加到新报表中。单击“数据库专家”上的 > 箭头也可应用这个选项。

?“添加到收藏夹”

使用该选项将选定数据源添加到“收藏夹”文件夹。

?“从报表中删除”

使用该选项从报表中删除表或存储过程。单击“数据库专家”上的<箭头也可应用这个选项。

?属性

使用此选项获取有关选定项目的详细信息。

?“重命名收藏夹”

使用该选项重命名“收藏夹”文件夹中的数据源。

?“删除收藏夹”

使用该选项将数据源从“收藏夹”文件夹中删除。

?“从储备库中删除”

使用该选项从 BusinessObjects Enterprise 储备库中删除现有的SQL 命令。

?“重命名储备库对象”

使用该选项重命名 BusinessObjects Enterprise 储备库中现有的SQL 命令。

?选项

使用该选项设置“选项”对话框的“数据库”选项卡上出现的全局选项。

?刷新

使用该选项刷新“数据库专家”中可用数据源的列表。

73Crystal Reports 用户指南

6.2.1.2 “链接”选项卡

将数据库表链接以使来自一个数据库的记录与来自另一个数据库的记录相匹配。例如,如果激活“供应商”表和“产品”表,则将数据库链接起来以使每个产品(来自“产品”表)可以与生产该产品的供应商(来自“供应商”表)相匹配。

多数报表可能需要来自两个或多个表的数据,因此链接将十分必要。使用“数据库专家”的“链接”选项卡可以简化链接过程。请参阅 第417页上的 “链接表”。

6.2.2字段资源管理器

使用“字段资源管理器”对话框来插入、修改或删除 CrystalReports 的“设计”和“预览”选项卡上的字段。若要查看“字段资源管理器”,请从“视图”菜单上选择“字段资源管理器”命令。

6.2.2.1 树视图

“字段资源管理器”显示添加到报表的数据库字段和特殊字段的树视图。它也显示已经定义用于报表的公式字段、SQL 表达式字段、参数字段、运行总计字段及组名字段。

已经添加到报表的字段或已经由其它字段使用的字段(如公式字段、组、运行总计字段、汇总等等)旁边有一个绿色的选中标志。

6.2.2.2 工具栏和快捷菜单

“字段资源管理器”的工具栏为按钮提供工具提示及热键组合。可以右击树视图中的任何项目以调出快捷菜单。

工具栏提供以下功能:

?“插入到报表”

使用该选项将字段添加到报表。可以选定多个字段,右击并选择“插入到报表”一次插入多个字段。

另外,若要插入一个字段,可以在“设计”或“预览”选项卡中拖放它。?浏览

使用该选项浏览数据库字段、公式字段或 SQL 表达式字段的数据。注意:在快捷菜单上,该选项叫做“浏览数据”。

?新建

使用该选项创建公式字段、SQL 表达式字段、参数字段或运行总计字段。

关于报表设计环境74

?

?

?编辑使用该选项修改现有公式字段、SQL 表达式字段、参数字段或运行总计字段。重命名使用该选项修改现有公式字段、SQL 表达式字段、参数字段或运行总计字段的名称。删除

使用该选项删除公式字段、SQL 表达式字段、参数字段或运行总计字段。也可以选定多个字段,右击并选择“删除”立即将它们全部删除。除了工具栏上可用的功能外,快捷菜单还提供这些功能:

?设置提示顺序

使用此选项打开“设置提示顺序”对话框,您可以在其中更改参数字段的提示顺序。

?“显示字段类型”

当您查看数据库字段列表时,可使用该选项查看字段类型(字符串、数字等等)。字符串字段的长度在它们名称末尾的括号中列出。?刷新

使用该选项刷新“字段资源管理器”中的可用字段列表。

6.2.2.3 “组名字段”

可以通过右击显示在“字段资源管理器”中的现有“组名”字段并选择“插入到报表”来插入该字段。但是,与公式字段不同,参数字段或运行总计字段不能通过“字段资源管理器”创建“组名”字段。(插入组时,“组名”字段便被创建)

6.3关于报表设计环境

6.3.1“设计”选项卡

使用 Crystal Reports 时,使用“设计”选项卡的次数可能多于本

程序的其它任何部分。

75Crystal Reports 用户指南

“设计”选项卡是创建报表时进行大多数初始工作的地方。它指定并标记报表的各种节。可以进行初始格式化、将对象放在所需的节内、指定排序、分组和总计需要,等等。

“设计”选项卡提供非常有效的设计报表的环境,因为在该选项卡中使用的是数据代表,而不是数据本身。当字段放在报表上时,本程序使用一个框架来标识选项卡上的字段;它并不检索数据。因此,可以添加和删除字段及其它对象、四处移动它们、建立复杂公式等等,而不必和收集数据所需的计算机或网络资源联系在一起。

创建于“设计”选项卡中的报表是一种虚拟报表;它具有创建最终的报表所需的结构和说明,但它不是此报表本身。若要将“设计”选项卡报表变成最终报表或变成可以精细调整的报表,仅仅添加数据即可。可以在预览报表、打印报表或以任何其他方式输出报表时进行此操作。实际数据现在将出现在报表中。

6.3.1.1 “设计”选项卡区域

当第一次开始创建报表时,Crystal Reports 在“设计”选项卡中自动创建五个区域。

?报表页眉

这一节通常用于显示报表标题和其他希望在报表开头出现的信息。它还可以用于图表和交叉表,它们包含整个报表的数据。

?页眉

这一节通常用于显示希望出现在每页顶部的信息。这可以包括章名、文档名称和其它类似信息。该节还可以用于显示报表上字段上方的字段标题。

?明细

这一节用于报表的正文,并且每个记录输出一次。大量报表数据通常出现在该节中。

?报表页脚

这一节用于显示希望在报表末尾只出现一次的信息(例如总计),以及显示包含针对整个报表的数据的图表和交叉表。

?页脚

这一节通常包含页码和任何其他希望出现在每页底部的信息。

?如果将组、摘要或小计添加到报表,则本程序创建另外两个节:组页眉

这一节通常保存组名字段,也可以用于显示包含组特定数据的图表或交叉表。它在组的开始打印一次。

水晶报表Crystal Reports培训教程 35_水晶报表教程

关于报表设计环境76

?组页脚

该节通常保存汇总数据(如果有),也可以用来显示图表或交叉表。它在组的末尾打印一次。

当添加了组、汇总或小计时,“组页眉”区域正好出现在“详细资料”区域上方,而“组页脚”区域正好出现在“详细资料”区域下方。

如果建立其它组,则本程序在“详细资料”区域和现有“组页眉”及“组页脚”区域之间创建新的组区域。

与原有的区域类似,每个新添加的区域可以包含一个或多个节。默认情况下,它们都只包含一个节。

6.3.1.2 标识和使用区域和节

根据默认,每个区域只包含单个节。该节的名称正好出现在该节的左边。如果一个区域中有多个节,则各个节指定为 a、b、c 等等。?

?注意: 如果在“选项”对话框的“设计视图”区域中选择了“短节名”复选框,则使用首字母缩写(如 RH、PH、D、PF、RF 等等)来标识每个节。如果右击包含节名名称的阴影区域,则出现带有节特定的选项的快捷

菜单。

77Crystal Reports 用户指南

如果已经在“选项”对话框的“布局”选项卡中选择了“显示标尺”选项,则程序会在紧靠每节左侧的位置显示一个节标尺。节标尺用于添加、删除和移动准线,以及在放置对象时提供视觉参考。请参阅 第208页上的 “使用准线设计”。

节标尺。

每当添加一个新节时,本程序都将为该节创建一个标尺。请参阅第184 页上的 “在报表中使用多个节”。

6.3.1.3 其他“设计”选项卡功能

还有其它几个内置于“设计”选项卡中的功能。使用“设计”选项卡,您可以:

?通过拖动节的边界来调整节的大小。请参阅 第183 页上的 “调整

节大小”。

?通过单击节的左边界来拆分节(从一个节创建两个节)。请参阅

第183 页上的 “拆分节”。

?通过单击标尺来添加水平准线和垂直准线。请参阅 第208 页上的

“使用准线设计”。

?以原大小的 25% 到 400% 之间的任意缩放倍数放大和缩小报表。请

参阅 第23 页上的 “使用缩放功能”。

6.3.2“预览”选项卡

要在打印之前预览报表,请单击“标准”工具栏上的“打印预览”。程序收集数据、进行必要的计算,并在“预览”选项卡中显示报表。使数据放在适当的位置上,您便可以检查报表的间距和格式,并查看汇总、公式计算以及记录和组选定的实际结果。

在真正的 WYSIWYG(所见即所得)方式下,可以直接对此实际数据进行操作,对数据进行精细调整,直到得到所希望的报表外观。

?本程序按以下方式操作数据:第一次使用“预览”选项卡时,它从基础数据源检索数据并将其同报

表一起保存(除非已设置程序不保存数据)

关于报表设计环境78

?从此时开始,程序在每次预览报表时都使用保存的数据,除非您特地

刷新了数据或添加了需要程序检索新数据的字段。

Crystal Reports 提供两个视图来预览报表:

?“标准”视图

?“组树”视图

6.3.2.1 “标准”视图

在标准视图中,一次显示报表的一页。使用“预览”选项卡中的浏览按钮,可以移动到报表的开始或末尾,或可以在报表中一次向后和向前移动一页。当报表较短或者您主要关注报表中的“底线”总计时,标准视图可以提供您所需的所有功能。

“数据年龄”指示器

“数据年龄”指示器指出上一次刷新数据或初始检索数据的日期,取二者中最新者。如果今天进行了数据的初始检索或刷新,则它指出操作发生的时间。

6.3.2.2

“组树”视图

79Crystal Reports 用户指南

可以使用“标准”工具栏上的“切换组树”来显示或隐藏“组树”视图。

“组树”视图提供一个拆分的屏幕:

?右窗格显示报表。

?左窗格显示报表的高级概览,以熟悉的树形结构显示各个组和子组的

层次结构。

“组树”通常显示创建于报表中的组和子组的名称。然而,可以使用“插入组”或“更改组选项”对话框的“选项”选项卡自定义这些名称。有关在“组树”视图中自定义“组名”的更多信息,请参阅 第144 页上的 “将数据分组”。

当单击感兴趣的组的树节点时,本程序将立即跳转到包含该组信息的报表部分。对于较长的报表或希望在其中的不同组之间向前或向后跳转的报表,“组树”视图的“智能浏览”功能将能极大地提高您的工作效率。

6.3.2.3 与“设计”选项卡进行比较

“预览”选项卡中具有与“设计”选项卡相同的格式设置功能。菜单(菜单栏和快捷菜单)和工具栏保持活动状态,提供与在“设计”选项卡中处理报表时基本相同的功能。但是,当正在进行许多更改时,在“设计”选项卡中进行更改要更快些。一些需要考虑的额外内容为:?“设计”选项卡和“预览”选项卡是在内部联系在一起的。在一个选

项卡中进行的任何更改将反映于另一个选项卡中。

?“预览”选项卡的左边具有一个垂直标尺,而没有“设计”选项卡中

所见到的单个节标尺。标尺的功能是相同的。

?“预览”选项卡在数据左边的阴影区域中标识报表节。扫一眼就可以

知道数据打印自哪个报表节。虽然节名称在“设计”选项卡中只出现一次,但每次在“预览”选项卡中打印一个节时,它们都将打印。?“记录”计数器、“数据年龄”指示器(参见 第9 页上的 ““数据

年龄”指示器”)和“前一页”/“后一页”控制(参见 第8 页上的 ““预览”选项卡”)在“预览”选项卡中都是活动的。

?当选择某个字段时,“预览”选项卡将突出显示每个值;然而,在“设

计”选项卡中只突出显示字段框架。

工作于“预览”选项卡与工作于“设计”选项卡中有不同的感受。数据库中的每个字段都包含成十、成百甚至上千个值,这视数据库中记录的个数而定。当在“设计”选项卡中放置字段时,单个字段框架代表所有这些值。当突出显示该字段时,尺寸调整手柄出现在框架上,并且框

架改变颜色。

关于报表设计环境80

但是,在“预览”选项卡中,您却对实际数据进行操作。出现在选项卡中的将是这些值本身,而不是代表许多字段值的字段框。一些需要考虑的额外内容为:

?当突出显示某个字段或公式字段值时,实际上选择的是该字段中的所

有值:

?程序会用一个尺寸调整框将所选的特定值框起来。

?字段中的所有其他值也将突出显示。

?同样地,当选定一个汇总值时,实际上所选择的是所有相关的汇总值:

?程序会用一个尺寸调整框将所选的特定值框起来。

?所有相关的汇总值也将突出显示。

除外观上的不同以外,生成和修改报表的过程在“设计”选项卡和“预览”选项卡中是相同的。您应当发现在两个地方操作报表都很容易。

6.3.3HTML 预览选项卡

要将 Crystal 报表呈现为 HTML(就像在发布到 Web 上所看到的一样),请单击“标准”工具栏上的“HTML 预览”。

如果您需要确保报表设计在零客户端环境中的 Web 上适用并且正确无误,则“HTML 预览”选项使您可以在不离开 Crystal Reports 设计环境的情况下看到将报表呈现为 HTML 的实例。“HTML 预览”选项卡与“预览”选项卡不一样,前者显示转换后的格式,而后者则显示真正的报表格式。通过在这两个选项卡之间切换,您可以调整报表设计,以便在Web 上产生最佳效果。

对于发布到 BusinessObjects Enterprise 的报表(受控报表)而言,您不必进行任何特殊的配置即可使“HTML 预览”功能起作用。

对于独立报表(不受控报表),该程序必须使用报表应用程序服务器(RAS) 来生成预览。在这种情况下,您需要配置“HTML 预览”功能。在Crystal Reports 的“选项”对话框的“智能标记和 HTML 预览”选项卡中进行配置。

有关如何配置“HTML 预览”选项的信息,请在 Crystal Reports 联机帮助中搜索“智能标记和 HTML 预览”选项卡(“选项”对话框)

水晶报表Crystal Reports培训教程 35_水晶报表教程

81Crystal Reports 用户指南

6.4创建新报表

6.4.1选择数据源

在决定了创建报表要使用的选项之后(请参阅 第1 页上的 “报表创建选项”),下一步是选择要使用的数据源。

大多数数据源可以通过“数据库专家”对话框来选择。当使用“空白报表”从头创建报表时,或当从“数据库”菜单中选择“数据库专家”时,显示“数据库专家”。

注意: 还可以在报表创建向导中选择数据源。除了“OLAP 报表创建向导”之外,所有报表创建向导中的“数据”屏幕都和“数据库专家”对话框非常类似。

X选择数据源

1从“数据库”菜单中选择“数据库专家”。

出现“数据库专家”对话框。

使用“数据”屏幕的“可用数据源”列表中的树视图来选择数据源:?当前连接

此文件夹显示当前连接的数据源的列表。

?收藏夹

此文件夹显示在“收藏夹”列表中维护的常用数据源的列表。

?历史记录

此文件夹显示近期使用过的数据源的列表。显示了最近使用过的五个数据源。

?创建新连接

此文件夹显示可连接到的各种数据源的子文件夹。

?储备库

此文件夹通过“BusinessObjects Enterprise 资源管理器”显示储备库的内容。单击“建立新连接”打开“BusinessObjectsEnterprise 资源管理器”;可以从此对话框中选择现有的 SQL命令或业务视图。有关更多信息,请在 Crystal Reports 联机帮助中搜索“SQL 命令”或“业务视图”。

“创建新连接”文件夹中常见的一些选择如下所示:2

创建新报表82

Access/Excel (DAO)

此选项用于连接到所支持的数据库类型(Access、dBASE、Excel、Lotus 等)。可以使用“建立新连接”选项创建新的连接。

?数据库文件

此选项显示一组位于本地的标准 PC 数据库。可以使用“查找数据库文件”用“打开”对话框浏览 PC 数据库。

?ODBC (RDO)

此选项显示经过配置可供使用的 ODBC 数据源列表。

?OLAP

此选项用于打开“OLAP 连接浏览器”,便于您将 OLAP 多维数据集选作数据源。

?OLE DB (ADO)

此选项显示经过配置可供使用的 OLE DB 提供程序列表。也可以指定要使用的 Microsoft 数据链接文件。

注意: “创建新连接”文件夹中可用的数据源选项取决于安装过程中选定的数据访问组件。?

6.4.2添加表

在选择数据源之后,可以添加一个或更多个表,您的报表可以基于这些表。

X添加表

1从“数据库”菜单中选择“数据库专家”。

出现“数据库专家”对话框。

在“数据”选项卡中,搜索要在报表中使用的数据库。请参阅 第12页上的 “选择数据源”。

在“可用数据源”列表中,选择要添加到报表中的表,并单击 > 箭头将它添加到“选定的表”列表中。

可以选定多个表,右击并选择“添加到报表”一次插入多个表。还可以将表拖放到“选定的表”列表中。23

6.4.3链接多个表

如果报表包含来自两个或多个数据库表的数据,则创建报表时需要将它们在该点链接起来。

注意: 没有必要在由查询或命令创建的报表中链接表,因为数据所需的任何链接已经处理过了。

83Crystal Reports 用户指南

X添加和链接多个表

1从“数据库”菜单中选择“数据库专家”。

出现“数据库专家”对话框。

在“数据”选项卡中,选择要添加到报表中的表。请参阅 第13 页上的 “添加表”。

“链接”选项卡出现在“数据库专家”中。

单击“链接”选项卡显示当前可用于进行链接的数据库。

在可能时,Crystal Reports 自动按名称或关键字链接表。

23

4若要手动创建链接,请将某个字段从一个表拖动到另一个表的字段中。

如果成功的话,将创建一个链接行。如果不成功,则发出一条消息。注意:可以按表名或外键信息来链接表。

如果已经删除了链接,而且想自动重新创建它们,请单击“链接”。完成时,单击“确定”。

注意:当手动创建链接时,链接“到”的字段必须和链接自的字段属于相同的数据类型。当使用本地连接时,链接“到”的字段不必具有索引。有关更多信息,请参阅 第415 页上的 “索引表”。

“数据库专家”关闭,并且返回到报表。所链接的数据库现在便可以在报表中使用了。如果对链接不满意,可以使用“数据库专家”的“链接”选项卡修改它。

第412 页上的 “了解数据库”

第426 页上的

“链接选项”56相关主题 ?

?

创建新报表84

6.4.4将数据放在报表上

将数据放在报表上是一项十分重要的任务。您需要知道什么类型的数据应当放在报表上以及应当将它放在报表上的什么位置。

6.4.4.1 数据库字段

很多放在报表上的数据都为数据库字段,以存储于数据库中的样子显示数据。例如,在 第41 页上的 “新用户快速入门”中,将“客户名”、“城市”和“国家/地区”字段放在报表上。通常,数据库字段将放在“详细资料”节中,但在某些情况下,它们将放在报表的其它节中。X插入数据库字段

1在“标准”工具栏上,单击“字段资源管理器”。

出现“字段资源管理器”对话框。为加快报表生成过程,该对话框保留在屏幕上,直到关闭它为止。可以将该对话框移动到您所希望的地方。展开“数据库字段”文件夹,以查看从数据库中选择的所有表。展开各个表,以查看它们包含的所有字段。

选择想要出现在报表中的字段。

单击“浏览”来检查选定字段中的值。

单击“插入到报表”来将它放在报表中。23456

6.4.4.2 公式字段

若要显示为计算所得到的值的数据,需要创建公式字段并将该公式字段放在报表上。例如,如果数据库只存储定单的订购日期和送货日期,但需要显示运送定货所需的天数的话,则必须创建一个公式字段,来计算订购和送货之间的天数。这不过是使用公式字段的一个例子。有关公式的简介,请参阅 第356 页上的 “使用公式”。

6.4.4.3 SQL 表达式字段

SQL 表达式与公式相似,但它们以结构化查询语言 (SQL) 编写,而不是以 Crystal Reports 公式语言编写。SQL 表达式可以用于向数据库查询特定数据集合。可以基于 SQL 表达式字段进行排序、分组和选择。X创建 SQL 表达式字段

1在“标准”工具栏上,单击“字段资源管理器”。

出现“字段资源管理器”对话框。

向下滚动到“SQL 表达式字段”并将其突出显示。单击“新建”。出现

“SQL 表达式名称”对话框。2

85Crystal Reports 用户指南

3在“名称”框中输入名称,然后单击“确定”。

出现带有活动“SQL 表达式编辑器”的公式工作室。

4在“SQL 表达式编辑器”中键入表达式。

注意:有关公式语言的概述,请参阅 第357 页上的 “公式组件和语法”。

单击“保存”按钮。5

6.4.4.4 参数字段

若要提示报表用户输入信息,可创建参数字段。将参数看作是在报表生成之前用户需要回答的问题。用户输入的信息或用户响应的方式决定报表的内容。例如,在销售人员使用的报表中,或许有要求用户选择地区的参数。该报表将返回特定地区的结果,而不是返回所有地区的结果。有关参数字段的简介,请参阅 第374 页上的 “参数字段和提示”。

6.4.4.5 运行总计字段

若要显示一个对每个记录都进行计算的总计,并提供字段中所有值(或某组值中的所有值)的运行总和,需要创建一个运行总计字段并将其放在报表中。如果某个字段中的前三个值为 2、4 和 6,则运行总计将打印 2,然后打印 6(2 + 4 的和),接着打印 12(2 + 4 + 6 的和)。有关运行总计的简介,请参阅 第172 页上的 “运行总计”。

6.4.4.6 特殊字段

若要显示“页码”、“打印日期”和“报表备注”之类的信息,请使用“字段资源管理器”对话框的

“特殊字段”树视图中的命令。

水晶报表Crystal Reports培训教程 35_水晶报表教程

创建新报表86

X插入特殊字段

Crystal Reports 使您可以方便地将“页码”、“记录号”、“组号”、“打印日期”和“总页数”字段插入到报表的其它字段中间。

1

2在“标准”工具栏上,单击“字段资源管理器”。出现“字段资源管理器”对话框。向下滚动到“特殊字段”并单击以展开它。

3从“特殊字段”列表中选择要插入到报表中的命令。

每个特殊字段都作为一个对象插入到报表中。出现一个对象框架。现在可以将它放在报表上了。

注意: 若要更改插入的对象的格式设置,请单击该对象将其选定,并单击“专家工具”工具栏上的“格式”。“格式化编辑器”出现,可以在其内进行所需的更改。请参阅 第195 页上的 “格式化”。

6.4.4.7 文本对象

文本对象在报表中的用途有很多。文本对象是一种功能强大的方法,可用来插入标题、标记汇总及报表上其它数据,并且能方便地组合数据库字段。例如,在 第41 页上的 “新用户快速入门”中,文本对象可以方便地将两个联系人姓名数据库字段显示为一个对象,为所连接的联系人姓名插入列标题以及在报表中插入标题。

X插入文本对象

1在“插入工具”工具栏上,单击“插入文本对象”。出现一个空的对

象框架。

87Crystal Reports 用户指南

2将文本对象放在报表中希望其出现的位置上。

单击文本对象的边框将其选中,以调整大小和进行移动。

双击文本对象内部以选择它来进行编辑。“设计”选项卡标尺更改为文本对象标尺,其大小为选定对象的长度。左边出现一个选项卡指示器。通过单击选项卡指示器,可以循环地选中四个可用的选项卡选项。

左对齐的选项卡。

右对齐的选项卡。

居中对齐的选项卡。

小数点对齐的选项卡。一旦选择了所需的选项卡,单击标尺上要插入选项卡的位置。拖动以设置左边距。拖动以设置右边距。

标尺使您可以在文本对象内添加缩进和对齐文本。

注意: 当首次将文本对象插入到报表中时,该对象自动选定以供编辑。

6.4.4.8 图片字段

当设计报表时,经常会需要加入一幅图片。例如,您可能希望将一个公司徽标放在报表页眉中。

X插入图片

1在“插入工具”工具栏上,单击“插入图片”。

出现“打开”对话框。

从文件列表选择所需的图片文件,并单击“打开”以返回到报表。出现一个对象框架,其内为该图片,准备进行定位。2

3

将图片对象放在报表中希望它出现的位置,并左击一次。

创建新报表88

6.4.4.9 BLOB(二进制大对象)字段

BLOB 字段是数据库字段,它的数据由二进制大对象组成,如位图图形、图像、OLE 对象、图元文件等等。将 BLOB 字段插入到报表中将允许您像访问其他数据类型一样访问这些二进制对象。

注意: Crystal Reports 也可以通过引用(也即通过文件路径动态地)访问 BLOB 对象,因此,您无需在数据库中存储 BLOB 对象。有关更多信息,请参阅 第275 页上的 “使静态 OLE 对象成为动态”。?

?总之,Crystal Reports 允许访问包含如下内容的 BLOB 字段:独立于设备的位图 (DIB)。JPEG、TIFF 或 PNG 图像。

此外,如果数据驻留在 Microsoft Access 数据库中,则 CrystalReports 允许在报表中使用包含 OLE 1 和 2 对象以及图元文件的 BLOB字段。

像插入任何其他数据库字段那样插入 BLOB 字段。有关详细信息,请参阅 第15 页上的 “插入数据库字段”。

BLOB 字段对象和其他数据库字段对象的不同之处在于:它提供控制剪切、缩放和调整大小的选项,就像插入的图片或 OLE 对象一样。若要访问这些选项,请右击 BLOB 字段对象,从快捷菜单中选择“格式化图形”,并单击“图片”选项卡。

注意: 若要保留使用其服务器应用程序激活和编辑 OLE 对象的功能,应该单独地将该对象插入到报表中(通过链接或者通过嵌入),而不是将其插入到 BLOB 字段中。有关插入链接和嵌入的 OLE 对象的更多信息,请参阅 第272 页上的 “将 OLE 对象插入报表”。

6.4.4.10 超级链接字段

可以在“设计”或“预览”选项卡中选择报表对象,并创建到其他位置的超级链接。

超级链接与报表一同保存,并且其他用户也可以使用它作为查看附加信息的方法。

注意: Crystal Reports 还使您可以使用“相对 URL”创建超级链接,这样您的 Web 报表就不受其在任何特定服务器上的位置的制约。X创建超级链接字段

1

2在“设计”或“预览”选项卡上选择一个报表对象。在“格式”菜单上,单击“超级链接”。

“格式化编辑器”对话框出现,其中的“超级链接”选项卡是活动的。

89Crystal Reports 用户指南

3单击希望创建的超级链接类型。

上面区域中的可用类型为:

?“无超级链接”

这是默认选项。没有和选定的报表对象相关联的超级链接。

?“Internet 上的网站”

如果希望报表对象链接到静态 Web 地址,请选择这个选项。使用公式按钮创建基于字段值的 URL。例如,如果客户姓名字段包含将创建一系列有意义的 URL 的信息,可以输入下面的公式:

"http://www."+ {Customer.Customer Name} + ".com"

注意:您也可以使用此选项连接到 Business Objects、WebIntelligence 和 OLAP Intelligence 文档(它也称为“报表链接”)。使用 openDocument 函数在 Crystal Reports 中创建这些超级链接。

?“当前网站字段值”

如果希望程序从所选字段创建出一个超级链接,请选择这个选项。该字段在数据源中必须存储为正确的超级链接。

?“电子邮件地址”

如果希望从选定的字段中创建一个“mailto”地址,请选择这个选项。使用公式按钮创建基于字段值的地址。

?“文件”

选择这个选项创建到特定计算机或网络计算机上文件的超级链接。使用公式按钮创建基于字段值的文件路径。

也可以使用此类型的超级链接来运行带命令行参数的 EXE 文件。输入路径和应用程序名称,后跟命令的参数。

?“当前电子邮件字段值”

如果希望程序从所选定字段创建出一个电子邮件超级链接,请选择这个选项。该字段在数据源中必须存储为正确的电子邮件地址。“仅用于 DHTML 查看器”区域的可用类型为:

?“报表部件深化”

有关如何使用这个选项的信息,请参阅 第341 页上的 ““报表部件深化”选项”。

?“其他报表对象”

有关如何使用这个选项的信息,请参阅 第343 页上的 ““其他报表对象”选项”。

注意:并不是所有的超级链接类型都始终可用。选择的对象及它在报表上的位置决定了可用的类型。

创建新报表90

4

5选择了超级链接类型之后,输入适当的超级链接信息(例如 Web 站点的 URL)。完成后单击“确定”。

按照需要插入了超级链接。在报表上单击它以转到 Web 站点、发送电子邮件等等。有关如何使用“仅用于 DHTML 查看器”区域的超级链接类型的信息,请参阅 第338 页上的 “设置导航”。

6.4.5格式化数据

在创建报表过程中的这一阶段,您可能需要进行一些基本的格式化。您可能想要更改用作标题的文本对象的字体大小和样式。或者,如果有一个销售额数字之类的数字字段,则可能想要在数字前放置一个美元符号,或更改所显示的小数位数。

例如,在 第41 页上的 “新用户快速入门”中,将格式化标题,添加一个文本对象来标识“联系人姓名”信息,并插入公司徽标。请参阅第195 页上的 “格式化”。

6.4.6记录选定

记录选定,即削减数据以只包括报表所需数据的任务,是报表创建中至关重要的步骤。很少会需要数据库中所有信息的清单。大多数情况下,您所关注的只是特定时间段内的销售额或特定产品的销售额等事项。例如,可能需要销售报表仅包含上一历月中某个产品系列的销售额。

第41 页上的 “新用户快速入门”所使用的示例数据既有来自美国客户的又有来自国际客户的信息。记录选定用于创建只列出美国客户的报表。请参阅 第131 页上的 “记录选定”和 第144 页上的 “将数据分组”。

6.4.7分组、排序和汇总数据

一旦创建了基本报表,您会希望通过将相关信息分组、对单个记录排序、汇总、小计和总计来组织数据。

6.4.7.1 将记录分组

为组织数据,您可能想要将相关数据分组。例如,在 第41 页上的“新用户快速入门”中,将“客户列表”按照地区分组之后,将把该列表划分为区域组。这样,加利福尼亚地区的销售经理可以快速找到“加利福尼亚”组,并专门集中注意该地区内的客户。请参阅 第144 页上的 “将数据分组”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

91Crystal Reports 用户指南

6.4.7.2 对记录排序

Crystal Reports 使您可以指定希望记录以怎样的顺序在报表上显示。例如,在 第41 页上的 “新用户快速入门”中分组之后,将每个地区内的记录根据“客户名称”按字母顺序排序。许多报表都将使用某种排序。根据报表的情况,将对列表中的记录排序,或连同分组一起进行排序。请参阅 第142 页上的 “单一或多个字段排序”和 第147 页上的“将组内记录排序”。

6.4.7.3 汇总、小计和总计

许多报表都使用某种总计。例如,在按州分组的北美销售报表中,您可能想要计算每个州销售的总美元金额。通过创建销售字段上的小计可完成此任务。汇总还在组级别使用,使您可以计算平均值、计数和其它组(合计)值。例如,在销售报表中,您可能想要计算每个省的销售额的平均值(对销售字段上的汇总进行平均),并计算在该省销售产品的数目(产品名称字段的非重复计数)。

6.4.8对汇总数据使用深化选项

可以使用“深化”光标来深化数据,以显示单个组后的数据。请参阅第141 页上的 “排序、分组及总计”。

6.4.8.1 深化光标

Crystal Reports 使您可以向下钻取“标准”和“组树”视图中“预览”选项卡中的组或汇总信息(请参阅 第9 页上的 ““标准”视图”和 第9 页上的 ““组树”视图”)。当将光标放在任何可以深化的汇总值上方时,本程序都将显示“深化”光标。

提示:组页眉出现在“深化”选项卡上,正如其在主报表本身中的显示一样。

如果接着双击,则本程序显示该特定汇总值后的详细资料。例如,如果“深化”光标在城市汇总上方成为活动的,则可以双击来查看该汇总后的详细资料。

?如果您只有单个汇总,则可以查看汇总或查看来自所汇总的单个记录

的数据。

?如果您有多个汇总,则可以查看汇总后的汇总(例如组成地区汇总的

城市汇总),或查看来自所汇总的单个记录的数据。

创建新报表92

6.4.9使用缩放功能

可以方便地放大报表。可以选择 25% 到 400% 之间的任意缩放倍数。该功能在“设计”选项卡和“预览”选项卡中都是活动的。

若要放大或缩小报表,请在位于“标准”工具栏上的“缩放控制”框中设置缩放级别。

25%

50%

100%

用低缩放倍数查看报表可帮助得到报表布局的总体图片。较高缩放倍数下的视图则注重报表的细节。

6.4.10插入页眉和页脚

通过在“设计”选项卡的“页眉”或“页脚”节中放入信息可使用页眉和页脚。

?

?只出现在报表第一页上的信息放进“报表页眉”(RH)。只出现在报表最后一页上的信息放进

“报表页脚”(RF)。

93Crystal Reports 用户指南

?

?出现在每一页顶部的信息放进“页眉”(PH)。出现在每一页底部的信息放进“页脚”(PF)。

文本、字段或公式可以用于这些节中,正象用于“详细资料”节中一样。相关主题

? 第233 页上的 “在第一页之后创建页脚”

6.4.11将标题页添加到报表中

Crystal Reports 提供了一种快速、简便的途径,将标题页添加到报表中,这通过从“字段资源管理器”对话框中的“特殊字段”选择“报表标题”来完成。为使用该字段,必须将标题输入到“文档属性”对话框的“摘要”选项卡中。请参阅 第24 页上的 “将汇总信息添加到报表中”。X添加报表标题

1在“标准”工具栏上,单击“字段资源管理器”。

出现“字段资源管理器”对话框。

向下滚动到“特殊字段”并单击以展开它。

选择“报表标题”,并单击“插入到报表”。当光标移动到报表上方时,将出现一个对象框架。23

4

5将对象框架移动到“报表页眉”节中,并单击一次以放置该框架。选定报表标题后,单击“专家工具”工具栏上的“节专家”。

出现“节专家”。

“报表页眉”节突出显示时,选择“在后面新建页”复选框。

现在标题将出现在第一页上,并且报表将在第二页上开始。6

6.4.12将汇总信息添加到报表中

有时您可能希望在报表中包括无需打印的注释(如:致报表收件人的私人便笺、用来详细解释报表所基于的数据的注解、报表标题、有关报表中某些特定数据的注释等等)

浏览报表和处理多个报表94

“文件”菜单上的“摘要信息”提供了一种功能,可以在报表中加入从简短的便笺到上百行文本的任何内容。此注释不随报表一起打印;它们保留在“文档属性”对话框的“摘要”选项卡中,可以根据需从中查阅。

当选择“摘要信息”时,出现“文档属性”对话框,其“摘要”选项卡为活动的。

输入所需信息,完成后单击“确定”,返回到报表。

6.5浏览报表和处理多个报表

Crystal Reports 使您能够通过“报表资源管理器”、“工作台”和“依赖项检查器”处理现有报表。

本节描述了这些工具,并提供了有关打开和停靠 Crystal Reports中提供的每个资源管理器的常规信息。有关更多信息,请参阅 第29 页上的 “打开和停靠资源管理器”。

6.5.1报表资源管理器

“报表资源管理器”的内容以树视图表示报表的内容。根节点为报表本身,第一级节点表示报表的节。在每一节中,列出报表的字段和对象。在树视图中选定的任何项目在报表(在“设计”模式或“预览”模式下)

中都将处于选定状态。

95Crystal Reports 用户指南

可以通过在“报表资源管理器”中选择报表字段和对象来修改它们。右击选定的项,可以看到一个菜单,它包含可以对该项执行的操作。例如,如果右击一个文本对象,则菜单将包含关于编辑文本、格式化其字体或颜色等等的选项。同样地,如果右击一个节节点,则菜单将包含关于隐藏、抑制显示、格式等等的选项。

注意: 使用“报表资源管理器”时,不能添加其他字段或报表对象,但可以删除它们。

通过使用 Shift-单击或 Ctrl-单击可以选择多个字段来进行格式化。

6.5.1.1 工具栏

“报表资源管理器”的工具栏提供带有工具提示的按钮。通过这些按钮,可以展开或折叠报表的树视图,并选择将按类型显示的报表项目:?展开

使用此选项可以展开树视图中选定节点下的所有子节点。如果您在根节点突出显示时选择此选项,则将展开剩余的所有节点。如果您在子节点突出显示时选择此选项,则将只展开属于该子节点的节点。

注意:如果在报表对象突出显示时选择此选项,或者选定节点没有子节点,则此选项将不具有任何影响。

?显示/隐藏数据字段

使用此选项可以显示或隐藏报表中的数据字段。数据字段包括公式字段、汇总字段和文本对象。

?显示/隐藏图形对象

使用此选项可以显示或隐藏报表中的图形对象。图形对象包括图表、地图、框、线条、BLOB 字段和 OLE 对象。

?显示/隐藏网格和子报表

使用此选项可以显示或隐藏报表中的交叉表、OLAP 网格和子报表。?

?注意: 连接到 BusinessObjects Enterprise 储备库 的项目旁显示有储备库图标。具有超级链接的项目显示为带实下划线的蓝色文本。具有“报表部

件”超级链接的项目显示为带虚下划线的绿色文本。

水晶报表Crystal Reports培训教程 35_水晶报表教程

浏览报表和处理多个报表96

6.5.2工作台

在“工作台”中,您可以创建包含一个或多个报表的项目。可使用工具栏中的选项来添加、删除或重命名文件夹、报表和对象包。通过将文件夹中的文件拖放到希望它们出现的地方,您可以重新组织这些文件。也可以将报表文件从 Windows 资源管理器中拖放到您在“工作台”中所选的文件夹中。

6.5.2.1 工具栏

“工作台”中的工具栏提供以下选项:

?添加报表

可使用此选项将新对象添加到“工作台”:

?添加现有报表

选择此选项时,将出现“打开”对话框,以便您能够搜索以前创建

的 Crystal 报表。

?添加新项目

选择此选项时,程序将在名为“工作区”的根节点下添加一个新文

件夹。可以向此文件夹中添加报表。项目文件夹提供了一种在“工

作台”中组织报表的方法。

?添加对象包

选择此选项时,程序将提示您登录到 BusinessObjects Enterprise

系统。如果已连接到系统,您可以选择要添加到“工作台”的对象

包。有关对象包的更多信息,请参阅《BusinessObjects

Enterprise 管理员指南》(admin.pdf)。

?打开

可使用此选项来打开已在“工作区”文件夹中选择的报表或报表包。?检查依赖项

可使用此选项来启动“依赖项检查器”。此选项可用于个别报表或报表的文件夹。Crystal Reports 将立即开始检查报表并在“依赖项检查器”中显示结果。有关更多信息,请参阅 第28 页上的 “依赖项检查器”。

6.5.2.2 快捷菜单

右击“工作台”的“工作区”区域中的任何项目都可以看到一个快捷菜单。快捷菜单上提供的许多选项也可以在工具栏上找到。本节只描述工具栏上没有的附加选项。

?发布到 BusinessObjects Enterprise

可使用此选项将报表的文件夹发布到 BusinessObjects Enterprise。可以逐个发布报表或将多个报表作为对象包发布。(可以在BusinessObjects Enterprise 中将对象包作为单个实体进行计划。

97Crystal Reports 用户指南

?

?选择此选项后,出现“发布对象”对话框。有关使用此对话框的信息,请在 Crystal Reports 联机帮助中搜索“发布对象对话框”。删除可使用此选项从“工作区”区域中删除报表、报表包或文件夹。注意:?无法撤消此选项。?删除文件夹的同时也就删除了该文件夹中的所有项目。重命名

使用此选项来重命名“工作区”区域中的文件夹。

6.5.3依赖项检查器

当您在“工作台”中检查报表或项目是否存在错误,或者为 CrystalReports 中已打开的报表选择“报表”菜单上的命令时,将出现“依赖项检查器”。“依赖项检查器”可提示多种错误类型:

?报表部件超级链接错误

?储备库对象错误

?公式编译错误

“依赖项检查器”中列出的错误显示了以下信息:

?错误类型。

图标含义

成功。“依赖项检查器”已验证文件中没有任何错误。

警告。“依赖项检查器”在文件中找到了可能有问题的某些内

容。您可以验证警告,但不一定必须修复它以使报表正常运行。

错误。“依赖项检查器”发现错误,您应修复该错误以使报表

正常运行。

?

?错误的说明。包含错误的文件的位置。

双击错误即可打开目标报表并转到报表对象,以便您能够修复问题。如果找不到报表对象(例如,因为在检查错误之后删除了部分报表),您将收到一则消息,建议您再次运行检查。

浏览报表和处理多个报表98

6.5.3.1 快捷菜单

?

?

?

?

?

?当您在“依赖项检查器”中右击消息时,将出现一个快捷菜单:转到可使用此选项来打开包含错误的报表,并转到导致问题的对象。也可以选择消息并按 Enter 或双击来打开报表。排序依据可使用此选项按类型、编号、说明或位置对消息进行排序。清除可使用此选项来删除选定的消息。全部清除可使用此选项来删除所有消息。复制可使用此选项将消息复制到剪贴板,以便能够将它粘贴到另一个应用程序中。选项

可使用此选项来打开“选项”对话框的“依赖项检查器”选项卡。可使用此选项卡来选择在运行“依赖项检查器”时要检查的条件。有关这些选项的更多信息,请搜索 Crystal Reports 联机帮助来查找主题“‘依赖项检查器’选项卡(‘选项’对话框)”。

6.5.4打开和停靠资源管理器

Crystal Reports 包括以下可用于查看各种报表和报表对象的资源管理器和工具:

?字段资源管理器

?报表资源管理器

?储备库资源管理器

?工作台

?依赖项检查器

通过使用“视图”菜单上的命令或“标准”工具栏上的按钮打开以上任何一个资源管理器。如果资源管理器处于关闭状态,则其命令或按钮可以打开它;如果资源管理器已打开,则其命令或按钮可以将焦点置于其上。

安装之后,每个资源管理器都会在报表设计器中的停靠位置打开。通过将资源管理器拖到一个新位置,您可以将它们停靠在设计器中的任何位置。

99Crystal Reports 用户指南

双击资源管理器的标题栏可在停靠和自由浮动模式之间切换。在自由浮动模式下,可以将资源管理器拖动到任何位置。当您拖动资源管理器时,位置框架会显示将会把资源管理器放在何处。也可以调整资源管理器大小,方法是用调整大小光标拖动资源管理器的任何一边。

注意: 双击自由浮动资源管理器的标题栏时,程序会将资源管理器停靠在最后一次使用 Crystal Reports 时它所在的位置。

可以依据“字段资源管理器”、“报表资源管理器”、“储备库资源管理器”、“工作台”和“依赖项检查器”创建一个多选项卡的资源管理器,方法是将这些资源管理器拖到彼此的上面。这个多选项卡的资源管理器可在停靠或自由浮动模式下使用。

单击合并的资源管理器中的选项卡可将焦点从一种资源管理器类型切换到另一种类型;标题栏中的名称将相应发生变化,以显示当前正在使用哪个资源管理器。

6.6超出基本报表

一旦掌握了报表的基础知识,您即将研究 Crystal Reports 的更强大的报表功能,包括:

?图表(请参阅 第239 页上的 “图表”)

?OLE 对象(请参阅 第270 页上的 “OLE”)

?套用信函(请参阅 第187 页上的 “套用信函”)

?子报表(请参阅 第401 页上的 “子报表”)

?交叉表(请参阅 第279 页上的 “交叉表对象”)

?多节报表(请参阅 第180 页上的 “多节报表”

第7章 BusinessObjects Enterprise 储备库

7.1BusinessObjects Enterprise 储备库是什么?

BusinessObjects Enterprise 储备库是存储和管理报表对象的中心。诸如自定义函数和自定义 SQL 命令之类的数据定义也可在 BusinessObjectsEnterprise 储备库中存储和维护。这样,用户和报表开发人员就可在新报表中使用这些对象,然后将报表在全公司范围内进行分发。

BusinessObjects Enterprise 储备库实质上是一个存储所支持的对象类型的数据库。这些类型包括:

?文本对象

?位图

?自定义函数

?命令(查询)

注意: 业务视图和值列表对象也存储在BusinessObjectsEnterprise 储备库中。可以在 Crystal Reports 中使用业务视图和值列表,但需要在“业务视图管理器”中创建它们。

通过维护存储报表对象的共享储备库,您只需修改一个特定对象,所有包含该对象的报表在打开使用时,即会全部自动更新。集中存储报表对象还有助于简化数据管理任务。这在提高公司的生产效率和降低成本方面非常有利。

BusinessObjects Enterprise 储备库包含在 BusinessObjectsEnterprise 中。

注意: 默认情况下,BusinessObjects Enterprise 储备库不包括任何示例储备库对象。有关如何安装示例储备库对象的信息,请参阅《业务视图管理员指南》“使用业务视图管理器”一章中的“安装示例储备库对象”部分。

水晶报表Crystal Reports培训教程 35_水晶报表教程

101Crystal Reports 用户指南

7.1.1工作流程

虽然 BusinessObjects Enterprise 储备库有多种使用方式,但您可以通过这个工作流程示例熟悉一些应该遵循的步骤:

?为您的储备库建立文件夹

储备库资源管理器以带有文件夹和子文件夹的树状结构显示BusinessObjects Enterprise 储备库的内容。您可以根据需要添加和重命名文件夹。

注意:您不能将新文件夹添加到 Enterprise 项节点及其子节点。这些文件夹由 BusinessObjects Enterprise 控制。

?在储备库中添加报表对象

根据要添加的对象类型的不同,有多种操作方法:

?选择一个文本对象或位图图像,然后将其拖到某个文件夹中,或

从快捷菜单中选择“添加到储备库”。

?在公式工作室中选择一个“自定义函数”,然后单击“添加到储

备库”按钮。

?在“数据库专家”中创建或修改一个命令,然后,当该命令出现在“选定的表”列表中时,右击它并选择“添加到储备库”选项。?在报表中添加储备库对象

根据对象类型的不同,需要使用不同的方法:

?可以将文本对象和位图图像从储备库资源管理器拖到报表中。?自定义函数可通过“公式工作室”添加。

?命令可通过“数据库专家”添加。

?更新储备库中的报表对象

根据对象类型的不同,也有不同的方法:

?可以将文本对象和位图图像拖回原来的储备库对象中。

?自定义函数可通过其用户界面更新。

?命令可通过“数据库专家”更新并重新添加到储备库中。

7.2访问 BusinessObjects Enterprise 储备库

安装时将设置 Crystal Reports 提供的储备库。您不必进行任何其他操作就可以使用这个储备库。

X打开 BusinessObjects Enterprise 储备库

1

2启动 Crystal Reports并打开一个报表。在“标准”工具栏上单击“储备库资源管理器”按钮。

提示:另一种方法是在“视图”菜单下单击“储备库资源管理器”

选项。

访问 BusinessObjects Enterprise 储备库102

3单击“登录”以连接到 BusinessObjects Enterprise。

有关如何登录到 BusinessObjects Enterprise 的信息,请参阅第335 页上的 “使用 Enterprise 文件夹”。

出现储备库资源管理器。

4扩展节点以查看储备库内容。

储备库资源管理器可能会出现在Report Designer中的一个停靠位置,这取决于上次使用Crystal Reports时它的位置。有关停靠资源管理器的更多信息,请参阅 第98 页上的 “打开和停靠资源管理器”。

将鼠标的光标停留在“储备库资源管理器”中的任何对象上可看到工具提示。对于文本对象和位图,工具提示包含“作者”和“说明”信息;对于命令,工具提示包含 SQL 语句的完整文本。

7.2.1工具栏

“储备库资源管理器”的工具栏提供带有工具提示的按钮。这些按钮使您能够添加新文件夹、搜索项目等等:

?更改视图设置

使用该选项可以打开“视图设置”对话框。使用该对话框可以限制“储备库资源管理器”中显示的储备库项目的类型。您也可以选择选项,以便按名称或类型对多个项目进行排序。

?高级筛选

使用该选项可以在“储备库资源管理器”的底部显示筛选选项。使用这些筛选器,可以依据“添加项目”对话框中“名称”或“作者”字段中的单词查找特定项目。有关添加或更改项目名称或作者的信息,请参阅 第5 页上的 “在储备库中添加项目”和 第9 页上的 “修改储备库中的对象”。

注意:在此选项的筛选字段中输入的文本不区分大小写。

103Crystal Reports 用户指南

?

?

?删除项/文件夹使用该选项可以从储备库中永久性删除选定项目或文件夹。删除文件夹时将删除其中包含的所有项目。有关从储备库中删除项目的更多信息,请参阅 第10 页上的 “从储备库中删除项目”。插入新文件夹使用该选项可以将新文件夹添加至储备库。有关信息,请参阅 第5页上的 “在储备库中添加文件夹”。注销服务器

使用此选项注销您连接到的 BusinessObjects Enterprise 服务器。注销时,此选项称为“登录”;使用它可重新连接到BusinessObjects Enterprise 服务器或连接到另一台服务器。

有关如何登录到 BusinessObjects Enterprise 的信息,请参阅第335 页上的 “使用 Enterprise 文件夹”。

7.2.2Enterprise 项文件夹

您的储备库包括名为“Enterprise 项”的节点。此节点包含由BusinessObjects Enterprise 管理的项 -- 包括发布到BusinessObjects Enterprise 的任何报表。您可以通过储备库资源管理器管理和打开您的报表。在管理报表时,您也可以计划它。

注意: 如果要管理的报表返回一个错误,则与 BusinessObjectsEnterprise 管理员联系以确保正确配置 CMC 访问 URL。有关更多信息,请参阅《BusinessObjects Enterprise 管理员指南》。

X通过储备库计划受控报表

1右击 Enterprise 项文件夹或其子文件夹之一中的 Crystal 报表,

然后从快捷菜单中单击“管理对象”。

注意:您可以只打开和查看那些具有 Crystal Report (RPT) 格式的BusinessObjects Enterprise 对象。如果位于您连接到的BusinessObjects Enterprise 服务器上,则会显示具有其他文件格式(如 PDF 和 XLS)的对象,但无法从储备库资源管理器中访问。在出现的页面上,单击“计划”选项卡。

选择要用于报表的重复发生计划。

有关计划报表的详细信息,请参阅《BusinessObjects EnterpriseInfoView 用户指南》。

单击“计划”。

单击“历史记录”选项卡以查看计划报表的状态。2345

在储备库中添加文件夹104

6关闭管理页以返回到储备库资源管理器。

计划报表的成功实例将出现在所选报表下的子节点中。

在您管理储备库资源管理器中的对象时,计划只是您可执行的众多任务之一。有关可执行的其他任务的说明,请参阅《BusinessObjectsEnterprise 管理员指南》。

7.3在储备库中添加文件夹

可以在储备库树视图中创建文件夹和子文件夹来整理储备库中的内容。1在“储备库资源管理器”中,右击某个节点,然后在快捷菜单上单击

“新建文件夹”。

提示:另一种方法是单击“储备库资源管理器”工具栏上的“插入新文件夹”按钮。

将在储备库树的底部添加一个新文件夹。(如果储备库项目按类型排序,则会按字母顺序添加新文件夹,并使用默认名称“新文件夹”。)注意:您不能将新文件夹添加到 Enterprise 项节点及其子节点。这些文件夹由 BusinessObjects Enterprise 控制。

为新文件夹起一个名字,然后按 Enter 键。

要添加子文件夹,右击新文件夹,然后在快捷菜单上单击“新建文件夹”。

为新的子文件夹起一个名字,然后按 Enter 键。234

7.4在储备库中添加项目

可以将文本对象和位图图像从报表拖放到相应的储备库文件夹,将其添加到储备库中。此时将出现一个对话框,供您添加有关该对象的标识信息。

自定义函数可通过公式工作室添加到储备库,而命令则通过“数据库专家”添加。

将报表项目添加到储备库后,就可以在多个报表间共享这些项目。使用 Crystal Reports 的每个人都可以连接到储备库,然后选择要添加到报表中的项目。

将对象添加到储备库时,该对象即“连接到”储备库。只要对象处于连接状态,您就可以用储备库中该对象的最新版本更新使用该对象的报表。

105Crystal Reports 用户指南

7.4.1添加文本对象或位图图像

1

2在报表中选择一个文本对象或位图图像,然后将其拖到储备库资源管理器的相应文件夹中。在“对象信息”对话框的“名称”字段中,为该对象或图像起一个名字。

注意:对象的名称中不能使用以下字符:# "{ } ; /

如果需要还可以输入作者和说明,然后单击“确定”。

提示:作者和说明信息即会出现在工具提示中,并且可以使用“高级”筛选选项搜索这些信息。

您会看到该文本对象或位图图像被添加到相应的文件夹中。

不使用拖放的方法也可以添加文本对象或位图图像。

在您的报表中选择一个文本对象或位图图像,然后在快捷菜单上单击“添加到储备库”。

出现“添加项目”对话框。

请注意,由于没有将该对象拖到特定的储备库文件夹,因此该对话框中有一块用于选择位置的区域。

在“名称”字段中,为该对象或图像起一个名字。

注意:对象的名称中不能使用以下字符:# "{ } ; /

在“位置”区域,双击储备库,选择一个文件夹,然后单击“确定”。您会看到该文本对象或位图图像被添加到相应的文件夹中。3123

如果您尝试编辑添加到储备库中的任何对象,您将发现无法对其进行更改;这些对象处于只读模式。对于存储在储备库中的任何报表对象,都会出现这种情况:只要对象连接到储备库,就不能在报表中对其进行更改。如果在报表中右击该对象,然后在快捷菜单上选择“断开与储备库的连接”,就可以断开该项目与储备库的连接,然后即可对该项目进行编辑。如果要用编辑过的报表对象更新其他报表,必须将该对象重新添加到储备库中。

7.4.2添加自定义函数

1

2在公式工作室中,展开“报表自定义函数”节点,然后选择要添加到储备库中的自定义函数。单击“添加到储备库”按钮。

您会看到该自定义函数被添加到“储备库自定义函数”节点下。提示:

?也可以将某个自定义函数添加到储备库中,方法是将它从“工作

室树”中的“报表自定义函数”节点拖放到“储备库自定义函数”

节点上。

水晶报表Crystal Reports培训教程 35_水晶报表教程

在报表中使用储备库对象106

?在“报表自定义函数”节点中,该自定义函数的图标会改变,指示

该自定义函数存在于储备库中。

注意: 必须将所有自定义函数添加到 Crystal Reports 随附的“储备库自定义函数”节点中。

7.4.3添加命令

1

2

3在“数据库专家”的“选定的表”区域,选择要添加到储备库中的命令。右击该命令并选择“添加到储备库”。在“添加项目”对话框中,为该命令指定一个名称和储备库位置。

该命令即会在“BusinessObjects Enterprise 资源管理器”、“数据库专家”和“设置数据源位置”对话框中出现。

7.5在报表中使用储备库对象

将一个或一组对象添加到储备库后,即可在 Crystal 报表中使用这些对象。各类储备库对象均通过各自的用户界面添加。对于文本对象和位图图像,只需将其从储备库资源管理器拖到报表中即可。当您在公式工作室中工作时,自定义函数处于选定状态,并且“BusinessObjectsEnterprise 资源管理器”、“数据库专家”或“设置数据源位置”对话框中的命令也处于选定状态。您也可以从“创建新参数”或“编辑参数”对话框中选择值列表对象。

将储备库对象添加到报表后,该对象仍保持连接到储备库,并且处于只读模式。要编辑该对象,必须断开它与储备库的连接,解除其格式锁定。?

?注意: 要重新连接与储备库断开的报表对象,应重新添加该对象,或更新储备库中的副本。如果对象未连接到储备库,下次打开报表时不能自动更新该对象。可以查看连接到储备库的报表对象,方法是打开“报表资源管理器”

并查找该对象;如果对象前面有一个图标,则它已连接到储备库。本节说明如何将位图图像、自定义函数或命令添加到新报表中。它还显示如何将值列表添加到参数中。

7.5.1在报表中添加文本对象或位图图像

1在“标准”工具栏上单击“储备库资源管理器”按钮。

另一种方法是在“视图”菜单下单击“储备库资源管理器”

选项。提示:

107Crystal Reports 用户指南

2登录到 BusinessObjects Enterprise(如果尚未登录)。

有关如何登录到 BusinessObjects Enterprise 的信息,请参阅第335 页上的 “使用 Enterprise 文件夹”。

展开“储备库资源管理器”中的相应文件夹,然后将文本对象或位图图像拖到报表中。3

注意: 不必根据 BusinessObjects Enterprise 储备库中的文件夹所包含的对象来命名这些文件夹;您可以自行选择一个名称。有关更多信息,请参阅 第5 页上的 “在储备库中添加文件夹”。

7.5.2在报表中添加自定义函数

1在“专家工具”工具栏上单击“公式工作室”按钮。

提示:另一种方法是在“报表”菜单下单击“公式工作室”选项。在公式工作室中,展开“储备库自定义函数”节点,直到找到要添加的自定义函数。

右击该自定义函数,然后在快捷菜单中单击“添加到报表”。

如果要添加的自定义函数需要储备库中的其他自定义函数,可以同时添加这些函数。23

您会看到该自定义函数被添加到公式工作室的“报表自定义函数”节点下。

注意: 在公式工作室中创建公式时,也可以将自定义函数添加到报表中。有关此方法的更多信息,请参阅 第364 页上的 “在“公式专家”中创建公式”。

7.5.3在报表中添加命令

1在“专家工具”工具栏上单击“数据库专家”按钮。

提示:另一种方法是在“数据库”菜单下单击“数据库专家”选项。在“数据库专家”中,展开“储备库”文件夹。

提示:如果“BusinessObjects Enterprise 资源管理器”没有马上打开,请双击“建立新连接”。

在“BusinessObjects Enterprise 资源管理器”中,展开各个文件夹直至找到要添加的命令,然后单击“打开”。23

命令将出现在“数据库专家”的“可用数据源”区域中。当命令位于此区域中时,即可在要添加任何其他数据源时将其添加到报表中。有关更多信息,请参阅 第81 页上的 “选择数据源”

修改储备库中的对象108

7.5.4将值列表添加到参数中

1

2

3在字段资源管理器中,选择“参数字段”,然后单击“新建”。在“值列表”区域中,单击“动态”。单击“现有”,然后从出现的树视图中选择储备库值列表。

注意:如果列表为空(您无法连接到储备库,或报表不包含现有的值列表),则此选项不可用。

7.6修改储备库中的对象

要修改储备库对象,可以先断开它们,在报表中进行修改,然后再重新添加到储备库中。还可以直接在储备库中重命名对象,然后将其移动到其他文件夹。

请注意,修改对象并将其重新添加到储备库后,所做更改将影响所有使用同一储备库的用户:重命名的对象对于所有用户均已重命名,而且在Report Designer中打开包含已修改对象的报表时,这些报表会自动更新。X修改储备库对象

注意: 此过程说明如何修改和更新储备库中的文本对象。自定义函数和命令是在各自的用户界面中进行修改和更新的;在所有情况下,都必须先将自定义函数或命令从储备库断开,进行修改,然后将自定义函数或命令重新添加到储备库中。

1

2

3

4在“储备库资源管理器”中,将任意文本对象拖到报表中。在报表中右击该文本对象,然后从快捷菜单中选择“从储备库断开连接”。双击该文本对象,然后修改其文本。将经过修改的文本对象从报表重新拖到它在“储备库资源管理器”中

的位置。

放置该文本对象时,将出现“添加对象”或“更新对象”对话框。单击“更新”。

在“修改项”对话框中进行任何所需的更改,然后单击“确定”。在储备库中右击该文本对象,然后在其快捷菜单中单击“属性”。请注意,“修改时间”区域中的日期和时间已改变,以便与将文本对象重新添加到储备库时的时间相对应。567

109Crystal Reports 用户指南

7.7在报表中更新连接的储备库对象

如果报表中使用的储备库对象连接到该报表的储备库,那么在Crystal Reports 中打开该报表时,这些对象会自动更新。该行为由一个全局“选项”设置控制,适用于所有报表。

注意: 如果报表中使用的储备库对象已断开与储备库的连接,打开该报表时这些对象不会自动更新。

X设置更新选项

1在“文件”菜单上,单击“选项”。

出现“选项”对话框。

单击“报表”选项卡。

选中“打开时更新连接的储备库对象”复选框。

单击“确定”。234

如果不想使用该全局选项,也可以分别在各个报表的“打开”对话框上选中“更新储备库对象”选项,以更新报表的储备库对象。

注意: 当您打开包含存储在储备库中的命令的报表时,并且已指定您想“打开时更新连接的储备库对象”,则只会自动刷新命令的定义;只有当您在报表中单击“刷新”按钮时,命令返回的数据才会得到更新。

7.8从储备库中删除项目

可以将存储在储备库中的任何对象从该储备库中删除,而这样做不会将该对象从使用它的报表中删除。从储备库中删除了一个对象后,该对象对于所有用户都已删除。

?

?注意: 从储备库中删除了某个对象后,该对象在使用它的报表中仍呈现为连接状态。尝试更新这种报表的储备库对象时,“缺少储备库项”对话框中将出现一条警告消息,这样您就可以快速识别出该对象。使用“报表资源管理器”对话框找到报表中的对象,然后即可将其断开连接。如果已从储备库中删除了对象,则在使用相同的名称创建新对象并将

其重新添加到储备库中时,不会将该对象重新链接到报表。每个储备库对象都有唯一的 ID;链接不是依据名称进行的。

X从储备库中删除对象

1在“标准”工具栏上单击“储备库资源管理器”按钮。

提示:另一种方法是在“视图”菜单下单击“储备库资源管理器”

选项。

在储备库中使用“撤销”命令110

2在相应的文件夹中,选择要删除的对象,然后按 Delete 键。

系统将要求您确认删除。

单击“是”按钮。

该对象即会从储备库中删除。3

通过右击一个储备库对象,然后从快捷菜单中选择“删除”,也可以将其删除。

7.9在储备库中使用“撤销”命令

不能撤销任何更新储备库的操作。但可以 撤销任何只影响报表,而不影响储备库的操作。例如,可以撤销断开连接的操作。

水晶报表Crystal Reports培训教程 35_水晶报表教程

第8章 设计优化的 Web 报表

8.1概述

无论您是通过本地网络、公司 Intranet 还是 Web 分发企业报表,都可以利用 Crystal Reports 强大的内置性能特性快速进行 Web 制表。

即使您不应用本章所述的任何策略,Crystal Reports 也会自动提供这些主要的性能优点:

?按需分配页技术

按需分配页的报表访问允许用户只下载需要查看的特定报表页,从而缩短了响应时间,减少了 Web 流量。不仅如此,占位符和部分页技术还使您无须等待图形和子报表等大对象的处理,就能立即查看 Web上的报表页和数据。

?优化的多线程报表引擎

Crystal Report 引擎的多线程能力及线程安全数据库驱动程序使您能够在许多其他操作在后台进行的同时,继续执行您自己的重要任务。此外,报表引擎减少了数据传递次数,通过改善的内存管理来加快处理速度,尽可能高效处理子报表和参数。

除了上述内置功能,下面各节中讨论的 第2 页上的 “优化 Web 报表的关键策略”还提供了其他性能优势,这些优势通常是十分可观的。当您依照这些策略设计新的报表(或改进在 Crystal Reports 旧版本中创建的报表)时,报表的运行速度将加快并且占用的处理资源也更少。因此,报表用户可以方便地访问他们所需的数据,而且速度比以前任何时候都快。

提示:如果您对 Web 制表不熟悉,甚至对制表本身也不了解,请阅读本章,以便为以后的制表任务作准备 -- 您将获得关于快速设计优质的报表的重要知识。

注意: 在考虑性能问题时,了解数据库及其工作原理通常是很重要的一件事。有关背景信息,请参阅 第412 页上的 “数据库概述”。

112Crystal Reports 用户指南

8.1.0.1 优化 Web 报表的关键策略

?

?

?

?

?Crystal Reports 和 BusinessObjects Enterprise 将与您的公司一起成长。有关详细信息,请参阅 第2 页上的 “通过 BusinessObjects。Enterprise 缩放”有关如何创建快速交互式报表的提示和注意事项,请参阅 第4 页上的 “作出正确的设计选择”。有关充分使用现有数据库方面的信息,请参阅 第9 页上的 “优化您的制表环境”。若要减少数据传输量和增强报表的性能,请参阅 第12 页上的 “使用增强的记录选定公式”。若要缩短分组、排序、或总计报表的处理和数据传输时间,请参阅

第18 页上的 “改进分组、排序和总计”。

一般情况下,无论以何种方式分发报表,您都会遇到类似的性能问题。按照以下这些策略操作,您会发现不仅在多用户 Web 环境下性能显著提高,在单用户情形下性能也会显著提高。

8.2通过 BusinessObjects Enterprise 缩放

BusinessObjects Enterprise 为通过 Web 发送报表或将其集成到自定义 Web 应用程序中提供了一种灵活而有效的方法。

报表应用程序服务器 (RAS) 提供了一套丰富的基于服务器的报表服务,可用来将报表紧密集成到自定义的 Web 应用程序中。RAS 提供了一套基本的 BusinessObjects Enterprise 服务,专门用于报表处理,应用程序集成,以及运行时报表修改。

您可以使用 BusinessObjects Enterprise 其他版本提供的高级服务进一步扩展您的应用程序。其中包括:

?安全性

BusinessObjects Enterprise 提供了粒化的组级别、用户级别和数据级别的安全性,帮助您保护敏感报表,为最终用户提供更具个性化的服务。

?计划

BusinessObjects Enterprise 包含一个灵活的基于时间和事件的调度系统,使您可以在工余时间处理大的报表,从而避免不必要的数据库访问。(Report Application Server 提供按需制表功能,每个查看请求都会产生一个单独的数据库查询)。

通过 BusinessObjects Enterprise 缩放113

?

?

?

?

?版本管理版本管理和调度功能紧密配合,共同实现报表实例的存储。版本管理不仅可以降低为服务用户而造访数据库的次数,而且可以保留报表实例的档案作为历史参考。集群BusinessObjects Enterprise 整合了成熟的集群和负载平衡技术,可帮助您实现一个高度易用、性能可靠的信息传送系统。可伸缩性BusinessObjects Enterprise 建立在分布式多服务器结构的基础上,可使您通过单机扩容(添加处理器)或多机扩展来处理较重的用户负载。管理BusinessObjects Enterprise 包含大量的管理控件,可用来组织内容,设置复杂的调度和安全性,并调节系统达到最佳性能。外部(第三方)身份验证

BusinessObjects Enterprise 允许您利用现有安全系统来管理用户和组。所有身份验证工作都可委托给第三方 NT 或 LDAP 系统。

8.2.1BusinessObjects Enterprise 中日期函数的求值时间

Crystal Reports 中可用的不同日期和时间函数是在报表处理的不同阶段求值的。某些函数是在处理预定的报表或刷新报表实例时求值的:该求值时间称为“WhileReadingRecords”。其他函数是在每次格式化报表页以在报表查看器或浏览器中显示时求值的:该求值时间称为“WhilePrintingRecords”。

如果使用 BusinessObjects Enterprise 生成报表实例,并且注意到所求出的日期或时间函数值不是预期值,请考虑以下因素:

?当前日期和时间始终是从报表引擎可以在本地访问的时钟(即处理报

表的计算机上的时钟)中读取的。在 BusinessObjects Enterprise中,“作业服务器”依据数据库处理预定报表,而“页面服务器”依据数据库处理按需要显示的报表。Page Server 还在用户查看报表实例的个别页面时对页面进行格式化。

?在处理预定报表时,Job Server 将对所有日期和时间公式进行求

值,以便生成报表实例。如果只是查看生成的报表实例,则不会对任何公式重新求值。

?当您查看缓存的报表页时,不会对任何日期函数重新求值,原因是记

录已被读取并且页面已被格式化。

?如果在报表的选定公式中使用日期和/或时间函数,则报表数据依赖

于这些公式的返回值。因此,在以后某个日期查看报表实例时,函数可能会导致系统依据数据库对报表数据进行更新。

114Crystal Reports 用户指南

?若要确保日期和时间函数返回预期的值,可以通过使用

WhileReadingRecords 和 WhilePrintingRecords 函数来强制确定求值时间。有关更多信息,请参阅 Crystal Reports 联机帮助的“函数”和“报表处理模型”部分。

8.3作出正确的设计选择

本节提供有助于提高报表性能的设计选择和考虑。本主题涵盖了从基本的建议到较复杂的决策这一范围内的内容,例如,将在 CrystalReports 旧版本中创建的报表更新为最新的文件格式(基本的建议),以及是使用活动数据还是使用已保存数据及如何有效地使用子报表(较复杂的决策)。

在设计报表,尤其是设计用于 Web 的报表时,应该允许报表用户操纵其所查看的数据。即,显示汇总信息,以便每个用户可以快速地浏览报表,然后深化以访问其他数据。采用此方法,由于仅从数据库服务器传输用户所请求的数据,所以最大限度地降低了 Web 流量并缩短了响应时间。?

?

?

?下面只是设计用户驱动报表的几点优势:报表用户可以对其在 Web 上查看的信息类型和数量进行交互控制。因为只从数据库服务器返回用户所请求的信息,所以数据传输和网络流量减少。当用户需要通过 Web 根据实时数据制作报表时,面向用户的报表响应迅速,并能有效地与数据库服务器通讯。报表变得更有用,原因在于每个用户均可自定义报表的内容,从而创

建针对其特定决策问题的报表解决方案。

8.3.1使用更快的报表格式

要提高在 Crystal Reports 旧版本中创建的报表的性能,最快速的方法是将其以最新的 Crystal Reports 格式保存。Crystal Reports 在经过改进后,已能较以往更快地处理报表:更新旧报表可利用这些改进功能。

若要更新旧报表的格式,只需用 Crystal Reports 将其打开,然后从“文件”菜单中选择“保存”。旧版本的报表将被替换为版本 11 的报表。

注意: 如果由于某些原因需要保留报表的原始文件格式,请使用“另存为”(而非“保存”)命令,并输入版本 11 报表的新名称。

作出正确的设计选择115

8.3.2在实时数据和已保存数据之间选择

当通过 Web 制表时,需要作出的一个最重要的决定是使用活动数据还是已保存数据。然而,无论作何选择,Crystal Reports 都会尽快显示第一页,这样您就可以在其他数据尚在处理的时候看到您的报表。

8.3.2.1 实时数据

活动制表可使用户直接从数据库服务器实时访问活动数据。使用活动数据,用户在所访问信息经常变化的情况下随时能获得最新的数据,时间可精确到秒。例如,某个大型配送中心每天货运不断,经理需要对库存进行跟踪,那么采用实时报表创建就能使他们得到所需的信息。

Crystal Reports 支持活动制表。然而,您应首先考虑是否要让所有用户接连不断地造访数据库服务器。如果数据不是快速或经常更改,那么所有这些数据库请求除了增加网络流量和消耗服务器资源以外没有多大的意义。在这种情况下,您可能倾向于使用带有已保存数据的报表。

若要确保实时制表的效率,请阅读本章中的所有建议。但是,以下主题尤其重要:

? 第7 页上的 “利用按需分配子报表”

? 第18 页上的 “在服务器上执行分组”

? 第15 页上的 “将参数字段合并到记录选定公式中”

8.3.2.2 已保存数据

带有已保存数据的报表在处理不经常更新的数据时很有用。当用户浏览带有已保存数据的报表并对列或图表深化以查看细节时,他们不直接访问数据库服务器;相反,他们访问的是已保存的数据。因此,带有已保存数据的报表不仅将网络数据传输量降到最低,而且还减轻了数据库服务器的负担。

您可以从 BusinessObjects Enterprise 内部调度这些报表,使其自动从数据库定时刷新。例如,如果销售数据库每天或每周只更新一次,那么可按相似的进度运行报表并将其与数据一同保存。这样,销售代表就总能使用当前的销售数据,而不必在每次打开报表时访问数据库。或者,您也可以根据需要来刷新带有已保存数据的报表。

?

?

?

?在报表中执行以下任何任务时,将会放弃和刷新已保存的数据:选择“刷新”命令。更改数据库登录。更改报表的参数。添加在已保存的数据中不存在的新字段。

水晶报表Crystal Reports培训教程 35_水晶报表教程

116Crystal Reports 用户指南

?

?

?

?在选定了“在服务器上执行分组”的报表中进行深化,并取消了详细资料节。验证数据库(如果数据库结构已彻底改变)。更改子报表上的链接参数(刷新该子报表)。更改组的顺序(仅适用于 Report Application Server 中的报表)。

如果您确要使用带有已保存数据的报表,请结合本章中的其他建议,以确保所设计的报表达到最优性能。

若要保存带有数据的报表,首先要确保在“文件”菜单中选中“随报表保存数据”选项,然后保存报表。

8.3.3设计汇总报表

设计和分发摘要报表是确保用户可以在 Web 上快速查找所需数据的一种相对简便的方法。摘要报表可以包含的数据与其他任何报表一样多。但是,通过隐藏汇总报表的“详细资料”节,可以避免用户陷入他们可能并不直接需要的数据中。

当“详细资料”部分隐藏时,用户首先通过浏览“组”树来找到所需数据。然后,可以通过在报表中深化来请求特定数据,即可在不带不必要记录的情况下快速返回所需数据。这对于改善较长汇总报表的浏览尤其重要,较大的汇总报表可能长达几百页、几千页甚至几万页。

为了便于以此方式浏览,首先需要对数据进行分组,并插入要包含在报表中的摘要字段。有关详细的信息和说明,请参阅 第144 页上的 “将数据分组”和 第160 页上的 “汇总分组的数据”。

一旦对报表数据进行了分组和汇总,您就可以隐藏“详细资料”节(和任何其他较大的报表节),这样,用户就能很容易搜索到对他们而言比较重要的数据。

X隐藏摘要报表中的详细资料

1在 Crystal Reports 中打开报表。

如果尚未创建分组及汇总的报表,则从“Feature Examples”样本文件夹中打开“Group.rpt”。

在“报表”菜单上,单击“节专家”打开“节专家”。

在“节”列表中,单击“详细资料”。

在“节专家”的“公用”选项卡上,选中“隐藏(深化完成)”复选框。单击“确定”。2345

作出正确的设计选择117

您会注意到现在详细资料被隐藏起来。若要查看详细资料,使用“组”树浏览报表,然后对报表的适当区域进行深化。

注意: 有关使用汇总报表降低数据传输量的详细信息,请参阅 第18页上的 “在服务器上执行分组”。

8.3.4慎用子报表

有关创建子报表的一般信息,请参阅 第401 页上的 “子报表”。

8.3.4.1 利用按需分配子报表

如果报表有处理大量记录的节,则可以将该节放入按需分配子报表中。按需分配子报表在主报表中以超级链接的形式出现。在打开主报表时,不会检索按需分配子报表的任何数据,直到深化相应的超级链接为止。

例如,在设计报表显示每个雇员对于每种产品和每种产品类型的季度销售额时,可能还希望通过包含每周销售信息来跟踪每个雇员的进展情况。但是,查看该报表的很多用户可能不会对此类额外的数据感兴趣。在此类情况下,可将报表的每周销售部分提取出来,将其作为按需分配子报表附加到报表中。仅当用户在该按需分配子报表上深化时,才会从数据库检索有关每周销售情况的详细信息。

很多报表对象(如大型交叉表、OLAP 网格、高级图表和地图)都是可以包含到按需分配子报表中的理想候选对象,以使对象在深化之前不会被处理。

若要插入一个按需分配子报表,请参阅 第403 页上的 “插入子报表”和 第410 页上的 “创建按需要显示子报表”。

提示:也可以将此类报表对象放入使用“在服务器上执行分组”选项的报表的隐藏“详细资料”部分中。这样做时,数据库服务器执行大部分处理任务,而且只将记录的子集从服务器传输到本地计算机(其他记录则在您深化到隐藏的节时检索)。

8.3.4.2 使用链接子报表

当链接子报表时,Crystal Reports 会根据主报表中的匹配记录协调子报表中的数据。如果需要使用常规的链接子报表(即非按需分配链接子报表),您就应考虑如下准则:

?如果常规的链接子报表所提供的附加数据仅对相对较少的用户有用,

则应改为创建链接的按需分配子报表。需要查看附加数据的用户可通过单击超级链接来查看子报表;而不需要查看附加数据的用户则不必从数据库服务器下载它。

118Crystal Reports 用户指南

?在某些情况下,将常规链接子报表放置在主报表的“详细资料”节内

会不利于提高性能,尤其是当主报表包含许多记录时。(这是因为您在为每个记录创建一个单独的子报表,而且必须为主报表中的每个数据库记录分别运行查询。)作为一种替代方法,可以考虑在主报表的“详细资料”节内使用链接的按需分配子报表。

8.3.4.3 链接表而不是链接子报表

只要可能,就应采用以下方法协调报表数据:将“数据库专家”中“链接”选项卡上的数据库表链接到主报表,而不是将常规子报表(即非按需分配子报表)链接到主报表。因为每个子报表都是作为单独的报表运行,所以链接的表常常有性能优势。

相关主题

?

?有关其他常规准则,请参阅 第403 页上的 “数据库链接与一对多情况下的子报表”。 有关完整的详细信息,请参阅 第418 页上的 “一对多链接中的性

能考虑”。

8.3.5有效地使用其他设计元素

映射

映射呈现是一种单线程操作,它的缩放性能并不好。尽管支持映射,但您仍然需要仔细考虑报表中的映射将对性能产生的总体影响。报表模板

如果将对多个报表应用同一模板,最好将报表模板打开一次,然后将其保存在缓存中,这是因为模板只需要为只读。

包括“第 N 页,共 M 页”或“总页数”

如果在报表中包括特殊字段“第 N 页,共 M 页”或“总页数”,则报表需要先完成处理,然后才能计算此值。除非报表非常小或者的确需要此值,否则,请避免使用这些特殊字段。

8.3.6设计报表以最大程度地利用数据共享

BusinessObjects Enterprise 具有数据共享功能,通过减少具有多个用户的系统中进行的数据库调用次数来提高性能。

只有在满足某些条件时,才能在报表对象的用户之间共享数据。在不损害用户的报表信息需求的情况下,尝试通过设计尽可能满足数据共享条件的报表来最大程度地利用数据共享。

优化您的制表环境119

如果报表由页面服务器处理,则在满足以下条件时将会在报表用户之间共享数据:

?用户使用相同数据库登录信息查看报表时。

?用户使用相同参数查看报表时。

?用户使用相同页面布局选项查看报表时。

?用户使用相同区域设置查看报表时。

使用 DHTML 查看器、ActiveX 查看器或 Java 查看器查看的报表是使用页面服务器处理的。这些查看器不允许用户更改报表的页面布局或区域设置。但是,可以开发提供此功能的自定义查看器应用程序。

如果报表由报表应用程序服务器 (RAS) 处理,则在满足以下条件时将会在报表用户之间共享数据:

?用户使用相同数据库登录信息查看报表时。

?用户使用相同参数查看报表时。

?用户使用相同区域设置查看报表时。

?用户不修改报表时。

使用高级 DHTML 查看器(或允许查看或修改报表的自定义应用程序)查看的报表是使用报表应用程序服务器处理的。

8.4优化您的制表环境

另一个确保报表用户能迅速收到信息的步骤是评估制表环境。您使用的是哪种类型的数据库?数据库内的数据如何组织?如何连接到需要将其制成报表的数据?如何链接到数据库表?通过考虑这些重要因素,您可以显著降低实际必须通过网络传输的数据量。

8.4.1选择最快的数据库和连接

若要提高制表性能,应充分利用数据库进行大部分报表处理工作。理想情况下,结构化查询语言 (SQL) 数据库是执行这类任务最有效的数据库。

有关 SQL 数据库的详细信息,请参阅 第436 页上的 “使用 SQL和 SQL 数据库”。

8.4.2使用表索引

您也可以改进数据库内数据的组织方式。要使处理速度达到最快,可基于 SQL 数据库中带索引的字段创建报表。使用表索引很容易提高数据的访问速度,减少 Crystal Reports 计算数据所花的时间。

有关表索引原理的完整说明,请参阅 第415 页上的 “索引表”。

120Crystal Reports 用户指南

8.4.3改进表链接选择

在报表中添加多个数据库表时,通过公用字段将表链接到一起可使一个表中的记录与另一个表中的相关记录匹配。(如果您的数据库表编有索引,表链接的效果最好。)用这种方式链接数据库表通常比将链接子报表合并到主报表快得多。

在链接两个或多个表时,人们总是希望报表读尽可能少的记录,而同时又能找到所有匹配的记录。恪守这一准则的最佳方法是在创建报表前评估您的制表需求并规划策略。当您确切了解您要从数据源获得的内容后,Crystal Reports 将使该信息的获取变得很容易。

还有许多其他要在链接表时考虑的具体问题。然而,这些额外的考虑因素在很大程度上要视制表环境而定。换句话说,达到最优的表链接性能的措施取决于数据库类型,为表编制索引的可能性,以及表间所需的联接类型。您可在题为 第417 页上的 “链接表”的一节中找到各种制表方案的完整说明。

在大多数制表方案中,以下一些常规步骤应能确保表在链接后性能即使不能达到最佳,也能得到提高。

X有效地链接表

1

2

3确保每个数据库表在要使用的字段上编制了索引。将数据库表添加到您的报表,然后在公用字段上链接主表和查阅表,而不要插入链接子报表再将其绑定到主报表的数据。在主表中,使用对索引字段设置了范围限制的记录选定公式。这样可

以减少 Crystal Reports 必须在查阅表中找到的与主表中记录相匹配的记录的数目。

相关主题

?

?

?有关表链接方案的完整细节,请参阅 第417 页上的 “链接表”。有关记录选定公式的常规信息,请参阅 第131 页上的 “选择记录”。 有关高级记录选择策略,请参阅 第12 页上的 “使用增强的记录选

定公式”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

优化您的制表环境121

8.4.4使用线程安全数据库驱动程序

如果您通过 Web 共享和刷新数据,请尽可能使用线程安全数据库驱动程序打开它们。Crystal Report 引擎支持多线程。这样,当您通过线程安全数据库驱动程序发出多个数据请求时,报表引擎可同时处理所有的请求。因此,您将能够更快地查看报表。

?

?

?

?

?

?

?

?

?

?

?

?

?目前,ODBC 驱动程序 crdb_odbc.dll 对下列数据库类型是线程安全的:Microsoft SQL ServerOracleSybase目前,下列本机数据库驱动程序是线程安全的:crdb_ado.dll (OLE DB)crdb_cdo.dll(Crystal 数据对象)crdb_com.dll(COM 数据提供程序)crdb_dao.dll (Access)crdb_dataset.dll(DataSet 提供程序)crdb_fielddef.dll(字段定义)crdb_filesystem.dll(文件系统数据)crdb_olap.dll (OLAP)crdb_oracle.dll (Oracle)crdb_p2sdb2.dll (DB2)

注意: 有关这些列表的更新内容,请查看 Crystal Reports CD 中的发行说明;可能会增加更多的在测试时发现是线程安全的数据库驱动程序。

8.4.5使用存储过程进行更快的处理

存储过程是一个经过编译的 SQL 程序,由一个或多个 SQL 语句构成,位于并运行于 SQL 服务器上。虽然存储过程的正确设置比较费时,但其功能极其强大。

使用存储过程的优势显见于从大型数据集中制成报表,或运行需要冗长复杂计算的报表。在这些情况中,您最好使用一个预定义的存储过程在数据库服务器上完成这些复杂工作。

由于存储过程位于 SQL 服务器上,您可能需要向系统管理员了解有关访问和设置存储过程的问题。

相关主题

?

?有关存储过程的更多信息,请参阅 第439 页上的 “存储过程”。要将一个存储过程选为数据源,请参阅联机帮助中的“SQL 存储过程”。

122Crystal Reports 用户指南

8.5使用增强的记录选定公式

提高报表处理速度最为重要的做法是限制从数据库返回的数据量。实现这种做法的主要工具是记录选定公式。

Crystal Reports 分析记录选定公式并从中生成 SQL 查询。然后,数据库处理该 SQL 查询,将得到的记录发送回 Crystal Reports。CrystalReports 然后在本地为从数据库检索到的每个记录对记录选定公式进行求值,从而计算出用于生成报表的记录集。

不必要的记录在以下两个阶段消除:在数据库中使用 SQL 查询消除以及在 Crystal Reports 内由记录选定公式消除。为了提高速度,可能需要在第一阶段尽可能多地消除记录。通过有效地设计记录选定公式,可以将很大一部分处理工作推卸给数据库服务器来完成,这样在向Crystal Reports 返回记录之前,数据库已经消除了不必要的记录。这通常称为“将记录选定下推到数据库服务器”。

本节提供几点确保可将记录选定公式下推到数据库服务器的提示。

8.5.1下推记录选定 - 示例

本示例展示编写可以下推到数据库服务器的记录选定公式的好处。在 Xtreme 示例数据库的“订单”表中共有 2192 条记录,其中 181条的订单日期早于 2001 年。假定您只需要报告这些记录。一方面,可以使用下面的记录选定公式:

Year ({订单.订单日期}) < 2001

所生成的 SQL 查询将 2192 条记录全部发送到 Crystal Reports,然后记录选定公式将此记录数减少到 181 条。若要查看这一过程,请单击“数据库”菜单上的“显示 SQL 查询”,您会注意到 SQL 查询中没有 WHERE 子句。这是因为 Crystal Reports 无法下推 WHERE 子句中的Year ( ) 函数。

另一方面,下面的记录选定公式生成相同的报表:

{订单.订单日期} < #Jan 1, 2001#

上面的第二条公式可在数据库服务器上执行,因此可以下推。所生成的 SQL 查询仅将 181 条记录发送到 Crystal Reports。因此,在由Crystal Reports 对记录选定公式求值时,无须进一步消除记录。单击“数据库”菜单上的“显示 SQL 查询”,您会注意到所生成的 SQL 查询中有 WHERE 子句。

使用增强的记录选定公式123

如本示例所示,在改进记录选定公式后,报表的处理速度提高了。在本例中,两个公式生成相同的报表,但第二个公式利用了数据库服务器在处理其数据时可以使用的功能和优化。

提示:有关其他信息和设置记录选定请求时的限制,请参阅下一节。注意: 如果您不熟悉记录选定公式,可以先从“选择专家”或记录选定公式示例模板开始学起。有关更多细节以及对记录选定的介绍,请参阅 第131 页上的 “选择记录”。

8.5.2记录选定性能提示

在设置记录选定请求时,请考虑下列与性能相关的项目:

8.5.2.1 常规

?

?

?要下推记录选定,必须在“报表选项”对话框(从“文件”菜单打开)中选中“为提高速度而使用索引或服务器”。在记录选定公式中,避免在非参数字段的字段上进行数据类型转换。例如,避免使用 ToText( ) 将某数值数据库字段转换为字符串数据库字段。能够下推一些使用常量表达式的记录选定公式。

8.5.2.2 PC 数据库

?

?只能下推编有索引的字段上的记录选定。只能下推 AND 子句(非 OR)。

8.5.2.3 SQL 数据库

?

?

?

?

?

?能够下推索引字段或非索引字段上的记录选定。如果使用索引字段,SQL 服务器响应速度将加快。能够下推 AND 和 OR 子句。可以下推包含某些类型的嵌入公式的记录选定公式。应该合并 SQL 表达式字段以下推进行记录选定所需的公式计算。在“数据库”菜单上单击“显示 SQL 查询”,以查看将要发送到数

据库服务器的 SQL。

124Crystal Reports 用户指南

8.5.3编写高效记录选定公式的策略

注意: 本节假定您熟悉“选择专家”,并正从 SQL 数据库制作报表。创建记录选定公式时请考虑以下几点:

8.5.3.1 考虑 1

任何完全用“选择专家”生成、而不是自己编写的记录选定公式,都可以下推。

这种情况实际上的根据在于以下几点。但是,使用下面的提示可以编写的记录选定公式类型要比用“选择专家”编写的公式多。要做到这一点,您需要直接用公式工作室编辑记录选定公式,或者在单击“选择专家”中的“显示公式”时出现的文本区域内进行编辑。

若要打开公式工作室修改记录选定,单击“报表”菜单,指向“选定公式”,然后从子菜单中选择“记录”。

8.5.3.2 考虑 2

任何具有 DataBaseField SupportedOperatorConstantOrParameterExpression 形式的选定公式均可下推。

当然,DataBaseField 只是一个数据库字段。SupportedOperator是 =、<>、<、<=、>、>=、StartsWith、Like 或 In 之中的任何一个。

ConstantOrParameterExpression 是涉及常量值、运算符、函数和参数字段的任何表达式。它不能包含变量、控制结构或参数字段以外的字段。根据其本身定义,常量表达式和参数表达式可以无须访问数据库而求得。

注意: 常量或参数表达式的求值结果可以是简单值、区域值、数组值或一个区域值数组。这类表达式的举例如下:

{?number parameter} - 3

Year ({?run date})

CurrentDate + 5

DateDiff ("q", CurrentDate, CDate("Jan 1, 1996"))

Month (Maximum ({?date range parameter}) + 15)

["Canada", "Mexico", "USA", {?enter a country}]

1000 To 5000

[5000 To 10000, 20000 To 30000, 50000 To 60000]

一个完整的示例:

{订单.订单日期} >= CurrentDate - 3

该程序还可下推只包含布尔字段(不包含运算符和常量部分)的表达式。{订单.已发货}

Not {订单.已发货}

使用增强的记录选定公式125

8.5.3.3 考虑 3

IsNull (DataBaseField) 可以下推。

8.5.3.4 考虑 4

SqlExpression SupportedOperator ConstantOrParameterExpression可以下推。

例如,如果 {@ExtendedPrice} = (Quantity * Price),则选定公式 {@ExtendedPrice} > 1000 不能下推。但是,如果用等价的 SQL表达式代替 @ExtendedPrice,则该选定公式可以下推。

8.5.3.5 考虑 5

当使用遵循上述考虑因素编写的多个表达式时,将其用 AND 和 OR 分开,也可以使用 NOT。每种表达式可以有多个,并用括号确定优先级。例如:{Orders.Order ID} < Minimum({?number range}) Or

{订单.订单金额} >= 1000

(IsNull({客户.地区}) Or

{客户.地区} = "BC") And

{客户.去年销售额} > 2000

相关主题

?如果记录选定公式未作出预期的响应,请参阅 第137 页上的 “记

录选定公式疑难解答”。

8.5.4将参数字段合并到记录选定公式中

不要在每次打开报表时均显示报表的所有数据,可以创建参数字段提示用户指定希望查看的数据。为了减少从数据库服务器传输的数据量,请将这些参数字段直接合并到记录选定公式中。

一般情况下,参数字段为用户提供交互性,用户响应参数提示以指定希望查看的数据。但是,通过将参数字段直接合并到记录选定公式中,将不仅提供交互性,而且减少了数据传输并改善了性能。

可以通过“选择专家”或“记录选定公式工作室”向记录选定公式添加参数字段。当使用“记录选定公式工作室”时,可将参数字段和其他任何字段一样对待。

下面的示例中,您将创建一个参数字段,然后用“选择专家”将其添加到记录选定公式。有关设计和创建参数字段的更多细节,请参阅第374 页上的 “参数字段和提示”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

126Crystal Reports 用户指南

X将一个参数字段添加到记录选定公式

1打开示例报表 Group By Intervals.rpt(位于 Feature Examples

示例文件夹)。

花些时间浏览“组”树并留意数据是如何组织的;您还可以在Crystal Reports 窗口的右下角看到为此报表返回了 269 条记录。注意:只有在“视图”菜单中选中“状态栏”选项时才会看到此数字。现在单击“设计”选项卡。

在“视图”菜单上单击“字段资源管理器”。

在“字段资源管理器”中,右击“参数字段”并从快捷菜单中选择“新建”。

将出现“创建新参数”对话框。

在参数“名称”中键入 SalesQuota。

单击“类型”列表并选择“数字”。

在“选项”区域,转到“提示文本”选项,并键入What was lastyear誷 sales quota?(去年的销售配额是多少?)

在“选项”区域中,确保“允许离散值”选项为“True”,然后单击“确定”。

注意:现在已创建了该参数字段。这些过程的其余部分讲述如何用“选择专家”将参数字段添加到记录选定公式中。

在“报表”菜单上单击“选择专家”。

出现“选择字段”对话框。

选择客户.去年销售额字段,然后单击“确定”。

出现“选择专家”。

在客户.去年销售额选项卡中,单击下拉列表并选择“大于”。

出现新的下拉列表。

单击第二个下拉列表并选择 {?SalesQuota}。

提示:单击“显示公式”按钮查看新的记录选定公式,形如: {客户.去年销售额} > {?SalesQuota}。您可能未使用“选择专家”,而是自己在“记录选定公式编辑器”中创建了此公式。(要查看该编辑器,可打开“公式工作室”并从 Selection Formulas 文件夹中选择“记录选定”。)

在“选择专家”中单击“确定”。23456789101112

现在已经将该参数字段添加到记录选定公式中。当您切换到“预览”模式,或单击“刷新”按钮时,您会被提示输入新的参数值。然后可以输入代表去年销售配额的数值。最终报表将只显示其“去年销售额”超出指定数值的那些客户。

使用增强的记录选定公式127

例如,如果您指定参数为 40000,那么报表将只显示去年的销售额超过 $40,000 的那些客户。还要注意到,在 Crystal Reports 窗口的右下角仅为报表返回了 58 条记录,而不是您在将参数字段放入选定公式前返回的 270 条记录。

通过对此报表进行改进,您检索到需要的所有信息,同时确保了从数据库服务器传输的记录数目最少。

相关主题

?

?

?若要创建高级参数,请参阅 第395 页上的 “高级参数功能”。有关参数字段的常规信息,请参阅 第374 页上的 “参数和提示概述”。有关记录选定公式的一般细节,请参阅 第131 页上的 “记录选定”。

8.5.5适时使用 SQL 表达式

SQL 表达式与公式类似,但 SQL 表达式是以结构化查询语言 (SQL)编写的。SQL 表达式可用于优化报表性能,原因在于 SQL 表达式执行的任务通常是在数据库服务器上执行的(与常规公式不同,常规公式有时在本地计算机上执行)。

因为 Crystal Reports 有自己的公式语言,而且该语言比标准 SQL的功能强大得多,所以不要一味只使用 SQL 表达式。Crystal 语法和Basic 语法均允许您用一些方法来改进和磨砺公式,而有些方法对于SQL 很困难或根本无法实现。但是,在某些情况下,创建和使用 SQL 表达式字段可以提高报表的处理速度。

8.5.5.1 SQL 表达式字段的主要用途

为了维持最佳的报表处理速度,请避免在记录选定公式中使用公式(不管是 Crystal 语法还是 Basic 语法)。而应该用等效的 SQL 表达式字段替换原公式,然后将 SQL 表达式字段合并到记录选定公式中。这样做将大大提高您的记录选定被下推到服务器的机会。

另外,应避免对公式字段进行排序、分组或总计(不管是 Crystal 语法还是 Basic 语法)。而应该用等效的 SQL 表达式字段替换原公式字段,然后在 SQL 表达式字段上进行排序、分组或总计。这样做也将大大提高在服务器上执行处理的机会。

最后,如果数据库支持 Case 逻辑,并且报表需要摘要 If-Then-Else公式计算,请用 SQL 表达式字段替换该公式。在此类情况下,SQL 表达式字段使 Crystal Reports 可以在服务器上执行报表的分组。有关更多信息,请参阅 第20 页上的 “将 SQL 表达式用于 Case 逻辑”。

128Crystal Reports 用户指南

相关主题

?

?

?

?有关 SQL 的介绍,请参阅 第436 页上的 “什么是 SQL?”和第440 页上的 “SQL 语言”。有关创建 SQL 表达式字段的指导信息,请参阅 第84 页上的 “SQL表达式字段”。有关增强记录选定公式的更多提示,请参阅 第12 页上的 “使用增强的记录选定公式”。有关常规记录选定过程,请参阅 第131 页上的 “记录选定”。

8.6改进分组、排序和总计

8.6.1在服务器上执行分组

当通过 Web 从活动数据中进行实时制表时,使用选项“在服务器上执行分组”可减少从数据库服务器传输的数据量。使用此选项后,大部分数据处理工作都卸载到数据库服务器,并且开始时仅读入一个数据子集。仅当您在报表中进行深化时才从数据库返回详细数据。

注意: 服务器端处理仅适用于那些基于 SQL 数据源的经过排序和分组的报表。

X启用服务器端处理

1

2在“文件”菜单中,单击“报表选项”。选择“报表选项”对话框中的“在服务器上执行分组”。

如果没有选择“为提高速度而使用索引或服务器”,则该复选框是不活动的。

提示:当选中“为提高速度而使用索引或服务器”后,您可以迅速从“数据库”菜单启用“在服务器上执行分组”。

3单击“确定”。

8.6.2在服务器上分组的好处 - 示例

以下示例描述了一个典型的制表方案,对于该方案,在服务器上分组可显著减少数据库服务器的不必要的数据传输。

X通过在服务器上分组来减少数据传输

1打开示例报表 Group.rpt(位于 Feature Examples 文件夹)。

查看 Crystal Reports 窗口的右下角,可以注意到有 269 条记录返回给此报表。

注意:只有在“视图”菜单中选中“状态栏”选项时才会看到此数字。

改进分组、排序和总计129

2

3

4在“报表”菜单中,单击“节专家”打开“节专家”。在“节”列表中,选择“详细资料”。在“公用”选项卡中,选择“隐藏(深化完成)”。这会隐藏报表的

“详细资料”节,从而在报表中仅显示组页眉。(在这种情况下,报表按“国家/地区”分组。)

单击“节专家”中的“确定”。“详细资料”记录会从报表中消失。按 F5 键刷新报表数据(或单击工具栏中的“刷新”按钮)。

可以看到,即使从视图中隐藏“详细资料”记录,仍为报表返回了269 条记录。

在“数据库”菜单中,单击“在服务器上执行分组”。

现在可以看到仅有 71 条记录返回给报表。(按“国家/地区”)分组已在服务器上执行完毕,这样,传输给报表的记录就更少。

双击报表对某个国家/地区进行深化。

提示:当可以执行深化时,光标会变成一个放大镜。

Crystal Reports 将根据您的需要检索相应的“详细资料”记录。 例如,如果对澳大利亚进行深化,Crystal Reports 会迅速检索构成该组的七条记录。5678

通过隐藏此报表的“详细资料”记录,您创建了方便用户浏览的汇总报表。每个用户可先定位他或她关注的国家/地区,然后进行深化以检索有价值的详细资料。

此外,通过启用“在服务器上执行分组”选项,您已确保初始处理在数据库服务器上完成。此后,仅为报表传输必要的记录。

有关服务器端处理的更多信息,请参阅 第442 页上的 “服务器端处理”。

8.6.3将 SQL 表达式用于分组、排序和总计

对于使用“在服务器上执行分组”的报表,应避免对公式字段进行排序、分组或总计(不管是 Crystal 语法还是 Basic 语法),而应该用等效的 SQL 表达式字段替换原公式字段,然后再对 SQL 表达式字段排序、分组或总计。这样做将大大提高在服务器上执行处理的机会。

有关使用 SQL 表达式的其他情形的详细信息,请参阅 第17 页上的“适时使用 SQL 表达式”。

130Crystal Reports 用户指南

8.6.4将 SQL 表达式用于 Case 逻辑

如果数据库支持 Case 逻辑,并且报表需要对 If-Then-Else 公式计算进行汇总,请用 SQL 表达式字段替换该公式。在此类情况下,SQL 表达式字段使 Crystal Reports 可以在服务器上执行报表的分组。

例如,假设您正在从支持 Case 逻辑的 MS SQL Server 7 数据库中制作报表。您需要在报表中包含一个 If-Then-Else 计算,并且对报表中每个组的计算进行汇总。通过使用如下形式的 SQL 表达式字段执行计算,您就利用了数据库的能力来处理 Case 逻辑:

CASE DatabaseTable."DatabaseField"

WHEN 'SpecifiedValue' THEN Calculation1

ELSE Calculation2

END

如果记录的 DatabaseField 值等于 SpecifiedValue 值,则执行Calculation1;对于所有其他记录则执行 Calculation2。通过包含 SQL 表达式字段,您利用了数据库服务器的能力来处理 Case 逻辑。甚至当您在报表的其他地方对该 SQL 表达式字段进行汇总时,报表的分组也将随之在服务器上进行。

注意: 此例中的 SQL 语法是 MS SQL Server 7 所特有的。您可能需要参考数据库文档或向系统管理员咨询,以确定与您的数据库对应的语法。

8.6.5在可能的位置插入汇总和运行总计字段

可能的情况下,应避免创建包含全局变量的公式来计算汇总或运行总计。

相反,应通过单击“插入”菜单然后选择相应的命令(小计、总计和汇总)来创建汇总。通过打开“字段资源管理器”,右击“运行总计字段”,然后从快捷菜单中选择“新建”来创建运行总计字段。

有关对数据进行汇总的一般细节,请参阅 第141 页上的 “排序、分组及总计”和 第172 页上的 “运行总计”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

第9章 记录选定

9.1选择记录

当选定一个要在报表中出现的字段时,根据默认,活动表中每个记录的字段值都将打印。在许多情况下,您可能不想包括所有值,而只想包括这些值的子集。例如,可能只想包括:

?仅特定客户组的记录。

?数据库记录总数中特定帐号范围的记录。

?仅具体日期范围内的记录的值。

9.1.0.1 选择记录的选项

Crystal Reports 包括非常完善的公式语言,可以用来指定几乎各种类型的记录选定。但是,对于公式语言所提供的记录选定的灵活性,您未必总是需要。“选择专家”便是针对这种情况设计的。

?

?可以用如下两种方式之一选择记录: 第2 页上的 “使用“选择专家”” 第3 页上的 “使用公式”

一旦熟悉了“选择专家”和公式,就可以使用记录选定技术来改进报表的性能。有关更多的性能提示和高级记录选定策略,请参阅 第122 页上的 “使用增强的记录选定公式”。

9.1.0.2 确定要使用哪些字段

选择记录时,报表的基础只是那些满足所设置的某些条件的记录。想要在完成的报表中包括何种信息为设定这些条件的出发点。

例如,假定想让一个报表只显示加利福尼亚州 (California) 的数据。关键的问题在于找到标识那些来自加利福尼亚州的记录的最佳方法。?如果报表中所用的表有一个“省”或“地区”字段,则可以在请求中

指定程序只使用“省”字段中的值等于加利福尼亚州的记录(“地区”字段等于 CA)。

?如果表中没有“省”字段,但您仍想只在报表中包括加利福尼亚州数

据,可以用其他方法标识这些数据。

132Crystal Reports 用户指南

如果表中有一个“邮政编码”字段,则可以符合加利福尼亚州的邮政编码范围(邮政编码介于 n 和 N 之间)为基础进行记录选定。?如果表有一个“区号”字段,可以加利福尼亚州区号为基础进行记

录选定(区号为 x、y、...z)。?

?

?注意: 如果区号存储在“电话号码”字段中,您将无法以“区号”为基础使用“选择专家”进行同样的记录选定。您必须用公式语言创建记录选定公式,析取电话号码的区号部分,然后以此为基础进行记录选定。按照常规,如果进行记录选定时以若干个字段为基础(如本示例所

示),则应选择索引字段,而不是非索引字段,以获得更高的性能。

9.1.1使用“选择专家”

使用“选择专家”可以方便地指定想在报表中包含的记录。使用“选择专家”时,选择想要应用选定条件的字段,然后指定那些条件。?

?

?可以用“选择专家”设置简单的记录选定请求。例如:亚利桑那州 (Arizona) 的客户。第一季度的定单。销售额超过 $10,000。

也可用“选择专家”设置一些复杂的请求:

名字以“A”、“M”或“S”开头的客户。

加利福尼亚州或佛罗里达州在七月份订购产品的客户。?

?

这些都是范围限制请求。由一个或多个常量定义该范围。程序将每个记录中字段的值与常量进行比较,拒绝那些值在范围之外的记录。该报表被限制为范围内的值。无须对公式语言有任何预备知识便可设置所有这些类型的记录选定请求。

注意: “选择专家”可以用来设置记录选定请求和组选定请求。当选择了组名称或摘要字段时,程序便知道所设置的选定准则将用于组选定。在其他所有情况下,程序知道您正在设置记录选定。

X使用“选择专家”设置记录选定

1在“专家工具”工具栏上,单击“选择专家”

选择记录133

出现“选择专家”对话框。

2

3注意:如果事先没有突出显示报表中的字段而单击“选择专家”按钮,则会出现“选择字段”对话框。突出显示想让记录选定以此为基础的字段,然后单击“确定”。出现“选择专家”。使用下拉列表输入指明字段的选定准则。完成时,单击“确定”。

提示:要以多个字段作为记录选定的基础,单击“新建”选项卡。从“选择字段”对话框中选择下一个字段。

根据您的规定生成了一个选定公式,将报表限制为包含所指明的记录。注意:要查看选定公式,单击“显示公式”按钮。“选择专家”将展开以显示公式。您可以在出现的区域中修改公式,也可以单击“公式编辑器”按钮,在“公式编辑器”中修改公式。

9.1.2使用公式

X使用公式设置记录选定

1

2在“报表”菜单上,指向“选择公式”,然后单击“记录”。在“记录选定公式编辑器”中,通过键入组件或从组件树中选择组件

来输入公式。

注意:得出的公式必须是布尔值;也就是说,它必须返回一个“真”或“假”值。

单击“检查”识别出公式中的任何错误。

修复“公式检查器”识别出的任何语法错误。

当公式的正确语法正确时,单击“保存”。345

相关主题

?

?

?有关示例记录选定模板和组选定模板,请参阅 第5 页上的 “使用公式模板”。有关创建公式的完整说明,请参阅 第356 页上的 “使用公式”。有关高级记录选定策略和性能提示,请参阅 第122 页上的 “使用

增强的记录选定公式”

134Crystal Reports 用户指南

9.1.3“选择专家”和“公式编辑器”的相互作用

“选择专家”和“记录选定公式编辑器”/“组选定公式编辑器”是相互作用的。也就是说,通过“选择专家”输入记录选定准则会自动生成一个记录选定公式,该公式可被审阅和修改。同样,记录选定公式以及对现有记录选定公式的修改在“选择专家”中自动更新选定条件。

由于这种交互性,可以共同使用这两种工具作为学习公式语言的教程。X查看选择专家公式

1

2

3右击想要查看记录选定的字段。单击“选择专家”。单击“显示公式”按钮。

“选择专家”展开,将可以审阅由程序根据选定条件生成的公式。4

5

6

7审阅完毕后,单击“隐藏公式”按钮。使用“选择专家”更改选定公式。再次单击“显示公式”按钮审阅更新过的公式。若要对公式进行更改,请单击展开的“选择专家”中的“公式编辑器”

按钮,并使用公式工作室中的工具对公式进行更改。

注意: 对于不符合“选择专家”中固定条件的选定公式组件,将不进行转换。例如,如果记录选定公式的一部分析取客户号码中的最后四个字符,则执行析取的公式代码部分将不会转换成“选择专家”

选定条件。

使用公式模板135

9.2使用公式模板

9.2.1记录选定公式模板

将下面的示例公式用作模板,可以帮助您使用公式工作室来创建您自己的选择公式。这些例子表明您可以 进行的不同选择,但不一定是最好的。

9.2.1.1 用字符串选择记录

{file.FIELD} startswith "C"

选择其 {file.FIELD} 字段值以字符“C”开始的记录(包括像CyclePath、Corp.和 Cyclist抯 Trail Co. 这样的值;不包括像Bob抯 Bikes Ltd. 和 Feel Great Bikes, Inc. 这样的值)。not ({file.FIELD} startswith "C")

选择其 {file.FIELD} 字段值不以字符“C”开始的记录(包括像Bob抯 Bikes Ltd. 和 Feel Great Bikes, Inc. 这样的值;不包括像 CyclePath、Corp.和 Cyclist抯 Trail Co. 这样的值)。"999" in {file.FIELD}[3 to 5]

选择其 {file.FIELD} 字段中第 3 位到第 5 位数字为“999”的记录(包括像 10999、70999 和 00999 这样的值;不包括像99901 和 19990 这样的值)。

"Cycle" in {file.FIELD}

选择其 {file.FIELD} 字段值包含字符串“Cycle”的记录(包括像 CyclePath Corp. 和 CycleSporin, Inc.这样的值;不包括像Cyclist抯 Trail Co. 和 Feel Great Bikes, Inc. 这样的值)。

9.2.1.2 使用数字选择记录

单个值

{file.FIELD} > 99999

选择其 {文件.字段} 字段值大于 99999 的记录。

{file.FIELD} < 99999

选择其 {文件.字段} 字段值小于 99999 的记录

值范围

{file.FIELD} > 11111 and {file.FIELD} < 99999

选择其 {文件.字段} 字段中的值大于 11111 但小于 99999(值范围中不包括 11111 和 99999)的那些记录。

{file.FIELD} >= 11111 and {file.FIELD} <= 99999

选择其 {文件.字段} 字段值大于 11111 但小于 99999(值范围中包括 11111 和 99999)的那些记录。

水晶报表Crystal Reports培训教程 35_水晶报表教程

136Crystal Reports 用户指南

9.2.1.3 使用日期选择记录

Month、Day 和 Year 函数都可以在类似于下列示例中的情况下使用:Year ({file.DATE}) < 1999

选择 {文件.日期} 字段中年份早于 1999 的记录。

Year ({file.DATE}) > 1992 and Year ({file.DATE}) < 1996

选择 {文件.日期} 字段中年份介于 1992 和 1996(不包括 1992和 1996)之间的记录。

Year({file.DATE}) >= 1992 and Year({file.DATE}) <= 1996

选择 {文件.日期} 字段中年份介于 1992 和 1996(包括 1992 和1996)之间的记录。

Month({file.DATE}) in 1 to 4

选择 {文件.日期} 字段中月份为一年中前 4 个月的记录(包括一月、二月、三月和四月)。

Month({file.DATE}) in [1,4]

选择 {文件.日期} 字段中月份为一年中的第一个月和第四个月的记录(包括一月和四月,不包括二月和三月)。

9.2.1.4 使用预置日期范围选择记录

可以用预置日期范围创建类似下列公式的选定公式:

{file.DATE} in LastFullMonth

选择 {文件.日期} 字段中日期在上个月整月范围内的记录。(如果本月是五月,则选择具有四月日期的所有记录)。

not({file.DATE} in LastFullMonth)

选择 {文件.日期} 字段日期在上个月整月范围以外的记录(如果本月是五月,则选择除四月日期以外的所有记录)。

9.2.1.5 使用日期/数字/字符组合选择记录

这些公式对上述类别的公式进行简单地“混合与匹配”。

"C" in {file.FIELD}[1] and Month({file.DATE}) in [1,4]

选择其 {file.FIELD} 字段中的值以“C”开始并且月份是一月或四月的那些记录。例如,如果将这种公式用于订单数据库,则可以要求报表显示名字以“C”开始并且在一月或四月发出订单的所有客户。

"AOK" in {file.HISTORY}[3 to 5] and {file.OPENCRED} >= 5000

选择 {file.HISTORY} 字段中第 3、第 4、第 5 个字符显示为“AOK”并且 {file.OPENCRED} 字段(可用贷方金额)至少为 5000的那些记录。

这些模板可以原样使用(使用您自己的数据),也可以组合使用以创建复杂的公式。

将记录选定下推到数据库服务器137

9.3将记录选定下推到数据库服务器

Crystal Reports 提供的用于 SQL 数据源的驱动程序允许将记录选定“下推到”数据库服务器。在基于 SQL 数据源的报表中指定记录选定公式时,Crystal Reports 分析该公式,从该公式生成 SQL 查询,并将SQL 查询传递到数据库服务器。然后分两个阶段执行记录选定:?记录选定的第一阶段是数据库服务器处理 SQL 查询,然后将一组记

录返回给 Crystal Reports。

?在第二阶段,针对从数据库服务器返回的记录集,Crystal Reports

在本地进一步计算记录选定公式。

因为数据库服务器通常比工作站快,所以在第一阶段指定可以由服务器处理的记录选定公式比较有利。这样做将会最大限度地降低第二阶段在本地计算机上执行的记录选定。通常将此过程称为“将记录选定下推到数据库服务器”。可以将以下类型的记录选定下推到服务器:

?索引和非索引字段上的选定(索引字段响应较快)。

?带有 AND 和 OR 子句的 SQL 查询。

?为记录选定执行公式计算的 SQL 表达式字段。(有关 SQL 服务器所

支持的 SQL 表达式的类型,请参见随服务器提供的文档)。

有关将记录选定公式下推到数据库服务器的完整详细资料,请参阅第122 页上的 “使用增强的记录选定公式”。

9.4记录选定公式疑难解答

要对选定公式进行疑难解答,开始之前首先应确保报表中有选定公式中引用的所有字段。然后删除选定公式,并在重新生成时一步步进行测试。X对记录选定公式进行疑难解答

1

2

3

4在纸面上写下记录选定公式。使用此书面副本可以帮助您每次一步地重建选定公式。通过删除公式工作室中“记录选定公式编辑器”/“组选定公式编辑器”中的公式,来从报表中删除记录选定公式。在公式工作室中完成操作之后,单击“关闭”。确保记录选定公式(选择器)中所有引用的字段在报表中都实际存在

并且不是隐藏的。

例如,如果其中一个选择器是:

{customer.POSTAL CODE} > "80000"

138Crystal Reports 用户指南

但是在报表中未使用 {客户.邮政编码} 字段(正如在销售报表中使用邮政编码定义地域,但未在报表数据中包括邮政编码一样),则将{客户.邮政编码} 字段插入报表中。

或者,如果选定公式中所引用的一个字段在报表中存在,但是为隐藏的,则为该字段取消选择“格式编辑器”中的“取消”选项以便取消隐藏。

5打印该报表,并检验选定公式中所引用的那些字段中的数据的打印结

果是否令人满意。确保所有数据都已打印出来。例如,如果数据库中有 x 个总计记录,则每个引用的字段应有 x 条打印记录。这将建立一个基线,可以它为基准对比打印结果与选定公式。

当确信未使用选定公式而获得了满意的结果时,可以输入只使用其中一个选择器的选定公式。

例如,要使用下列公式作为最后的选定公式:

{customer.POSTAL CODE} > "80000" and {customer.CONTACT LAST

NAME}[1] = "C" and {customer.LAST YEAR'S SALES} >= 50006

此公式将选择所有邮政编码大于 80000、{客户.联系人姓} 字段中的值以“C”开始以及 {客户.去年销售额} 字段中的值大于或等于 5000的那些记录。

作为开始,可使用下列选定公式作为第一个测试选定公式:

{customer.POSTAL CODE} > "80000"

打印报表并对只有一个选择器激活时打印的数据进行评估。{客户.邮政编码} 字段是否只显示大于 80000 的 ZIP 代码?

?如果是,则可以知道选定公式的本部分使用正常。

?若它不是,请解决选定公式中该部分的问题。

7一旦激活了一个选择器时选定公式能正常使用,则再增加一个选择

器。例如,新的选定公式可以为如下所示:

{客户.邮政编码} > "80000" and {客户.联系人姓}[1] = "C"

8预览报表并对有两个选择器激活时打印的数据进行计算。对 {客户.

联系人姓} 字段中的数据进行评估(因为您已在上一步中评估了 {客户.邮政编码} 的值)。

{客户.联系人姓} 字段是否只显示以字母“C”开始的文本字符串??如果是,则证明选定公式中的本部分工作正常。

?若它不是,请解决选定公式中该部分的问题。

一旦在激活了两个选择器时选定公式正常工作,则添加第三个选择器,然后是第四个,以此类推,直到对选定公式中的每个选择器都进行了测试为止。9

记录选定公式疑难解答139

9.4.1修正未生成数据的选定

可能会遇到这样的情况,您创建了一个记录选定公式,但在打印报表时,只打印页眉和页脚信息,未出现任何详细信息。问题在于选定公式拒绝所有记录。出现此问题的原因通常是创建选定公式时发生了错误。?

?

?选定公式中出现问题的原因可能有:请参阅 第9 页上的 “修正大写/小写不一致”。请参阅 第10 页上的 “选定公式中出现不需要的空格”。请参阅 第10 页上的 “在选定公式中使用 If 语句”。

9.4.1.1 修正大写/小写不一致

记录选定公式是区分大小写的。即“Bob”仅与“Bob”匹配。它不匹配“bob”、“BOB”、“BoB”、“bOB”、“boB”或“BOb”。因此,如果将选定公式设置为只包括 {客户.联系人名} 字段值为“BOB”的那些记录,但 {客户.联系人名} 字段中的所有项都是大小写混合的(例如“Bob”),则该选定公式将找不到匹配项,因而不输出报表的任何细节。

解决该问题的方法如下,在选定公式中使用 UpperCase (str) 或LowerCase (str) 函数,以便在程序开始选定之前将字段数据转换为大小写一致的格式。例如,如果使用如下公式:

{customer.CONTACT FIRST NAME} = "BOB"

可以将公式更改为:

UpperCase({customer.CONTACT FIRST NAME}) = "BOB"

第二个公式首先将 {customer.CONTACT FIRST NAME} 字段的值转换为大写字符,然后再检查该字段中的结果值是否等于“BOB”。使用此公式,则三个字母“b”、“o”和“b”的任何实例均为匹配项(与大小写无关),因为所有字母都将转换成大写。

可以用相似的方式使用 LowerCase 函数来与“bob”相匹配。

仔细检查选定公式的大小写,确保尝试匹配的任何文本都有正确的大小写。如果没有把握,请使用 UpperCase(或 LowerCase)函数确保一致性以及正确的匹配。

另一个执行类似功能的公式如下:

"BOB" in UpperCase({customer.CONTACT FIRST NAME})

140Crystal Reports 用户指南

9.4.1.2 选定公式中出现不需要的空格

空格是一种字符,当您在记录选定公式的搜索键中包括空格时,公式在所选字段中查找完全匹配的记录,包括空格和所有内容。例如,下列公式:"Mr ." in {customer.TITLE}

结果将不会找到任何与地址形式“Mr.”相匹配的内容,因为在搜索键的字母“r”和句点之间有一个多余的空格。与此类似,“Ph. D”D”不与“Ph.D”匹配。

仔细检查选定公式,确保选定公式中的空格数与尝试匹配的字段中的空格数是一致的。

9.4.1.3 在选定公式中使用 If 语句

当创建包含 If 语句的记录选定公式时,应始终包含 Else 关键字;否则,可能不返回任何记录或者返回意外的记录。例如,类似 If {参数字段} = "less than 100" then {字段} < 100 的记录选定公式的求值结果为“假”,并且不返回任何记录。若要更正此问题,请用 ElseTrue 完成该公式。

水晶报表Crystal Reports培训教程 35_水晶报表教程

第10章 排序、分组及总计10.1数据排序

排序意味着以某种有利于查找及计算数据的顺序放置数据。

当第一次在报表中插入数据库字段时,字段中显示数据的顺序是它们原来输入数据库时的顺序。在这种报表中查找信息是很困难的。当数据以逻辑格式排序时,查看或查找信息就容易多了。例如,您或许希望客户列表按名称或国家/地区的字母顺序排序。

10.1.1理解排序选项

?

?当排序时,程序会让您定义以下两项:希望排序基于的字段(排序字段)。排序方向。

10.1.1.1 排序字段

排序字段是决定报表中数据显示顺序的字段。几乎任何字段都可用作排序字段,包括公式字段。字段的数据类型决定了该字段中数据的排序方法。

注意: 您不能够将备注字段或 BLOB 字段排序。字段类型

单字符字符串字段排序顺序空格

标点

数字

大写字母

小写字母

两个字母

三个字母

四个字母,等等

例如:

?“123”在“124”之前

?“”(空白)在“a”之前

?“aa”在“aaa”之前多字符字符串字段

142Crystal Reports 用户指南

字段类型

货币字段

数字字段

日期字段

DateTime 字段

时间字段

布尔值比较字段

空值排序顺序数值顺序数值顺序时序顺序时序顺序按时间排序的相同日期值时序顺序“假”值 (0)“真”值 (1)空值

非空值

注意: 如果在数据库服务器上执行排序和分组,则当使用 Unicode或 UTF-8 数据时,排序顺序可能会有所不同。所应用的排序取决于数据源的原有规则。在某些情况下,Unicode 数据按其二进制值排序,但也可以按照特定的区域设置排序。有关 Unicode 数据字段如何排序的详细信息,请参阅数据源的文档。

10.1.1.2 排序方向

?

?方向指排序后各个值显示的顺序。升序升序就是从最小到最大(1 到 9,A 到 Z,“假”到“真”)。程序基于所选择的排序字段中的值将记录按升序排序。降序

降序就是从最大到最小(9 到 1,Z 到 A,“真”到“假”)。程序基于所选择的排序字段中的值将记录按降序排序。

10.1.2单一或多个字段排序

在单一字段排序中,报表中使用的所有记录基于单一字段中的值排序。按库存号将库存报表排序或按客户号将客户列表排序便是单一字段排序的例子。

在多个字段排序中,Report Designer 首先将记录基于所选的第一个字段中的值排序,将它们以指定的升序或降序排列。当两个或多个的记录在第一个排序字段中有相同的字段值时,程序便将这些记录基于第二个排序字段排序。

数据排序143

例如,如果您选择先以 {客户.国家或地区} 字段排序,再以 {客户.地区} 字段排序,都是按升序排列,则报表显示时国家/地区以字母顺序排列,而各个国家/地区内的地区也以字母顺序排列。任何其他字段,如各地的邮政编码,都会保持不变。

可以使用相同的过程来创建单一字段或多个字段排序。

X将数据排序

1在“报表”菜单上,单击“记录排序专家”。

将出现“记录排序专家”。

2

3突出显示“可用字段”中的待排序字段。单击 > 箭头。

将所选字段添加到“排序字段”列表中。

指定排序方向。

如果以多个字段排序,则突出显示第二个排序字段并把它添加到“排序字段”列表中。

如果您想改变“排序字段”列表中的字段顺序,突出显示您想移动的字段,并单击“箭头”按钮将其向上或向下移动。

提示:字段在“排序字段”框中的顺序便是将对数据排序的顺序。在将每个字段添加到“排序字段”列表中时,请指定排序方向。完成时,单击“确定”。

记录基于

“排序字段”列表中的值进行排序。45678

144Crystal Reports 用户指南

10.2将数据分组

分组数据是指将其排序并按一定意义分组的数据。例如,在客户列表中,一个组可能由居住在同一“邮政编码”或同一“地区”的所有客户组成。在销售报表中,一个组可能包括相同客户的全部订单,或某特定销售代表的全部订单。

10.2.0.1 分组和排序方向

?

?

?

?数据分组有四种可用的排序和分组方向选项。方向指值显示的顺序。升序升序就是从最小到最大(1 到 9,A 到 Z,“假”到“真”)。每当值改变时,程序便会将记录按升序排列并开始一个新的分组。降序降序就是从最大到最小(9 到 1,Z 到 A,“真”到“假”)。每当值改变时,程序便会将记录按降序排列并开始一个新的分组。指定顺序指定顺序是指用户定义的顺序。程序将每个记录放置于所指定的自定义组中,每个组中的记录根据您的说明保持原有顺序或以升序或降序排列。请参阅 第5 页上的 “创建自定义组”。初始

初始顺序是指数据最初在数据库中保存的顺序。程序保持记录出现在起始数据库表中的顺序,并且每当所选分组字段的值改变时开始一个新的分组。

也可以选择基于条件的组的排序顺序。有关更多信息,请参阅 第6页上的 “有条件地对组进行排序”。

X将数据分组

1在“插入”菜单上,单击“组”。

出现

“插入组”对话框。

将数据分组145

2

3从顶端下拉列表中选择字段,数据将按照它来分组。从第二个下拉列表中选择排序方向。

注意:如果要为组的排序顺序使用公式,请参阅 第6 页上的 “有条件地对组进行排序”。

如果想在组页眉显示不同的值,单击“选项”选项卡。

注意:根据默认,报表组页眉将显示字段值,该字段是您正在其上进行分组的字段。

选取“自定义组名字段”复选框并选择一个新的组名。

例如,如果按照 {客户.客户 ID} 分组,组的每一次更改,您都会看到相应的客户 ID。如果要显示另一个值(如客户 ID 和客户姓名),请通过选择另一个数据字段或创建公式来自定义组名字段。提示:若要隐藏组页眉名,右键单击组页眉,选取“格式字段”并单击“格式编辑器”的“公用”选项卡上的“取消”。

单击“确定”。

如果各个组中的记录未排序,则需要将各组内的记录排序。请参阅第7 页上的 “将组内记录排序”。456

相关主题

?

? 第11 页上的 “按间隔将数据分组” 第27 页上的 “创建组页眉”

10.2.1创建自定义组

通常数据基于报表中某字段的值排序。然而,有时可能不希望基于报表中字段之一的值分组。例如:

?想将分组基于的字段不存在。

例如,报表可能包含“城市”字段和“省”字段,但尽管希望按国家/地区分组,却没有“国家/地区”字段。

?字段存在,但不希望以该字段中的值分组。

例如,在您的报表中或许有包含特定颜色名称(“摇石绿”、“天空蓝”、“宝石绿”、“海军蓝”等)的“颜色”字段,但是您希望每种颜色的各种色调显示成同一组(“绿”、“蓝”、“红”等)。此种情况下,可以创建自定义组或手工分配各组的记录。

?组存在,但希望为每组选择指定的值或值的范围。

例如,您或许希望某组包含总销售额小于某值的记录,另一组包含总销售额大于某值的记录,第三组包含总销售额在二值之间的记录。此种情况下,可以使用选定功能的相同范围来生成组,该功能对于生成记录选定查询可用。

水晶报表Crystal Reports培训教程 35_水晶报表教程

146Crystal Reports 用户指南

指定顺序分组提供对这些自定义排序和分组任务的解决方案。它使您既可以创建将出现在报表上的自定义组,又可以创建每个组将包含的记录。唯一的限制是每个记录只可分配给一个组。

若要得到创建自定义组以按照去年商业额排列客户的教程,请参阅第11 页上的 “按间隔将数据分组”。

X创建自定义组

1在“插入”菜单上,单击“组”。

出现“插入组”对话框。

从顶端下拉列表中选择字段,数据将按照它来分组。

从第二个下拉列表选择“按指定顺序”作为排序选项。

在“指定顺序”选项卡上,将组名输入到“命名组”字段。

单击“新建”。

在“定义命名组”对话框中,使用下拉列表选择要作为组部分的数据。如果需要,单击<“新建”>选项卡以将更多选择条件添加到指定组中。

单击“确定”。

单击“新建”以根据需要创建更多的自定义组。

单击“其它”选项卡指定如何组织非所定义的组的部分的数据。单击“确定”。234567891011

10.2.2有条件地对组进行排序

尽管通常在创建组时为报表中的组选择排序顺序就已经足够了,但有时您可能想要用户选择他们自己的组排序顺序。

例如,如果按发票日期对销售报表进行分组,您可能想要用户选择是按从最早发票日期到最近发票日期的顺序(升序)查看数据,还是按从最近发票日期到最早发票日期的顺序(降序)查看数据。

若要为此报表创建条件性组排序顺序,您可以创建一个用于提示用户选择的新参数,然后将用户选择的内容传递给条件性组排序公式。X有条件地对组进行排序

1打开或创建想要有条件地进行排序的报表。

在本节中提到的示例情况中,打开或创建包含发票信息的报表。在字段资源管理器中,选择“参数字段”,然后单击“新建”

。2

将数据分组147

3创建一个字符串参数,该参数包含您想要用户看到的排序选项。

对于此示例,请创建一个名为“排序顺序”的参数,该参数包含两个值:“升序”和“降序”。

提示:有关如何创建参数的信息,请参阅 第381 页上的 “创建带有静态提示的参数”。

单击“确定”保存参数。

在“插入”菜单上,单击“组”。

在“插入组”对话框中,选择想要依据其进行分组的字段。

对于此示例,请选择发票日期字段。

选择“使用公式作为组排序顺序”,然后单击旁边的“条件公式”按钮。注意:如果选择“按指定顺序”作为组排序顺序,则此选项不可用。在公式工作室中,输入条件公式文本。

对于此示例,请输入以下文本:

If {?排序顺序} = 疑 蛴 then crAscendingOrder else

crDescendingOrder45678

9

10

11单击“保存并关闭”返回到报表。单击“确定”以保存组。在提示您选择排序顺序时,选择所需的选项,然后单击“确定”。

报表将会出现,根据您在“插入组”对话框中选择的字段分组,并按您在参数提示中所选的顺序排序。若要选择其他排序顺序,请单击“刷新”按钮并选择“提示新参数值”。报表中的组将会重新排序,以便符合您选择的新顺序选项。

10.2.3将组内记录排序

一旦将数据分组,可以很容易的将组内的记录排序,以便于进一步组织信息。

X将组内排列记录

1将数据分组后,在“报表”菜单上,单击 “记录排序专家”

148Crystal Reports 用户指南

将出现“记录排序专家”。注意:

以“组”开头的排序字段,说明当数据分组时,排序已经自动完成2突出显示组内记录排序基于的字段,并单击 > 箭头将其加入“排序

字段”列表。

提示:“排序字段”框中字段的顺序便是将数据排序的顺序。

指定排序方向。

完成时,单击“确定”。34

10.2.4组选定

当将数据分组或汇总时,根据默认将包含报表中的所有组。但是,有时可能不想将所有组都包含进来。例如:

?可能只想查看具有某些组名的组,或汇总值满足某个条件的组。?可能只想查看具有最大或最小汇总值的组。

?

?可通过两种不同方式选择出现在报表中的组:请参阅 第8 页上的 “使用“选择专家””。请参阅 第9 页上的 “使用选定公式”。

注意: 若要更快得到结果,请在创建组前通过记录选定限制记录。请参阅 第131 页上的 “选择记录”。

10.2.4.1 使用“选择专家”

“选择专家”可用来以与选择单个记录相同的方式选择记录组。

当设置组选定条件时,应将条件基于组名字段或汇总字段,而不是象在记录选定时那样将条件基于标准字段。

?如果只将数据分组而未汇总,则只能基于组名字段设置组选定。例

如,可能只想选择“地区”为“马萨诸塞”的组:

GroupName ({Customer.REGION}) = "MA"

将数据分组149

?如果已将数据汇总,则可以基于组名字段或汇总字段创建组选定。例如:

Sum({客户.去年销售额}, {客户.地区}) > 10000

注意: “选择专家”可用来设置记录选定或组选定请求。当选择组名字段或汇总字段时,程序便知道所设置的选择条件用来进行组选定。在其他所有情况下,程序知道您正在设置记录选定。

X用“选择专家”设置组选定

1右击想要将组选定基于的汇总字段,并从快捷菜单中选择“选择专

。家”

出现“选择专家”对话框。

注意:如果在单击“选择专家”按钮前没有先突出显示报表中的汇总

字段,则

“选择字段”对话框便会出现。23使用下拉列表输入指定字段的选择条件。

若要将组选定基于不止一个字段,请单击“新建”选项卡并从“选择

字段”对话框选择下一个字段。

注意:如果还没有预览报表或刷新数据,则报表将未保存任何数据。没有数据,程序不能计算组值;因此,当单击右边的下拉列表上的箭头时,没有值出现。此种情况下,将必须键入希望的值。如果希望使用真值,则需要先预览报表。这会计算出可使用的实际汇总值。完成后,单击“选择专家”中的“确定”以返回报表。4

10.2.4.2 使用选定公式

通过“组选定公式编辑器”可以使用组字段、组名字段和其它公式来生成组选定请求。与记录选定公式一样,唯一的限制是所创建的公式必须是布尔值;也就是说,它必须返回“真”或“假”值。

X创建记录或组选定公式

1

2在“报表”菜单上,指向“选定公式”。单击“记录”以创建记录选定公式。

- 或 -

单击“组”以创建组选定公式。

公式工作室出现。

150Crystal Reports 用户指南

3在“组选定公式编辑器”中输入选定公式。

注意:得出的公式必须是布尔值;也就是说,它必须返回一个“真”或“假”值。

4 单击“检查”识别出公式中的任何错误。

5修复“公式检查器”识别出的任何语法错误。

6当公式的语法正确时,单击“保存”。

当程序运行报表时,它只会包含所指定的记录或记录组。

10.2.4.3 组选定公式疑难解答

在某些情况下,尽管有与选择条件相匹配的值,但使用组选定公式时,也不会打印任何值。通常,在下列情况下:

?组选定公式引用另一公式。

?被引用公式计算各组的值占全部组总值的百分比(也就是说,小计占

总计的百分比)。

X更正组选定公式

1使用 Xtreme.mdb 创建包含下列字段的报表:

{客户.客户姓名}

{客户.地区}

{订单.订单 ID}

{订单.订单金额}

对于每份订单,报表显示订购的客户、客户所在地区、订单的 ID 号及订单的金额。

2按照 {客户.地区} 字段分组报表。

3插入一个汇总,它求出每个 {客户.地区} 组的 {订单.订单金额}

字段的和。

程序计算出每一次地区变化时 {订单.订单金额} 字段的和。请参阅第24 页上的 “数据小计”。

4在 {订单.订单金额} 字段上插入总计以查看所有订单的总值。5创建一个名为“百分比”的公式计算每个小计占总计的百分比,来查

看各地区订单的值占全部订单的百分比。

Sum({订单.订单金额}, {客户.地区})

% Sum({订单.订单金额})

6将公式放置在报表的

“组页脚”节中。

水晶报表Crystal Reports培训教程 35_水晶报表教程

将数据分组151

7在组选定公式中引用该公式 (@Percent),此选定公式只选择百分比

(小计占总计的)小于 5% 的组,以便找出单独的销售额贡献小于总销售额的 5% 的地区:

{@Percent} < 5

当单击“选取”时,您会得到下列错误消息:

由于该公式必须稍后求值,所以现在无法使用。

8输入公式本身(名为 @Percent 的公式),而不是使用公式名(本例是

@Percent)。因此,不使用组选定公式:

{@Percent} < 5

使用组选定公式:

Sum({订单.订单金额}, {客户.地区})

% Sum({订单.订单金额}) < 5

现在当您打印时,只打印销售额小于 5% 的地区。

10.2.5按间隔将数据分组

可能希望按间隔将数据分组。一些可以创建的间隔分组有年龄组、时间段和销售额分类。在本示例中,可以根据客户去年的商业额将其排序

本示例使用指定顺序分组。这种分组使您能够指定包含在每个组的记录。您只需定义需要的间隔,其它的事情由程序来负责。

X按间隔将数据分组

1使用示例数据 Xtreme.mdb 创建报表,并将以下字段从左至右置于

“详细资料”节中:

{客户.客户姓名}

{客户.地区}

{客户.邮政编码}

{客户.国家或地区}

{客户.去年销售额}

2

3

4在“插入”菜单上,单击“组”。您想设置基于去年的销售额的间隔值,所以从“插入组”对话框的下拉列表选择“去年的销售额”作为排序和分组基于的字段。从第二个下拉列表选择“按指定顺序”

152Crystal Reports 用户指南

“指定顺序”选项卡出现在“插入组”对话框中。

5单击“新建”按钮。

“定义命名组”对话框出现。

6在“组名”字段中键入“小于 $10,000”。

这就是将作为该组的“组名”字段值出现的名称。

因为第一个组是要只包含“去年的销售额”数字小于 $10,000 的记录,所以设置字段以使条件显示为:

小于 100007

8

9单击“确定”以返回“指定顺序”选项卡。单击“新建”。

出现“定义命名组”对话框。

设置包含值在 $10,000 到 $25,000 范围内的第二个组。

?在“组名”字段中键入“$10,000 到 $25,000”。

?设置第一个字段以使条件设为:介于。

?指定值的范围:

?在顶端字段键入“10000”。

?在底端字段键入“25000”

。10

将数据分组153

11

12单击“确定”以返回“指定顺序”选项卡。单击“新建”。

出现“定义命名组”对话框。

创建最后一个组,包含大于 $25,000 的所有值。

?在“组名”字段中键入“$25,000 以上”。

?设置第一个字段以使条件设为:大于。

?键入“25000”。

单击“确定”以返回“指定顺序”选项卡。

单击“确定”。

报表以指定顺序按间隔分组。131415

10.2.6根据公司名称的第一个字母分组

您或许想基于公司名称的第一个字母将数据分组。例如,在客户列表中,您希望所有“A”客户在一组,所有“B”客户在一组,依次类推。实现这一点需要使用公式。

如果您并不熟悉公式,那也不要紧。这些文本向您展示需要什么公式以及如何输入。

您可以在 第356 页上的 “公式概述”中学到更多的有关创建和编辑公式的内容。

您将创建提取每个客户名称的第一个字母的公式。接着将使用该公式字段作为分组和排序基于的字段将数据分组。程序会基于每个客户名称的第一个字母将数据排序,并且每当该字母改变时开始一个新的组。X根据公司名称的第一个字母将数据分组

1使用示例数据 Xtreme.mdb 创建报表,并将以下字段从左至右置于

“详细资料”节中:

{客户.客户姓名}

{客户.地区}

{客户.邮政编码}

{客户.国家或地区}

2在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”对话框。

选择“公式字段”并单击“新建”。

在“公式名称”对话框中,输入想标识公式的名称,例如“第一个字母”,然后单击“确定”。

公式工作室将出现,

“公式编辑器”处于活动状态。34

154Crystal Reports 用户指南

5

6在“公式”文本框中键入下列公式{客户.客户姓名}[1]单击公式工作室上的“关闭”按钮。

返回报表

在“插入”菜单上,单击“组”。

出现“插入组”对话框。

从第一个下拉列表中选择希望数据分组基于的公式字段。

从第二个下拉列表中选择排序方向。

单击“确定”。

返回报表,并且数据根据所指定的公式字段进行分组。数据基于客户名称的第一个字母分组。公式为每个组提供了生动的页眉。

有关生动的页眉的更多信息,请参阅 第28 页上的 “生动的页眉”。78910相关主题

?

?

?

? 第 第 第 第356 页上的 “公式概述”4 页上的 “将数据分组”11 页上的 “按间隔将数据分组”27 页上的 “创建组页眉”

10.2.7分层次对数据分组

10.2.7.1 层次分组所需的数据特性

可以将报表中的数据分组,以便显示层次关系。分层次对数据进行分组时,Crystal Reports 将基于两个字段间的关系对信息进行排序。层次关系必须是用于报表的数据中所固有的:

?父字段和子字段的数据类型必须相同,程序才能识别它们之间的关系。?父字段中的数据必须是子字段中数据的子集。

?对于要出现在报表中的顶层层次结构,值必须出现在子数据中,并且

父数据中的对应行必须为空。

?数据中不能有循环逻辑(也就是说,当 B 与 C 相关并且 C 反过来

与 A 相关时,A 不能与 B 相关)

将数据分组155

例如,如果要显示在一个部门中工作的人员的层次关系,您可以按雇员姓名(子字段)对数据进行分组,然后通过使用列出了员工上司的字段(父字段)来指定层次结构。数据库表可能看起来如下例所示。雇员(子项)

Jane

Mina

Gerard

Albert

Thomas

Beth

Teresa

Gareth

Valerie

Gillian

Frances

Ruth

Margaret

Paul

Charles主管(父项)ThomasThomasThomasMinaThomasThomasThomasThomasMinaGillianGillianMinaMargaretMargaret

“雇员”和“主管”字段包含暗示层次关系的重叠数据。共有 15 个唯一的雇员姓名,其中四个姓名同时显示为主管(Mina、Thomas、Gillian 和 Margaret)。3 个雇员是 Mina 的下属,7 个雇员是 Thomas的下属,2 个雇员是 Gillian 的下属,2 个雇员是 Margaret 的下属。

注意: Mina 没有对应的主管。此数据暗示着 Mina 是顶层主管,并且不是此表中任何其他人的下属。

如果依据“雇员”字段来分组 Crystal 报表,则可以进一步对数据排序,以便显示这些雇员和他们的主管之间的层次关系。

10.2.7.2 已分层次进行分组的报表的特性

除了对数据中固有的层次结构的直观呈现外,已分层次进行分组的Crystal 报表还有其他几个特性:

?当您在层次结构中的某一个组上深化时,深化视图还会显示在层次结

构中处于较低级别的记录。

水晶报表Crystal Reports培训教程 35_水晶报表教程

156Crystal Reports 用户指南

?

?

?报表包含一些分层组页脚,它们包含在每个组的层次结构中处于较低级别的记录。可以跨层次结构汇总数据。使用“条件-X-位置”功能可确保您为了显示层次关系而设置的缩进不会影响报表同一节中的其他字段。通过使用 GroupingLevel 和 HierarchyLevel 函数,支持在公式语

言中使用分层级别。

注意: 您不能在公式中使用层次汇总。

X分层次对数据分组

1创建或打开一个报表,该报表包含要分层次进行分组和排序的数据。2

3在“插入”菜单上,单击“组”。在“插入组”对话框中,选择要用作层次结构基础的字段(子字段)。

例如,如果要查看某家公司雇员的层次结构,请选择雇员字段。选择“按升序”。

根据默认,报表组页眉将显示字段值,该字段是您正在其上进行分组的字段。

如果要在组页眉中显示其他值,请单击“选项”选项卡,并选择“自定义组名称字段”复选框。

例如,如果按雇员字段来分组,则每次更改组时您都将看到对应的雇员姓名。如果要显示另一个值(如雇员 ID 来代替雇员姓名),请通过选择另一个数据字段或创建公式来自定义组名字段。

单击“确定”

。456

将数据分组157

所创建的组添加到报表中。

7

8

9

10在“报表”菜单上,单击“层次分组选项”。在“层次选项”对话框的“可用组”列表中,选择要分层次排列的组。选择“分层次对数据排序”复选框。在“父 ID 字段”列表中,选择组织“实例 ID 字段”时想要基于的

字段。

例如,对于雇员层次报表,可以选择列出雇员所属主管的数据字段。注意:“实例 ID 字段”和“父 ID 字段”的数据类型必须相同。例如,如果“实例 ID 字段”存放字符串数据,则“父 ID 字段”也必

须存放字符串数据。

158Crystal Reports 用户指南

11在“组缩进”字段中,输入想让每个子组缩进的量。注意:

您在“组缩进”字段中输入的值将影响与分层组处在同一区域中的所有其他对象。例如,如果报表在与雇员姓名相同的行中包含一个工资字段,那么,当您使用雇员字段来创建分层组时,工资字段也

会被缩进。若要只缩进层次结构记录(而不是其他对象),请将此值保留为 0(零),并使用“条件-X-位置”功能。有关更多信息,请参阅 第19 页上的 “在不影响其他字段的情况下缩进层次结构”。12单击“确定”。

报表数据即分层次分组。

注意:在此示例中,报表的“详细信息”节已隐藏,以便更清晰地显示按层次进行的排序。

报表现在按雇员姓名分组,并经过进一步排序,以便显示主管层次结构。您可以看到,雇员数据没有关联主管数据的 Mina 已被排在列表的顶部。在 Mina 的姓名下方是她的每个下属主管;而其中每个主管下方是其下属雇员的列表。

注意: 某个姓名出现在此报表层次结构中的哪个级别是由其下属雇员的数量确定的。没有下属的那些雇员位于层次结构的最低级别。

将数据分组159

如有需要,现在可以计算整个新层次分组中的汇总字段。在以正常方式插入“小计”、“总计”或“汇总”时,请选择“整个层级结构的总和”选项。有关更多信息,请参阅 第20 页上的 “汇总分组的数据”和第24 页上的 “小计”。

X在不影响其他字段的情况下缩进层次结构

注意: 要使此过程起作用,您必须确保“层次组选项”对话框的“组缩进”字段中的值设置为 0(零)。

1

2

3右击要分层次进行分组的字段,然后选择“大小和位置”。单击 X 位置值字段旁边的“条件公式”按钮。在公式工作室中,输入 X 位置条件公式文本。

例如,输入以下公式文本:

numbervar hLevel := HierarchyLevel (1);

numbervar deltaX := 0;

if (hLevel > 1) then

deltaX := (hLevel - 1) * 0.4;

deltaX := deltaX * 1440;

注意:

?可以使用多种方式创建此公式;以上代码是其中一种方式的示

例。

?位置以缇为测量单位;一英寸等于 1440 缇。

在联机帮助中搜索“HierarchLevel (GroupingLevel)”以了解有关在此示例中使用的函数的更多信息。

4

5单击“保存并关闭”返回到报表。单击“确定”以保存位置设置。

Crystal Reports 即会依据分层数据中的值在层次结构中的级别将这些值移到新位置,但会将处在相同行中的其他对象保留在原来的位置上。

10.2.8编辑组

X编辑组

1

2

3

4在“报表”菜单上单击“组专家”。在“组专家”对话框的“分组依据”列表中选择要编辑的组。单击“选项”。在

“更改组选项”对话框中,根据需要编辑组。

160Crystal Reports 用户指南

5单击“确定”关闭“更改组选项”对话框并再次单击以关闭“组专家”

对话框。

报表反映以对组进行的更改。

10.3汇总分组的数据

将数据分组的一个主要目的是对每组记录运行计算,而不是计算报表中的全部记录。

当程序汇总数据时,它将数据排序,分组,然后汇总每组中的值。这一切都是自动进行的。

?

?

?

?程序包含一些汇总选项。根据计划汇总的字段的数据类型,可以:对每组中的值进行求和。对所有值计数或只对彼此不同的值计数。确定最大、最小、平均或第 N 个最大值。最多计算两种标准偏差和方差。

例如:

客户列表报表:确定每个省份客户的数量。汇总将计算每个省份组中非重复客户的个数。

订单报表:确定每个月的平均订单数。汇总将计算每个月份组的平均订单的数量。

销售报表:确定每个销售代表的销售总额。汇总将对每个销售代表组的订单量求和或小计。???

注意: 还可以计算整个层次分组的汇总字段。方法是,在“插入汇总”对话框中选择“层次结构汇总”。

X汇总分组的数据

1在“插入”菜单上,单击“汇总”。

出现“插入汇总”对话框。

从“选择汇总的字段”列表中选取汇总的目标字段。

从“计算汇总”列表中选取一项汇总操作。

从“汇总位置”列表中选择一个放置汇总的位置。

提示:可以单击“插入组”按钮为报表创建新组。

如果想显示汇总占总量的百分比,从“选项”区域选取“按百分比显示”,并从列表中选择一个总计字段。

有关百分比的更多信息,请参阅 第26 页上的 “百分比”

。2345

水晶报表Crystal Reports培训教程 35_水晶报表教程

汇总分组的数据161

6如果想汇总整个层次结构,请选取“汇总整个层次结构”。

有关层次结构的更多信息,请参阅 第14 页上的 “分层次对数据分组”。

完成时,单击“确定”。7

相关主题

? 第24 页上的 “数据小计”

10.3.1根据汇总值对组排序

可以根据汇总值以升序或降序对组进行组织。例如,在订单报表中,如果按省小计订单量,则可以这样对组进行排序:

?订单量从最小到最大(升序)。

?订单量从最大到最小(降序)。

可以使用“报表”菜单上的“组排序专家”命令按汇总值对报表上的组进行排序。

X按汇总值对组进行排序

1在“专家工具”工具栏,单击“组排序专家”。

“组排序专家”对话框出现,其中有报表中每个具有汇总的组的一个选项卡。

单击要排序的组的选项卡。

从左边的下拉列表中,选择“全部”选项。

从右侧的“基于”下拉列表中,选择要作为选定内容基础的汇总。右侧的“基于”下拉列表适合于在单一组节内有多个汇总的情况。例如,在订单报表中,可以计算每个客户的订单总和以及平均值,然后在同一个组节内显示总和及平均值。在这种情况下,将从下拉列表中选择总和或平均值。

指定排序方向。

要选择第二个组排序,重复步骤 2-5。

当运行报表时,程序将基于指定的汇总值对组进行排序。23456

10.3.2选择最前或最后 N 个组或百分比

有时,可能只需要报表中显示最前或最后几个组或百分比值:销售最快的产品系列、(按降序排序后)前 25% 的销售额来自哪些国家、发出订单最多的州/省等等。因为这种选择方法使用比较普遍,所以程序提供了

“组排序专家”以便于设置。

162Crystal Reports 用户指南

当设置最前 N 个组时,还有一个因素需要考虑:怎样处理其他组中那些不适合您设置的最前或最后 N 个组标准的所有记录。需要决定是把这些记录从报表中整个除去还是将它们一起放到一个单一组。程序允许选择这两个选项之一。

?

?注意: 要能够执行最前 N 个或最后 N 个选择,报表中必须包含汇总值。请参阅 第20 页上的 “汇总分组的数据”。建议不要使用在最前 N 个或最后 N 个选择中按层次排序的组。层次

组排序的完整性可能受最前 N 个或最后 N 个选择的影响。

X选择最前或最后 N 个组

注意: 此过程讲述如何选择最前或最后 N 个组。除了要定义百分比值而不是组个数之外,最前或最后百分比的工作机理与此完全相同。1创建报表,并按需要汇总数据。当汇总数据时,程序将数据分组并将

每组汇总。

?所谓最前 N 个组,是指要求程序显示有最高汇总值的组(“最前

N 个”)。

?所谓最后 N 个组,是指要求程序显示有最低汇总值的组(“最后

N 个”)。

2在“专家工具”工具栏单击“组排序专家”按钮。

就会出现“组排序专家”,并显示组的选项卡。

注意:如果有多个组,则程序将给每个组显示一个选项卡。

3

4从第一个下拉列表中选择

“最前 N 个”或“最后 N 个”。从右侧的“基于”下拉列表中,选择要作为选定内容基础的汇总。

右侧的“基于”下拉列表适合于在单一组节内有多个汇总的情况。例如,在订单报表中,可以计算每个客户的订单总和以及平均值,然后在同一个组节内显示总和及平均值。在这种情况下,将从下拉列表中选择总和或平均值。

汇总分组的数据163

5在“其中 N 为”文本框中,输入想显示的组数。例如:

?若需要三个销售最快的产品线的报表,则把 N 设置成 3。

?若需要五个业绩最差的销售区域的报表,则把 N 设置成 5。

如果想将所有其他记录分入一个单一组,则单击“包括其他,名称为”复选框,并输入名称。

选择“包括等值项”以包括汇总值相同的项。

例如,假设有以下组:

?Order 1 = 100

?Order 2 = 90

?Order 3 = 80

?Order 4 = 80

如果设置前 N 个为三,但没有选择“包括等值项”,报表将会显示Order 1、Order 2 和 Order 3。

如果在这个情况下,确实选择了“包括等值项”,报表将显示 Order

1、Order 2、Order 3 和 Order 4,即便 N 设置为三。这样,程序会将等值项 orders 3 和 4 包括进来。

完成时,单击“确定”。

当程序运行报表时,它将只包含所指定的组。678

10.3.3有条件地选择处在最前或最后的组或百分比

如果希望用户为“最前 N 个”、“最后 N 个”或处在最前或最后的百分比选择他们自己的值,请创建一个提示输入值的参数,CrystalReports 随后可将该参数传递给条件选择公式。

X有条件地选择若干个组或百分比值

1打开或创建要用于条件值或百分比选择的报表。

注意:此报表必须包含组和汇总信息,如 第21 页上的 “选择最前或最后 N 个组或百分比”中所述。

在字段资源管理器中,选择“参数字段”,然后单击“新建”。创建一个数字参数。

提示:有关如何创建参数的信息,请参阅 第381 页上的 “创建带有静态提示的参数”。

单击“确定”保存参数。

在“报表”菜单上,单击“组排序专家”。

在组排序专家中,选择所需的组排序类型。

选择除“未排序”或

“全部”外的任何选项。23456

164Crystal Reports 用户指南

7

8

9

10

11单击 N 或百分比值字段旁边的“条件公式”按钮。在公式工作室中,输入在步骤 3 中创建的参数字段。单击“保存并关闭”返回到报表。单击“确定”以保存组排序。在提示您输入数字或百分比时,输入所需的值,然后单击“确定”。

报表将会出现,并仅显示数量与您在参数提示中所输入的值匹配的组。若要输入其他值,请单击“刷新”按钮并选择“提示新参数值”。报表中的组将会刷新,以显示您输入的新值。

10.4小计

小计是计算组中数值的和或总计的汇总。

注意: 如果正使用以一对多链接关系分组的数据库表创建小计,则可能需要使用运行总计而不是小计。请参阅 第176 页上的 “在一对多链接关系中创建运行总计”。

10.4.1数据小计

在本示例中,将按“国家/地区”对“去年的销售额”进行小计。X对数据进行小计

1使用示例数据 Xtreme.mdb 创建报表,并将以下字段从左至右置于

“详细资料”节中:

{客户.客户姓名}

{客户.地区}

{客户.邮政编码}

{客户.国家或地区}

{客户.去年销售额}

2右击“去年的销售额”字段,指向“插入”并从快捷菜单中选择“汇总”。

出现“插入汇总”对话框,所列出的选中字段即为要进行汇总的字段。单击“插入组”。

出现“插入组”对话框,以便指定要加入报表的组。

选择想将数据分组基于的字段,指定排序方向,并在完成后单击“确定”

。34

小计165

5在“插入汇总”对话框中,选取刚刚从“汇总位置”列表中创建的组,

然后单击“确定”。

现在求出了每个组中值的小计。

10.4.2扩展价格并小计扩展

在订单报表或发票中,或许需要扩展单个生产线项目的价格,然后小计扩展。可以使用一个简单公式扩展价格,然后计算公式字段的小计。X扩展价格并小计扩展

1使用示例数据 Xtreme.mdb 创建报表,并将以下字段从左至右置于

“详细资料”节中:

{订单.客户 ID}

{订单细节.产品 ID}

{订单细节.数量}

{订单细节.单价}

2若要创建扩展价格的公式,请从“视图”菜单上选取“字段资源管理

器”。

出现“字段资源管理器”对话框。

选择“公式字段”并单击“新建”。

出现“公式名称”对话框。

输入用来标识公式的名称,然后单击“确定”。

公式工作室将出现,“公式编辑器”处于活动状态。

在“公式”文本框中输入下列公式:

{Orders_Detail.Quantity} *{订单细节.单价}345

6单击公式工作室上的“关闭”按钮。

返回“字段资源管理器”对话框,并且公式的名称列在“公式字段”节点。

在报表的“明细”部分拖动公式字段到“单价”字段右边。

若要小计扩展公式,则右击公式字段,指向“插入”并从快捷菜单选择“汇总”。

出现“插入汇总”对话框。

单击

“插入组”并在 {订单.订单日期} 字段上创建一个组。789

水晶报表Crystal Reports培训教程 35_水晶报表教程

166Crystal Reports 用户指南

10选择 “每一周”作为组间隔。

注意:直到选择“订单日期”字段,“该节将打印”下拉框才会被激活。11

12单击“确定”返回“插入汇总”对话框。选取刚刚从“汇总位置”列表创建的组,然后单击“确定”。

数据将会按日期排序并以一周间隔分组。

10.5百分比

10.5.1计算百分比

可以计算某个组在更大的组中所占的百分比。例如,可以显示基于每个国家总销售额的每个城市销售额的百分比。或者,可以查看各国在销售额总计中所占的百分比。

X计算百分比

1在“插入”菜单上,单击“汇总”。

出现“插入汇总”对话框。

选择想要求和的字段。

例如,可能想要插入计算去年的销售额之和的字段。

在“计算汇总”列表上选择“求和”。

选择汇总位置。

注意:当你正在计算百分比时,汇总位置不能被“总计”(报表注脚)

。234

组页眉167

5

6单击“以百分比显示”复选框。选择想将百分比计算基于的组。

可以选择显示某组占另一组的百分比,或显示其占总计的百分比。7单击“确定”。汇总百分比字段即添加到报表中。

10.6组页眉

10.6.1创建组页眉

每当创建组、小计或汇总时,程序都将创建“组页脚”(GF) 节(放置任何小计或汇总值)和“组页眉”(GH) 节(自动放置组名/页眉)。如果想让报表数据清晰易懂,“组页眉”很有用,甚至是必要的。尽管程序自动创建组页眉,您也许发现希望根据需要更改或修改页眉。您将会学习如何创建四种最常见的组页眉。

? 第28 页上的 “标准页眉”

? 第28 页上的 “生动的页眉”

? 第29 页上的 “基于公式的组的生动页眉”

? 第30 页上的

“自定义组的页眉”

168Crystal Reports 用户指南

10.6.1.1 标准页眉

标准页眉是用来以相当一般的方式标识各个组的文本块。“客户”、“省份”和“月订单”均是这种页眉。

尽管页眉具有某种描述性(“地区销售数据”意味着它是一个地区组),但如果不查看组中的详细资料就不会知道哪些地区包含在组中。 X创建标准页眉

1

2

3

4在“插入工具”工具栏上单击“插入文本对象”按钮。当对象指针出现时,将对象框架移动至“组页眉”节。输入想要用作页眉的文本。完成后,在框架外单击以完成本创建过程。现在当运行报表时,相同

的页眉便会出现在各组的开始。

10.6.1.2 生动的页眉

生动的页眉根据组的内容更改。例如,如果数据按地区进行小计,生动页眉通常将标识各组中详细描述的地区。因此,“亚利桑那”组会有一个页眉标识其为亚利桑那数据,“加利福尼亚”组会有一个页眉标识其为加利福尼亚数据等等。

注意: 当创建组时,程序自动在“组页眉”节中插入组名字段,除非使用“文件”菜单中的“选项”命令将此选项关掉。下面的信息详细描述了如何手动插入这样的节(如果没有让程序自动插入的话),以及如何根据不同需要创建不同的生动页眉。

只组名

最容易创建的生动页眉是一种基于标识组字段值的页眉。

组页眉169

X创建只基于组名的生动页眉

1

2

3在“视图”菜单上单击“字段资源管理器”。在“字段资源管理器”对话框中,扩展“组名字段”文件夹。选取与所使用的组相匹配的“组名”字段并将其拖动到此组的“组页

眉”节中。

当运行报表时,组字段值标识符将作为各地区组的组页眉出现。带有文本的组名

一种更复杂的生动页眉将字段的值和文本组合在一起。按地区进行分组的该类型数据的典型组页眉可以是“加利福尼亚的销售额”或“邮政编码 60606 中的客户”。创建这种页眉涉及三个步骤:

?在“组页眉”节中插入文本对象。

?键入希望出现的文本。

?在文本字段中输入想要出现在“组页眉”中的“组名”字段。

例如,如果想让页眉显示为当前组中的地区名称加上“的销售额”(“AZ 的销售额”、“CA 的销售额”等),则执行下列操作:

X使用文本创建带有组名的生动页眉

1

2

3

4

5

6在“插入工具”工具栏上单击“插入文本对象”按钮。将对象框架放置该组的“组页眉”节中。键入所需的文本并加上一个空格。在“标准”工具栏上单击“字段资源管理器”按钮。在“字段资源管理器”对话框中,扩展“组名字段”文件夹。选取与所使用的组相匹配的“组名”字段并将其拖动到文本对象中,

正好在所输入的文本和空格之后。

提示:扩大文本框的大小使它能容纳文本和组字段。

根据需要格式化文本对象。

当运行报表时,程序会为组创建生动页眉(带文本)。7

基于公式的组的生动页眉

当创建一个组并使用公式字段作为排序和分组基于的字段时,程序将根据公式返回的值自动创建组名字段。

例如,如果创建这样的公式:

{客户.客户姓名

}[1]

170Crystal Reports 用户指南

并基于公式分组,程序会基于“客户名称”字段的第一个字母将数据分组。

若要创建基于公式的组的生动的组页眉,只要在“组页眉”节中插入组名字段即可。

当运行报表时,“A”组将以字母“A”作为页眉,“B”组将以字母“B”作为页眉,依次类推。有关更多信息,请参阅 第13 页上的 “根据公司名称的第一个字母分组”和 第11 页上的 “按间隔将数据分组”。

若要创建更具描述性的页眉,如“以字母 B 开始的客户”,请参阅第29 页上的 “带有文本的组名”。

10.6.1.3 自定义组的页眉

最后一种页眉是用于自定义组的页眉,当数据以指定顺序分组时创建这类组。当使用指定顺序分组时,将指定各组的名称及其从属记录。像其它的分组情况一样,程序基于所指定的组名创建各组的组名字段。X创建自定义组的页眉

1

2

3在“视图”菜单上单击“字段资源管理器”。在“字段资源管理器”对话框中,扩展“组名字段”文件夹。选取自定义组的“组名”字段,并将它拖动到该组的“组页眉”节中。

程序自动将所指定的各个组名应用于适当的组。

注意: 确保当使用“定义命名组”对话框指定组名时,所指定的名称

便是想要显示为组页眉的名称。

水晶报表Crystal Reports培训教程 35_水晶报表教程

组页眉171

10.6.2取消组页眉

可以选择隐藏报表中的组页眉。

X取消组页眉

1

2

3右击组页眉并选择“格式化字段”。在“格式化编辑器”中,在“命令”选项卡上,单击“取消”复选框。单击“确定”。

提示:若要再次显示组页眉,请清除“取消”复选框。

10.6.3深化组页眉

要使报表更容易查看,可以隐藏报表的详细资料而只显示组页眉。当需要时,可以单击组页眉以查看报表详细资料。

X深化组页眉

1

2

3右击报表左侧的灰色“详细资料”节。选择“隐藏(深化完成)”。单击“刷新”。

当将光标置于组页眉上方时,游标会变为放大镜。

双击组页眉使其深化为详细信息。

在 Report Designer 中出现“深化”选项卡。单击“设计”或“预览”选项卡以返回视图。4

相关主题

? 第91 页上的

“对汇总数据使用深化选项”

第11章 运行总计

11.1了解运行总计

运行总计字段与汇总字段类似,但使您可以更好地控制总计的计算方法以及重置时间。运行总计字段特别适于执行下列总计函数:?显示逐条计算记录所得的总累计值。

?不考虑报表分组来计算总计值。

?有条件地计算某个值的总计。

?在组选定公式应用后计算某个值的总计。

?计算一对多链接关系中主表的总计值。

11.1.1运行总计如何工作

运行总计字段由“运行总计专家”创建。“运行总计专家”创建运行总计字段的方法是:请用户选择要汇总的字段、需要使用的汇总操作、求值条件以及重置条件。

注意: 运行总和字段可用于数据库字段和首次传递公式中,但不能用于第二次传递公式或引用其他第二次传递公式的公式。有关更多信息,请参阅 第453 页上的 “多次传递建立报表流程图”。

11.1.1.1 运行总计字段的位置

“运行总计”字段的计算取决于在“运行总计专家”中所选择的设置。放置运行总计的位置会影响报表上显示的数值。例如,如果对每个记录取值并且不重置(总计)的“运行总计”字段位于报表页眉中,则只出现第一个记录值。将同样的“运行总计”字段置于报表页脚则会返回期望值。“运行总计”字段在两种情况下的计算都正确,但在第一种情况下显示得太快。

以下列表总结了在各种报表节中放置运行总计时在计算中包含的记录。此列表假定运行总计未重置。

报表页眉

页眉

组页眉报表中的第一个记录直到当前页上第一个记录(包括该记录)的所有记录直到当前组中第一个记录(包括该记录)的所有记录

173Crystal Reports 用户指南

明细

组页脚

页脚

报表页脚

直到当前记录(包括该记录)的所有记录直到当前组中最后一个记录(包括该记录)的所有记录直到当前页上最后一个记录(包括该记录)的所有记录报表中的所有记录

11.2创建运行总计

11.2.1在列表中创建运行总计

运行总计是能够按各个记录来显示的总计。计算(报表、组等中的)所有记录的总计值,计算范围一直到当前记录(含)。

运行总计最基本的形式是在整个列表内维护的一个运行总计。在本教程中,通过为订单金额列设置运行总计创建此类报表。

注意: 运行总计字段前面带 # 号。

X在列表中创建运行总计

1首先,使用示例数据库 Xtreme.mdb 创建一个报表。链接“客户”和

“订单”表,然后将以下字段从左到右置于“详细资料”节中:{客户.客户姓名}

{订单.订单 ID}

{订单.订单金额}

2在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”对话框。

选择“运行总计字段”并单击“新建”。

出现“创建运行总计字段”对话框。

在“运行总计名称”框中输入名称“TotalOrders”。

在“可用表及字段”框中突出显示 {订单.订单金额},并使用第一个箭头按钮将其移动到“要汇总的字段”框内。

在“汇总类型” 列表上选择“求和”。

在对话框的“求值”部分,单击“依据字段”,然后将 {订单.订单ID} 选择为“依据”字段。

每当该字段发生变化时,就会执行运行总计。

在对话框的“重置”部分,单击“从不”(表示运行总计不重置,贯穿整个报表)。

单击“确定”以保存运行总计字段。3456789

创建运行总计174

程序返回“字段资源管理器”对话框。

10将运行总计字段插入报表“详细资料”节中 {订单.订单金额} 的紧

右边。

在您的报表上,运行总计列中的每一行都会显示加到先前值上的当前记录值。此总计会不间断地在整个报表中继续。

11.2.2为组创建运行总计

运行总计还常用于对一个组内的项进行计算。运行总计从组内第一项开始,到最后一项结束。然后对下一个组开始进行计算,然后再到下一个组,依此进行下去。

?

?

?在本教程中所创建的报表能够完成下列任务:维护客户订单的运行总计。对客户订单进行分组并为每个组重置运行总计。显示每个客户组的小计。

X创建组的运行总计

1首先,使用示例数据 Xtreme.mdb 创建一个报表。

链接“客户”及“订单”表格,并将以下字段从左至右置于“详细资料”节中:

{客户.客户姓名}

{订单.订单 ID}

{订单.订单金额}

2

3在“插入”菜单上,单击“分组”,然后基于 {客户.客户姓名} 字段分组。在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”对话框。

选择“运行总计字段”并单击“新建”。

出现“创建运行总计字段”对话框。

在“运行总计名称”框中输入名称“GroupRunningTotal”。

在“可用表及字段”框中突出显示 {订单.订单金额},并使用第一个箭头按钮将其移动到“要汇总的字段”框内。

在“汇总类型” 列表上选择“求和”。

在对话框的“求值”部分,单击对于每个记录。

在对话框的“重置”部分,单击“依据组”,然后接受默认组名。单击

“确定”以保存运行总计字段。45678910

175Crystal Reports 用户指南

返回“字段资源管理器”对话框。

11将运行总计字段置于报表“详细资料”节中 {订单.订单金额} 字段

紧右边。

注意:如果要查看每个组的总计,请将运行总计字段插入报表“组页脚”节中。

11.2.3创建条件运行总计

某些情况下,您可能有一个值列表,而您只需要对该列表中的部分值进行小计。例如:

?有一个包含加拿大和美国客户的列表。

?要保持基于客户名以字母顺序对客户记录进行的排序。

?不想将数据按国家/地区分组。

?只想计算来自加拿大记录的总计值。

?还想只计算来自美国记录的总计值。

若要完成这个任务,请创建两个运行总计,一个保存美国记录的运行总计,另一个保存加拿大记录的运行总计。

?USTotal

维护美国记录的运行总计

?CanadaTotal

维护加拿大记录的运行总计。

X创建条件运行总计

1首先,使用示例数据 Xtreme.mdb 创建一个报表。请将以下字段从左

到右置于“详细资料”节中:

{客户.客户姓名}

{客户.国家或地区}

{客户.去年销售额}

2在“报表”菜单上单击“记录排序专家”。

提示:完成此项任务的另一个方法是单击“专家工具”工具栏上的“记录排序专家”按钮。

基于 {客户.客户姓名} 字段对记录进行排序。

在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”对话框。

选择“运行总计字段”并单击“新建”。

出现

“创建运行总计字段”对话框。345

水晶报表Crystal Reports培训教程 35_水晶报表教程

创建运行总计176

6

7

8

9在“运行总计名称”框中输入名称“USTotal”。在“可用表和字段”框中突出显示 {客户.去年销售额},并使用第一个箭头按钮将其移动到“要汇总的字段”框内。在“汇总类型” 列表上选择“求和”。在对话框的“求值”部分,单击“使用公式”,然后单击“公式”按钮。

出现公式工作室,“运行总计条件公式”处于活动状态。

在“公式”框中输入下列公式:

{客户.国家或地区} = "USA"10

该公式通知程序对 {客户.国家或地区} 等于“USA”的所有记录计算运行总计。该运行总计将忽略所有其他记录(如加拿大的记录)。11当公式具有正确的语法后,单击“保存并关闭”。

返回“创建运行总计字段”对话框。

在对话框的“重置”部分,单击“从不”。

单击“确定”以保存运行总计字段。

程序返回“字段资源管理器”对话框。

将运行总计字段置于报表“详细资料”节内。

现在使用第 5 步到第 13 步所述的过程创建“CanadaTotal”运行总计字段。唯一的不同是这一次要将求值公式设置为:

{客户.国家或地区} = "Canada"12131415

16完成以后,将 #CanadaTotal 字段置于“详细资料”节 {客户.去年

销售额} 字段紧右边。

注意:如果只想查看加拿大和美国的销售总额,请将创建的两个运行总计字段置于报表的“报表页脚”节中。

11.2.4在一对多链接关系中创建运行总计

当一个表中的单个记录可以与另一个表中的多个记录相匹配时,就会在链接表中出现一对多链接关系。例如,将客户表与订单表链接时就可能出现一对多链接。这种情况下,很可能主表中的每个客户在第二个(查找)表中有多个记录。在您的报表中,对于查找表中的每个新字段值,来自主表的字段值都会被重复。

创建主表中字段的小计会导致不正确的结果,这是因为计算中会包含重复的值。您可以通过创建运行总计来避免这一问题。

可以使用 Xtreme 示例数据库中的“客户”表和“订单”表来演示这

一概念。

177Crystal Reports 用户指南

X在一对多链接关系中创建运行总计

1在“字段资源管理器”对话框上,请将以下字段从左到右置于报表的

“详细资料”节内:

{客户.客户姓名}

{客户.去年销售额}

{订单.订单 ID}

{订单.订单金额}

2

3

4在“插入工具”工具栏上单击“插入组”,并基于 {客户.客户姓名} 字段创建一个组。右击 {客户.去年销售额} 字段并从“插入”子菜单中选择“汇总”。选择“Group #1: Customer.Customer Name - A”作为汇总的位置。

如果仔细查看每个组的小计,就会发现它们是不准确的。这是因为 {客户.去年销售额} 字段对于报表中的每个订单都会被重复。请按照此过程的其余步骤执行操作,了解运行总计如何在同一情况下产生准确的结果。

在“字段资源管理器”对话框中,选择“运行总计字段”并单击“新建”。

出现“创建运行总计字段”对话框。

在“运行总计名称”框中输入名称“LYSrunning”。

在“可用表和字段”框中突出显示 {客户.去年销售额},并使用第一个箭头按钮将其移动到“要汇总的字段”框内。

在“汇总类型”列表上选择“求和”。

在对话框的“求值”部分,单击“依据字段”,并从“可用表和字段”框中添加 {客户.客户姓名} 字段。

在对话框的“重置”部分,单击“依据组”并选择“Group

Customer.Customer Name - A”。

单击“确定”以保存“运行总计”字段。

将运行总计置于“组页脚”节中。#1:56789101112

将每组的运行总计金额与小计金额相比较,您将发现运行总计是准确

的,而小计则不准确。

使用公式创建运行总计178

11.3使用公式创建运行总计

如果曾取消过数据,或者数据所基于的公式是在WhilePrintingRecords 时发生,则应当创建运行总计公式,而不要使用“创建运行总计字段”对话框。

?

?

?

?

?

?手工创建运行总计时,需创建下面三个公式:汇总公式。用于将变量置零的重置公式。用于显示变量的显示公式。下面将创建执行下列函数的报表:维护客户订单的运行总计。对客户订单进行分组并为每个组重置运行总计。显示每个订单的小计(该订单的最后一个运行总计)。

X使用公式创建运行总计

1使用示例数据 Xtreme.mdb 创建一个报表。链接“客户”及“订单”

表格,并将以下字段从左至右置于“详细资料”节中:

{客户.客户姓名}

{订单.订单 ID}

{订单.订单金额}

2

3

4

5在“视图”菜单上单击“字段资源管理器”。在“字段资源管理器”对话框中选择“公式字段”,然后单击“新建”。将公式命名为“RunningTotal”,然后单击“使用编辑器”。出现公式工作室,公式编辑器处于活动状态。将以下内容输入“公式”框:

WhilePrintingRecords;

CurrencyVar Amount;

Amount := Amount + {订单.订单金额};

6

7

8

9单击公式工作室上的“保存并关闭”按钮。将该公式置于报表“详细资料”节内 {订单.订单金额} 字段紧右边。该公式打印“订单金额”字段值的运行总计。在“插入”菜单上单击“组”,然后基于 {客户.客户姓名} 字段对报表进行分组。在公式工作室中创建“AmountReset”:

WhilePrintingRecords;

CurrencyVar Amount := 0;

该公式指示:

将 Amount 变量置零。

179Crystal Reports 用户指南

10请将该公式置于报表的“组页眉 #1”节。

因为对于每个组“组页眉 #1”节均出现一次,所以每当组更改时,就会执行 @AmountReset。从而使每当新组开始时,Amount 变量都会重置为零。

选择报表上的@AmountReset 公式,使用“格式化编辑器”取消之,以便最终打印结果中不出现该公式。

在公式工作室中创建“AmountDisplay”:

WhilePrintingRecords;

CurrencyVar Amount;1112

该公式可用于随时显示 Amount 变量的当前值。

13请将该公式置于报表的“组页脚 #1”节。

因为对于每个组“组页脚 #1”节均出现一次,所以每当组结束时,就会执行 @AmountDisplay。从而使得每次组更改时,存储在 Amount 变量中的值都会打印出来。注意:

该公式所打印的值与 @RunningTotal 作为每组最后一个记录的运行总计的打印值相同。但由于其是在“组页脚”节内进行打印,所以它是组小计,而不是运行总计。

在您的报表上,运行总计列中的每一行都会显示加到先前值上的当前记录值。运行总计从每个新组重新开始,而每个组的最终运行总计则成为该组的小计。

第12章 多节报表

12.1关于节

?

?

?

?

?Crystal Reports提供了五个设计区域以供生成报表时使用:报表页眉页眉明细报表页脚页脚

最初创建新报表时,每个区域包含一个节。不可以删除这些原始节中的任何节,但可以隐藏它们或向它们添加新的节。一旦添加了新的节,就可以删除它们,相对于其它类似节移动它们,或是将相关的节合并到一起。12.2使用节

本节中的许多步骤向您展示了如何使用“节专家”中的节。也可以通过在“设计”选项卡或“预览”选项卡中右击节左边的阴影区域并从快捷菜单中选择适当的选项,对节执行插入、删除等操作。

12.2.1插入节

1单击“专家工具”工具栏上的“节专家”。

“节专家”出现,并显示报表内所有节的列表。若节多于一种,则节用

A、B、C 等字母标明。

注意:程序只启用那些应用于突出显示节的选项(自由格式、在前面新建页等等)

水晶报表Crystal Reports培训教程 35_水晶报表教程

181Crystal Reports 用户指南

2突出显示要在其后插入节的节。

例如,若要添加另一个“详细资料”节,应突出显示现有“详细资料”节。单击“插入”。

就会在突出显示的节下面直接插入一个新的节。3

12.2.2删除节

1单击“专家工具”工具栏上的“节专家”。

“节专家”出现,并显示报表内所有节的列表。若节多于一种,则节用

A、B、C 等字母标明。

注意:程序只启用那些应用于突出显示节的选项(自由格式、在前面新建页等等)。

突出显示想要删除的节。

单击“删除”。

这个步骤将突出显示的节从报表中删除。23

12.2.3移动节

1单击“专家工具”工具栏上的“节专家”。

“节专家”出现,并显示报表内所有节的列表。若节多于一种,则节用

A、B、C 等字母标明。

注意:程序只启用那些应用于突出显示节的选项(自由格式、在前面新建页等等)

使用节182

2突出显示 (C) 节,单击两下向上箭头。

最初在 (C) 节中的数据移动到 (A) 节中。其它节中的数据向下移动。?

?

?注意: 在一个区域内只能将节向上或向下移动。标明节的字母说明了节之间的相对位置(相对于原始位置)。因此,如果将“C”节向上移动,它就变为了“B”节。它失去了它自己原始的“C”标号。也可通过在 Report Designer 中拖放节来移动这些节。

12.2.4合并两个相关节

您可能在两个节里已多次放置对象(其中的对象顺序打印),因此您想将它们全放到一节里(其中的对象可同时打印)。那么可以将这两个节合并,然后根据需要在新的节中重新排列对象。

X合并相关节

1单击“专家工具”工具栏上的“节专家”。

“节专家”出现,并显示报表内所有节的列表。若节多于一种,则节用

A、B、C 等字母标明。

注意:程序只启用那些应用于突出显示节的选项(自由格式、在前面新建页等等)。

移动节以使要合并的两节在列表中彼此紧随。

突出显示上面的节。23

183Crystal Reports 用户指南

4突出显示 (B) 节的同时,单击“合并”,(C) 节将和 (B) 节合并为

一节。

5根据需要重新排列对象。

12.3拆分并调整节大小

在“设计”选项卡中,可以轻松地将一节拆分为两节或更多的节以及/或者调整其大小。

12.3.1拆分节

1

2

3将指针移动到想要拆分的节的左边界。当指针变为“节拆分”光标时,单击边界。当一条水平线出现时,向上或向下拖动它以按照您的要求拆分节。12.3.2调整节大小

1

2

将指针移到想要调整大小的节的底边。当指针变为“调整大小”光标时,拖动边界以按照要求缩小或放大节。

在报表中使用多个节184

12.3.2.1 调整节大小以删除空白区域

如果在一节中有一个或多个对象,而又需要调整节的大小以删除不必要的空白区域,那么可以在“设计”选项卡或“预览”选项卡中右击节左边的阴影区域,并在快捷键菜单中选择“适应节”。该步骤会通过将节的底边移动到节内最低对象的基线处来自动地调整节大小。

向上拖动“调整大

小”光标以缩小上面

的节。

向下拖动“调整大小”

光标以放大上面的节。

?

?节在两种情况下会自动垂直展开:当把一个对象放入一个比它小的(垂直方向)节中时。当对象展开(垂直方向)后大于包含它的节时。

注意: 不能将节的大小调整到小于该节中所有对象的总高度。

12.4在报表中使用多个节

?

?

?在一个区域内创建多节报表,能够最有效地执行某些报表任务,例如:防止可变长度的对象相互覆盖(请参阅 第6 页上的 “防止可变长度的对象相互覆盖”)。当字段为空时消除空白行(请参阅 第6 页上的 “当字段为空时消除空白行”)。在特定情况下添加空白行(请参阅 第7 页上的 “有条件地添加空白行”)。

一旦您了解了多个节的功能,就会发现更多的方法来实现所需的效果。 相关主题

? 第1 页上的 “使用节”

185Crystal Reports 用户指南

12.4.1防止可变长度的对象相互覆盖

当一个报表的子报表或其他可变长度的对象放到节的其他对象上,而“格式化编辑器”中该可变长度对象的“可以扩大”选项被打开,那么这个对象可能会套印正在其下的对象,除非已经:

?将节扩展到适合对象的最大尺寸。

?分隔对象,以使得在第二个对象开始打印前有足够的空间给第一个对

象完成打印。

可以用创建多个节和将对象放在其所在节的可变长度对象之下的方法来消除这种套印问题。

现在,当报表运行时,带有可变长度对象的节将在其下的节打印之前结束打印,从而得到想要的结果。请参阅 第408 页上的 “组合两个或更多不相关的报表”。

?

?

?

?

?

?

?注意: 许多报表对象可以使用“可以扩大”选项,并因此导致套印:文本字段公式字段备注字段BLOB 字段子报表交叉表OLAP 网格

12.4.2当字段为空时消除空白行

在一张客户表中,地址经常会有两行,一行是街道的地址(“地址1”),另一行则用来写相应的邮政编码或信箱(“地址 2”)。通常“地址 1”包含值,而“地址 2”经常为空。如果使用这些数据创建了一个客户列表,并且在另一个邮件标签格式之上堆叠了这些字段,那么那些“地址 2”字段为空的客户记录将打印为空白行。可以通过使用多个节或

抑制显示空白行的方法来消除该空白行。

水晶报表Crystal Reports培训教程 35_水晶报表教程

在报表中使用多个节186

X通过使用多个节来消除空白行

1

2

3

4使用“节专家”来创建两个新的“详细资料”节,这样一共就有三个了。请参阅 第1 页上的 “使用节”。将“地址 2”字段放置于中间一节中,其他的数据则按照想要在报表中显示的位置放置在上面和下面的节中。在“节专家”中突出显示中间一节。在“公用”选项卡上选择“抑制显示空白行”复选框。

现在,打印报表时,如果“地址 2”这节为空,那么程序将不打印这节,不需要的空白行就不会出现在报表中。

注意: 如果希望抑制显示的报表节包含空白子报表,请使用“格式化编辑器”的“子报表”选项卡上的“抑制显示空白子报表”选项,也可使用“抑制显示空白节”选项。

12.4.3有条件地添加空白行

在特殊情况下使用多个节在报表中打印空白行。例如,可能想在报表中每隔五行插入一个空白行。

X有条件地添加空白行

1

2

3

4

5

6使用“节专家”来创建两个“详细资料”节。请参阅 第1 页上的“使用节”。 将报表的详细数据放置在顶部的节中。使第二节为空。在“节专家”中突出显示第二节。在“公用”选项卡上选择“取消(无深化)”复选框,然后单击其右边的“条件格式化”按钮。在“格式化公式编辑器”中输入以下公式:

Remainder (RecordNumber,5)<>0

该公式将每个记录号除以 5。如果此除法运算产生了余数,则它抑制显示空白节。但是,如果没有余数,也就是余数为零(每打印五个记录出现一次),那么程序将打印第二节,这样就插入了一个空白行。注意: 若要在其它情况下插入空白行,则要对公式进行适当修改。请参阅 第229 页上的 “使用条件格式化”

187Crystal Reports 用户指南

12.5套用信函

虽然套用信函本身不必是多节报表,但是它们经常用于多节报表来生成自定义邮件。主题 第14 页上的 “在套用信函内打印条件消息”解释了如何为自定义邮件使用多个套用信函或同一个套用信函的多个版本。

套用信函经常使用文本对象来保存报表的内容。下面的节提供对文本对象的介绍并演示如何在套用信函中使用它们。

12.5.1使用文本对象

创建正式信函时会用到文本对象的许多功能。对文本对象的简单讨论将使在下一节中创建正式信函的工作更容易。一些需要考虑的事情有:?一个文本对象既可以包括文本也可以包括字段;在这个例子中这两种都会用到。

?可以调整文本对象的大小;调整文本对象的大小使其以信函的形式打印。

?

?文本对象以两种模式运行:移动/调整大小模式编辑模式

12.5.1.1 移动/调整大小模式

当对象处于移动/调整大小模式时,显示为一个带有调整大小手柄的虚线框。

在这种模式下,可以通过拖动任何一个调整大小手柄来调整对象的大小,或者通过将光标放到对象中并将对象拖动到一个新的位置来移动它。也可以在这种模式下插入字段,但不能插入文本。当文本对象处于未激活状态时,可以通过单击它使其进入移动/调整大小模式中。

12.5.1.2 编辑模式

当对象处于编辑模式下时,显示为一个不带调整大小手柄的虚线框,并且在选项卡的顶端显示一个本地标尺(如果已在“选项”对话框中选择了“显示标尺”选项)。

当首次放置文本对象时,程序在编辑模式中对其进行设置。当一个文本对象处于未激活状态或移动/调整大小模式中时,也可以通过双击它而使其处于编辑模式下。最后,可以通过右击文本对象并从其快捷菜单中选择

“编辑文本”来使该文本对象处于编辑模式下。

套用信函188

每个文本对象都包含文字处理器功能,包括改变单个字符以及字段的字体和自动换行的功能。在编辑模式下,可以插入文本对象和诸如数据库字段和公式之类的非文本对象。只要对象在编辑模式下,它就包括一个插入点和一条闪光垂直线,这条垂直线指示了键入文本或插入字段开始的位置。

插入点随着键入而移动,自动地停留在最后一个字符的右边。当插入字段时它也会移动,自动停留在这个字段的右边。按一下空格键,插入点就移动一个字符的位置。当按 Enter 键时(该操作插入一个回车符),它就向下移动一行,移到文本对象的左边内边界处。单击现有文本里的任何地方,它就移动到光标所在位置。

当完成多个节的教程后,除非有其它的指示,一般希望在现有的插入点键入或放入字段。

?若要在文本对象内选择文本(为了删除文本、改变字体等),将光标

放到文本上,然后当 I 型光标出现后,拖动光标以突出显示所要选择的文本。

?若要选择文本对象内的字段,将光标放在字段上,I 型光标出现后右击。?若要插入文本,键入所需的文本,它就会出现在插入点处。

?注意:在放入字段之前,看到“拖放”光标是至关重要的。如果它没

有出现,那么就放入字段以便它覆盖文本对象而不是将其插入文本对象中。字段可能出现在文本对象内部,但是移动对象时它不会跟着一

起移动。插入点与“拖放”光标相关。如果在文本对象中已经存在文本或字

段,那么插入点会随着“拖放”光标的移动而移动,从而可以选取放入字段的确切位置。该程序总是将字段放在插入点的位置。

在移动拖放光标时……插入点移动。

?可以通过在文本框的外部单击来退出编辑模式。也可以按

Ctrl+Enter 键。

189Crystal Reports 用户指南

12.5.2使用文本对象创建套用信函

下面的节说明了如何创建套用信函。

将使用文本对象来创建套用信函。创建的套用信函将与数据库表相关联,以便每个信函使用不同记录中的公司信息进行定制。

如果在执行任何步骤时遇到困难,请参阅 第8 页上的 “使用文本对象”。

X创建套用信函

信函将包括日期、内部地址、称呼、一段信函正文和一个结束语部分。1创建空白报表。使用“客户”表 Xtreme.mdb。

出现“设计”选项卡。

如果不想让字段的标题出现在插入信函中的字段之上,那么清除“选项”对话框中“布局”选项卡上的“插入详细字段标题”复选框。将文本对象插入报表的“详细资料”节内。

单击文本对象框,使对象处于移动/调整大小模式中。234

5将位于对象右边的调整大小手柄拖动到“设计”选项卡的右边缘。这

样就使对象的宽为八英寸,这近似于页宽。可能需要停止调整大小,

滚动窗口,然后在调整其余部分以完成全部的调整。

套用信函190

6在文本对象内双击以使其处于编辑模式中。现在就可以准备开始工作

了。插入点出现在对象内部的左边界处。

12.5.2.1 插入日期

1

2若要在信函内插入日期,请展开“字段资源管理器”对话框内的“特殊字段”,然后滚动,直到找到“打印日期”。单击“打印日期”并将位置框拖动到文本对象内部并放置在插入点处。

注意:若要改变信函中日期格式化的方式,请双击文本对象以选中它。然后右击“打印日期”字段,从快捷菜单中选择“格式”{打印日期}。当“格式化编辑器”出现后,在其中的“日期”选项卡里进行修改。按 Enter 键两次以在日期和内部地址之间插入空白区域,并且在文本对象内将插入点向下移动。

提示:如果没有在“格式化编辑器”中为文本对象选择“可以扩大”选项,则可能必须调整“详细资料”节及该文本对象的大小。312.5.2.2 创建内部地址

1

2

3

4

5

6

7若要创建内部地址,从“字段资源管理框”内的“客户”表,将数据库字段拖动到文本对象内。拖动“地址 1”字段,把它放于插入点处,然后按 Enter 键。插入点下移至下一行。拖动“城市”字段并将其放于插入点处。键入一个逗号,后跟一个空格。拖动“地区”字段并将其放于插入点处。键入两个空格。最后,拖动“邮政编码”字段,将其放于插入点处,然后按 Enter

键。插入点下移至下一行。

水晶报表Crystal Reports培训教程 35_水晶报表教程

191Crystal Reports 用户指南

8再按一次 Enter 键以将插入点再向下移动一行,放在开始处。这样

内部地址就完成了。

注意: 当字段放入文本对象内后,就会自动剪裁左右两边,这样就不会有多余的空白区域。

12.5.2.3 创建称呼

1

2

3

4

5

6按四次 Enter 键以下移插入点。键入单词“Dear”(不包括引号)和一个空格。在“字段资源管理器”对话框内突出显示“客户”表内的“联系人职称”字段,然后将其拖动到文本对象内,紧跟在空格后。插入一个空格。程序使插入点紧跟在空格后。在“字段资源管理器”对话框内,将“联系人姓氏”字段拖动到文本对象内并放于插入点处。插入点移动到字段右边。在插入点处键入冒号“:”(不带引号),然后按两次 Enter 键将插

入点向下移动两行。

套用信函192

12.5.2.4 创建信函正文

1

2

3

4

5

6

7

8现在键入“Your company”(不包括引号),然后键入一个逗号,后跟一个空格。拖动“客户名称”字段到文本对象内并将其放于插入点处,紧跟在空格后。键入一个逗号,后跟一个空格。键入以下文本(不包括引号):“helped make this year anoutstanding year for Xtreme Mountain Bikes, Inc.I want tothank you and your staff for your support.I hope next yearwill be a banner year for you.”按两次 Enter 键。键入“Sincerely yours”(不带引号),后跟一个逗号,然后按四次Enter 键。最后,键入您的姓名以完成这份套用信函。单击“标准”工具栏上的

“打印预览”以预览套用信函。“设计”选项卡看上去应类似于:

193Crystal Reports 用户指南

它看上去应该类似于:

12.5.3在套用信函内打印条件消息

您可能想在套用信函内打印条件消息。例如,您也许想鼓励那些尚有可用存款的客户购买更多的产品,而建议那些已经超过了存款限制的客户在限制之下再次减少其帐款。您可以在一个报表中创建这两个信函。X创建条件消息

1

2使用“节专家”在报表中插入第二个“详细资料”节。请参阅 第1页上的 “使用节”。创建两个套用信函。将鼓励客户购买更多产品的信函放入报表的“详

细资料 A”节中;而将建议客户减少收支差额的信函放入“详细资料B”节中。请参阅 第10 页上的 “使用文本对象创建套用信函”

套用信函194

3使用“节专家”来格式化“详细资料”节,这样每个信函都可以在一

定的情况下抑制显示。例如:

格式化这节使其在余额少于存款

限额时抑制显示。

格式化这节使其在结算超出存款

限额时抑制显示。

现在,当记录指明尚有可用存款时,提示客户购买更多的信件将打印。当帐款超出存款限额时,超出限额的信件将打印。当客户的支出恰好是存款限额时,什么也不打印。

相关主题

? 第229 页上的

“使用条件格式化”

第13章 格式化

13.1格式化概念

本小节解释如何格式化报表。格式化不仅指可以对报表的布局和设计进行的更改,还有对文本、对象或整个报表节的外观的更改。?

?

?

?

?可以使用格式化做很多事情,包括:分隔报表的节。吸引对某些数据的注意。更改日期、数字、布尔值、货币值和文本字符串的外观。隐藏不需要的节。使报表呈现专业化的外观。

下列主题描述了可以使用 Crystal Reports 进行的格式化种类,给出了执行各种格式化任务的分步指导信息。

13.2使用模板

模板指的是现有报表文件,其中的格式设置可以添加到新的报表中。与此同时,模板报表中字段和报表对象的格式设置将应用到新报表中。使用模板可以对任意数目的报表设置一致的外观,而无需逐一设置每个报表的格式。

有关模板的更多信息,请参阅联机帮助中的“模板考虑因素”。

13.2.1应用模板

在“标准报表创建向导”中新建报表时,可以选择性地应用模板。也可以随后使用“模板专家”来应用模板。可以从若干预定义模板中进行选择,或是将现有的 Crystal 报表用作模板。

X在“标准报表创建向导”中应用模板

1

2单击“标准”工具栏上的“新建”。选择数据、字段、分组字段等,直至向导显示

“模板”屏幕。

水晶报表Crystal Reports培训教程 35_水晶报表教程

196Crystal Reports 用户指南

3在“可用模板”列表中,单击预定义的模板名,在“预览”区域中查

看该模板的示例。

默认情况下,Crystal Reports 附带的示例模板安装在 \ProgramFiles\Business Objects\Crystal Reports 11\Templates 下。如果要基于现有 Crystal 报表应用模板,则单击“浏览”。

在“打开”对话框中,选择一个 Crystal 报表 (.rpt) 文件,然后单击“打开”。

该报表即可添加到“可用模板”列表中。

注意:如果已将报表选作模板并保存了模板名称和预览图片(在“文档属性”对话框中),那么就可以在“模板”屏幕上看到这一信息。单击“完成”。

您的报表所显示的数据格式将与所选模板的格式相匹配。

注意:如果所选报表不符合模板要求,则不能应用格式设置。在Crystal Reports 联机帮助中搜索“模板考虑因素”主题。456

X将模板应用到现有报表

1在“报表”菜单上,单击“模板专家”。

出现“模板专家”。

提示:完成此项任务的另一方法是单击“专家工具”工具栏上的“模板专家”按钮。

与在“模板”屏幕中一样,您可以从若干预定义模板中进行选择,或是单击“浏览”按钮以搜索可用作模板的现有报表。

选择一个模板,然后单击“确定”。

注意:在应用模板之前,任何打开的深化选项卡、警报或分析器视图均将关闭。2

13.2.2删除应用的模板

应用了某个模板后,您可能并不喜欢对报表所做的更改。只要在应用模板之后尚未退出 Crystal Reports,就可以将模板从报表中删除。X删除应用的模板

1在“报表”菜单上,单击“模板专家”。

提示:完成此项任务的另一方法是单击“专家工具”工具栏上的“模板专家”按钮。

选择“撤消当前模板”,然后单击“确定”

。2

使用模板197

所选模板的特性随即被删除,而您的报表将恢复到最初打开时的格式设置。

注意:要删除模板,您必须使用该选项;“编辑”菜单未提供“撤消”命令。

13.2.3重新应用上次选定的模板

如果希望在 Crystal Reports 会话中重新应用上次选定的模板,只需选择“模板专家”中的一个选项即可。

X重新应用上次选定的模板

1在“报表”菜单上,单击“模板专家”。

提示:完成此项任务的另一方法是单击“专家工具”工具栏上的“模板专家”按钮。

选择“重新应用上一模板”,然后单击“确定”。2

13.2.4使用“模板字段对象”

可以使用“模板字段对象”创建更为灵活的报表模板。这些报表对象不是指现有的数据库字段;它们只是您放入模板报表并按照需要设置格式的对象。当您将该模板应用于另一个报表时,Crystal Reports 会用您指定的格式设置显示该报表的数据。因此,设计模板时,您无需了解最终要将模板应用到报表中的哪些数据,“模板字段对象”可以为您处理各种可能情况。

注意: “模板字段对象”只应用于结果字段,即:数据库字段、参数字段、SQL 语句及公式。特殊字段不属于结果字段。

X向模板报表添加“模板字段对象”

1在“插入”菜单上,单击“模板字段对象”。

将有一个位置框附着在光标上。

将“模板字段对象”框置于模板报表中。

“模板字段对象”可位于报表的任一节中。

右击该对象,然后从快捷菜单中单击“格式化模板字段”。

出现一列格式化选项。可以选择任意选项;选择过程中会显示相应的“格式化编辑器”选项卡。

提示:可以选择多个“模板字段对象”,并将格式化选择应用于所有这些对象。

按需指定

“模板字段对象”的格式设置。234

198Crystal Reports 用户指南

有关如何应用格式设置的信息,请参阅 第26 页上的 “使用绝对格式化”。

对于创建的每个“模板字段对象”都将创建一个特殊的公式字段。可以在公式工作室中查看该公式字段。如果希望在报表中使用示例数据来查看格式化的效果,可以在这些公式中引用数据库字段。

X向“模板字段对象”公式添加示例数据

1在字段资源管理器中,展开“公式字段”节点,选择一个“模板字段

对象”,然后单击“编辑”。

提示:在字段资源管理器的“公式字段”节点和公式工作室中,“模板字段对象”均显示为 <TemplateFieldn>。

在“公式编辑器”中,将该参数中的 Space(10) 部分替换为将在示例中显示的数据库字段类型,然后在保存所做更改后关闭公式工作室。刷新报表的数据。23

13.3使用报表设计环境

13.3.1设计解决方案

当设计要分发到各种环境中的报表时,应记住几件事。为得到最好结果,请考虑:

?节特性

?使对象延伸到后续节

?预先打印好的窗体

?多列

?隐藏报表节

?隐藏报表对象

?放置基于文本的对象

?放置多行、基于文本的对象

?从文件导入基于文本的对象

?基于文本的对象间的间距

?溢出字段表示法

?选择多个对象

?自由格式位置

?垂直位置

?插入字符间距和行间距

?

设置小数字体大小

使用报表设计环境199

?

?

?

?TrueType 字体页边距默认打印机打印机驱动程序

13.3.2节特性

报表由几个节组成,包括报表页眉、页眉、组页眉、详细资料、组页脚、页脚和报表页脚。

每个报表节由一系列行组成。当将基于文本的对象放在节内时,它以文本与基线对齐的方式放置于行上。接下来,由打印机驱动程序调整该行高,使其足以放入该对象。

?如果在同一行上放置另一个基于文本的对象,而此对象字体大小比第

一个对象大,则行高将增加以放入第二个对象。

?如果在同一行上放置另一个基于文本的对象,而此对象字体大小比前

两个对象都要大,则行高将增加以放入第三个对象。

行高由该行上具有最大字体大小的基于文本的对象决定。

当将基于文本的对象添加到报表时,无论添加到同一节还是其他节,行高均调整以放入各种字体。因为此垂直间距由打印机驱动程序设置,所以当报表在不同环境中打印时,很难创建为预先打印好的窗体设计的报表。

?

?

?当设计报表时,应执行下列操作:始终打印测试页。使所有字体大小相同。务必在同一台机器上打印预先打印好的窗体。

13.3.3使对象延伸到后续节

使用本示例,可以使 Xtreme 徽标 (Xtreme.bmp) 延伸到多个节。该过程与插入公司水印作为报表背景的过程类似。

若要使某个对象延伸到后续节,请首先将该对象放在需要将其延伸到的节上方的一节中。然后为放置对象的节选择“节专家”中的“延伸到后续节”复选框。

X创建基本报表

1使用 Xtreme.mdb 中的“客户”表创建报表。

Xtreme.mdb 文件位于 \Program Files\BusinessObjects\Crystal Reports 11\Samples\Chs\Databases 目录中。

200Crystal Reports 用户指南

2

3

4

5

6将 {customer.CUSTOMER NAME} 和 {customer.LAST YEAR'S SALES}并排放在报表的“详细资料”节中。若要从本示例删除不必要的对象,请删除本程序放在各个字段的“页眉”节中的字段标题。在“插入”菜单上,单击“组”来将数据拆分为区域组。在“插入组”对话框的“公用”选项卡中,选择 {customer.REGION}。单击“确定”。

X在报表中插入图片

1单击“插入”菜单上的“图片”。

提示:完成此项任务的另一方法是单击“插入工具”工具栏上的“插入图片”按钮。

选择一个图像文件,然后将它放在报表正文中字段右侧的“页眉”节内。注意:本示例中,图片放在字段的右边以避免延伸到文本。当使用水印(设计为几乎不可见的柔和的图片)时,将它直接放在文本上方。在“标准”工具栏上,单击“打印预览”。

图片将打印在每一报表页的“页眉”节中。23

X使图片延伸到后续节

1在“报表”菜单上,单击“节专家”。

出现“节专家”对话框。

提示:完成此项任务的另一方法是单击“专家工具”工具栏上的“节专家”按钮。

在“节”列表中,单击“页眉”,然后选择“延伸到后续节”复选框。单击“确定”以再次预览报表。

现在图片将打印在第一个“组页眉”和随后的若干“详细资料”节中,位于报表正文文本的旁边(而不是上方)。

注意:使用这种将图片放在报表正文右边的技术,可以建立一幅图表或员工图片,将其打印在与该图表或员工相关的详细资料旁边。一旦完成报表的预览,请返回到“设计”选项卡。

垂直调整图片的大小以将其扩大两倍或三倍,然后再次预览报表。

现在此位图文件延伸到更多节。2345

水晶报表Crystal Reports培训教程 35_水晶报表教程

使用报表设计环境201

?

?

?图片所延伸到的区域视以下条件而定:图片的大小。图片最初置入的节。图片在节中的位置。

通过修改对象的大小和位置,使用延伸功能可以创建各种视觉效果。

13.3.4预先打印好的窗体

?

?

?

?如果在预先打印好的窗体上打印,则可以进行以下操作:扫描窗体。将其作为位图放在报表中。使用延伸功能排列位图和报表,同时将对象移动到希望该对象出现的位置。将报表和窗体作为单独的单元打印,从而不必分别打印各个窗体。

13.3.5多列

您不必一直沿着页面向下打印数据,可以设置多列以使数据在列之间流动。

X创建多列报表

1

2打开要设置成多列格式的报表。在“报表”菜单上,单击“节专家”。

提示:完成此项任务的另一方法是单击“专家工具”工具栏上的“节专家”按钮。

在“节专家”中,突出显示“详细资料”,然后选择“多列格式化”。“节专家”中将添加一个“布局”选项卡。

单击“布局”选项卡,然后设置所需的列“宽度”。

决定列宽时还要同时考虑到纸张的宽度。例如,如果“详细资料”节中有三个字段,占了四英寸宽的空间,那么应将列宽限定在四点五英寸之内,以便能够看到所有字段信息。

设置希望在列中每条记录之间保留的“水平”和/或“垂直”间距。在“打印方向”区域中选择一个方向。

如果正在格式化的报表包含分组,则选择“格式化带有多列的组”。单击“确定”。345678

预览报表时将会看到只显示了第一列的字段标题。要显示第二列的字

段标题,请插入一个文本对象。

202Crystal Reports 用户指南

13.3.6隐藏报表节

Crystal Reports 具有三个可以在“节专家”中设置以隐藏报表节的属性。

13.3.6.1 隐藏(深化完成)

无论何时运行报表,“隐藏”属性均将节隐藏。例如,在摘要报表中,“隐藏”属性可用于只显示摘要,而不显示摘要内含的详细资料。将“隐藏”属性应用于节时,当使用深化游标来深化节内容时,该节将成为可见的。此属性为绝对的;它不能使用公式来有条件地应用。

13.3.6.2 取消(无深化)

当运行报表时,“抑制显示”属性也将节隐藏。但是,与“隐藏”属性不同,不能在应用“抑制显示”属性后深化以显示节内容。本属性可以绝对应用,也可以使用公式有条件地应用。这对于编写套用信函十分有用。例如,在套用信函中可以创建两个“详细资料”节:一个在销售额达到或超过 $X 时抑制显示,另一个在销售额低于 $X 时抑制显示。13.3.6.3 取消空白节

只要节中无内容,“抑制显示空白节”属性即将其隐藏。如果节内放置了内容,并且生成了报表中的值,则它将是可见的。

13.3.7隐藏报表对象

Crystal Reports 在“格式化编辑器”中有三个用于隐藏单个对象的格式化选项。

13.3.7.1 若重复则取消(公用选项卡)

如果某字段值在重复同一节时与紧邻它的前一个值相同,则“若重复则取消”属性将禁止打印该字段值。

值未打印,但保留其打印空间。注意:

该选项不适用于包含嵌入字段的文本字段。

将重复值取消并且

不打印。

使用报表设计环境203

13.3.7.2 若为零则取消(“数字”选项卡)

提示:通过单击“格式化编辑器”的“数字”选项卡,接着再单击“自定义”按钮就可以找到该选项。

如果某值为零,则“若为零则取消”属性禁止打印该值。值未打印,但保留其打印空间。若要删除空格,请选择“节专家”中的“取消空白节”复选框。

注意: 此选项只适用于节中没有其他对象的情况。

零值将取消并且

不打印。

13.3.7.3 取消(“公用”选项卡)

“取消”属性当运行报表时将对象隐藏起来。例如,最常见的是将此属性应用于这样一些公式,即需要用这些公式进行一些报表计算,但运行报表时不希望打印此这些公式。当选择该属性时,将不打印所选定的对象。

该对象不可见并且不打印。

注意: 可以单击这些属性中任何一个的“条件公式”按钮并创建一个公式,使其设置根据某些事件有条件的进行。请参阅 第35 页上的 “使用条件格式化”。

若要设置这些属性,请选择对象,然后单击“专家工具”工具栏的“格式”以打开“格式化编辑器”对话框。“格式化编辑器”出现时,设置这

些属性。

204Crystal Reports 用户指南

13.3.8放置基于文本的对象

当将基于文本的对象放到报表中时,该对象由对象框表示。对象框的高度基于字体的高度。但是其宽度却不同,它根据所操作的对象来决定。?对于不是备注字段的数据库字段,其宽度最初由数据库中所定义的字

段宽度以及选定的字体和字体大小所提供的平均字符宽度决定。

例如,有一个名为 {客户.姓} 的数据库字段,并且数据库将该字段定义为长度为 35 个字符的文本字段。当将该字段放在报表中时,边界的宽度为该数据库字段所设定格式中字体和字体大小的平均字符宽度的 35 倍。请记住这是初始默认边界宽度。这个宽度始终可以根据需要进行大小调整。

?对于基于文本的对象,默认宽度大约等于 19 个平均字符宽度。文本

对象不同于数据库字段,因为当您将文本和/或数据库字段输入到对象中时,对象宽度自动扩展。与所有其他基于文本的对象一样,此宽度可以由用户调整。

?对于不同的数字字段(双精度型、单精度型、整型、长整型和字节),

默认宽度各不相同。与其他所有对象一样,此宽度可以由用户调整。13.3.8.1 禁止截断对象内的文本

无论是接受默认宽度还是调整基于文本的对象的大小,如果对象内的文本一直打印到了对象框的边缘,则会产生一个问题。虽然报表在设计它的机器上可能看起来没问题,当使用另一种打印机驱动程序打印该报表,而该驱动程序度量字体较宽时,文本的长度扩大了,但对象框却保持固定。所得到的文本将切断或截断。

X禁止截断对象内的文本

1右击要格式化的文本对象以调出快捷菜单。

提示:完成此项任务的另一种方法是单击“专家工具”工具栏上的“格式”按钮。

在快捷菜单上,单击“格式化文本”。

出现“格式编辑器”对话框。

在“公用”选项卡上,选择“可以扩大”复选框。

单击“确定”保存更改。

于是对象格式化为在多个行上打印。如果打印的文本宽出对象,则文

本换行到其他行。234

使用报表设计环境205

13.3.8.2 禁止对象内无间距文本的中断

对于不包含空格的文本字符串,如单个单词,文本字符串于该行开始换行前在对象框的边缘中断。

X禁止对象内无间距文本的中断

1

2选择要格式化的对象。扩展对象框以使其宽于框内最宽的文本块。

数据库字段中的实际文本远小于字段可包含的最大字符数的情况很常见。例如,{table.LAST NAME} 字段的大小设计为 80,而数据库中最长的名称则为 28 个字符。这种情况下,当最初将该字段放在报表中时,字段为平均字符宽度的 80 倍。减小字段的宽度,但包含足够的空间以解决文本宽度的增加。

虽然这些选项中的每一个都提供了有效的解决方案,处理一个节内单个基于文本的对象,但当将不止一个对象放在节中时仍有要考虑的设计事项。当调整对象大小时,请考虑该对象相对节内其它对象的位置。

设计报表时,应避免各个对象间的间距十分紧密。通过将对象宽度扩展大约 5% 来为宽度扩大留出空间。或者,如果不可能这样做,请考虑减小字体的大小或将每个对象放入各自的子节。

13.3.8.3 取消嵌入字段中的空白行

由于可以在文本对象中嵌入字段,就可能遇到因字段为空而造成文本对象中存在空白行的情况。可以取消这种嵌入字段造成的空白行。

注意: 取消嵌入字段空白行专门用于删除文本对象中的空白行,该文本对象在一行中只包含一个完全为空白的字段,且行末跟有回车符。X取消嵌入字段的空白行

1在“设计”选项卡中打开报表,然后单击目标文本对象,即导致某些

记录显示空白行的文本对象。

提示:为确保单击的是一个文本对象,请在屏幕左下角的状态栏中核查是否有

“文本”字样。

水晶报表Crystal Reports培训教程 35_水晶报表教程

206Crystal Reports 用户指南

2

3右击该文本对象,在快捷菜单中单击“格式化文本”。在“格式化编辑器”中选择“取消嵌入字段空白行”选项,然后单击

“确定”。

现在再打印输出报表时,在空的嵌入字段的位置就不再显示不需要的空白行了。可以在“预览”选项卡中确认所做更改。

在取消空白行之前,如果“地址 2”

字段为空就会打印空白行。在取消空白行之后,如果“地址 2”

字段为空则不会打印。

13.3.9放置多行、基于文本的对象

虽然格式化为在多个行上打印的基于文本的对象遵循与其它对象相同的设计规则,但却有一个附加的特性要加以考虑。如果打印机驱动程序展开或收缩文本的间距,则自动换行可能会不同,因为为了适应增长或收缩将改变打印对象所需的行数。

当放置多行基于文本的对象时,如果同一节中的其他对象直接放在这些对象下方,则可能会出现问题。

与单行基于文本的对象不同,展开多行基于文本的对象的对象框以适应增长是不可行的。这样做时,行的宽度将根据展开的边界而增加。

因此,请尽可能将多行基于文本的对象放在节的底部。如果打印它们需

要更多的行,则该节向下展开以适应增长,并且它们不会危及其他对象。

使用报表设计环境207

13.3.10从文件导入基于文本的对象

使用 Crystal Reports,您可以从现有文件将某个格式化的、基于文本的对象导入报表。

X从文件导入基于文本的对象

1

2

3双击要格式化的基于文本的对象,将其置于编辑模式,然后右击该对象以调出快捷菜单。在快捷菜单上,单击“插入自文件”。在出现的“打开”对话框中,选择存储基于文本的对象的文件,然后

单击“打开”。

该对象即可从文件导入报表中的文本对象。

13.3.11基于文本的对象间的间距

使用网格和准线选项来帮助均匀对齐基于文本的对象。

可以选择“网格线对齐”选项,将网格大小设置为最大值 1 英寸,使网格在“设计”选项卡、“预览”选项卡或同时在两个选项卡上为可见或不可见。有关使用网格的更多信息,请参阅 第13 页上的 “使用网格”。

您还可以在不带网格的情况下工作,将对象放在报表中所需要的任何地方。您也许希望在自由格式环境中工作,同时保留对齐对象的功能,或作为一组移动或调整它们的大小。可以使用准线这样做。请参阅 第14页上的 “使用准线设计”。

13.3.11.1 使用网格

网格是一系列行坐标和列坐标。在选中网格及“选项”对话框的“布局”选项卡中的“网格线对齐”选项后,Crystal Reports 只允许您将基于文本的对象放置在这些坐标之上,而不是置于其间。于是您可以隔开报表上的数据以及根据需要对齐对象。如果您试图将对象放在网格坐标间,该对象将与网格“对齐”,即:该对象自动移到最近的一组行坐标和列坐标。

每个报表都包含一个设计网格。不仅可以选择打开或关闭网格,还可以根据需要将网格设置为不同大小。根据默认,将不选择网格。请参阅第14 页上的 “选择网格”。

一旦设置了网格,它对于所有节保持同样的大小。网格从每节的左上角开始度量,然后向下和向右继续,直到该节的末尾。接着一个同样大小的新网格又从下一节的左上角开始,以次类推,直到报表的末尾。

208Crystal Reports 用户指南

?

?

?如果选择了“网格线对齐”选项,将发生以下情况:所有新放置的对象、基于文本的对象和 OLE 对象的左上角均与某个网格点对齐。在选择“网格线对齐”选项之前放在报表上的对象不与最近的网格点对齐。它们仍留在原来的位置。如果调整某个对象的大小,所调整的一边或几个边与最近的网格点

对齐。

13.3.11.2 选择网格

“设计”选项卡和“预览”选项卡具有一个基础网格结构,可以在“选项”对话框中的“布局”选项卡上将该结构激活。

X选择网格

1在“文件”菜单上,单击“选项”。

出现“选项”对话框。

在“布局”选项卡的“网格选项”区域中,可以激活与网格对齐功能;显示“设计”选项卡和/或“预览”选项卡的网格基础结构;还可以选择自由格式位置以及指定网格大小。

单击“确定”保存更改。23

提示:另外一种做法是选择“视图”菜单上的“网格”命令。也可以右击“设计”选项卡或“预览”选项卡上的空白区域,然后从快捷菜单中选择该命令。

13.3.11.3 使用准线设计

Crystal Reports 提供准线以协助您准确地对齐对象并调整报表对象的大小。准线是一些非打印线条,可以将其放在“设计”选项卡和“预览”选项卡上的任何位置以帮助对齐。它们具有对齐属性,使对象自动与其对齐。

13.3.11.4 查看准线

可以通过在“选项”对话框中选择各个视图选项来查看“设计”和“预览”选项卡上的准线。

X查看准线

1在“文件”菜单上,单击“选项”。

出现“选项”对话框。

使用报表设计环境209

2

3在“布局”选项卡中,选择“设计视图”区域的“准线”复选框和/或“预览”区域中的“准线”复选框。单击“确定”保存更改。

提示:另外一种做法是选择“视图”菜单上的“准线”命令。

13.3.11.5 插入准线

尽管您可以也应该在需要时手动插入准线,Crystal Reports 仍会在特定情形下自动插入准线:

?每当将一个字段或公式字段添加到报表时,程序在字段框左边缘处创

建一个准线,并将字段和字段标题与之对齐。

?当将字段汇总时,程序将汇总与同一个准线对齐,以保证正确的对齐。?当右击某节左边的阴影区域,然后从快捷菜单选择“排列行”选项

时,程序在该节中创建一个或多个水平准线,并将字段与它们对齐。X手动插入、移动和删除准线

1在“设计”或“预览”选项卡中,单击顶部的标尺可以激活垂直准线

;单击左侧的标尺可以激活水平准线。

请注意每条准线均与其起始标尺位置上的一个箭头相连。

注意:如果未显示准线,请确保在“视图”菜单上选中了相应的“准

线”选项。在“预览”选项卡上,必须选择一个对象才能看到准线。2

3要将准线放置到目标位置,请将其箭头沿标尺拖至相应的位置上。要删除准线,将其箭头拖出标尺。

注意: 如果选择了“网格线对齐”选项,则只可以以网格增量插入或移动准线。

13.3.11.6 使对象与准线对齐

要使对象与准线对齐,将报表对象拖动到准线上,直至对象边缘落在准线之上。对齐功能不仅使您能够准确地对齐报表对象,而且还可以同时对多个对象重新定位并调整大小。一旦若干对象都与某条准线对齐,您就可以通过移动准线来移动所有对象。

210Crystal Reports 用户指南

可以使对象的顶部或底部与水平准线对齐。

可以使对象的左侧、右侧或中垂线(垂直平分对象的不可见线条)与垂直准线对齐。

X使对象与准线对齐

1

2通过单击某一标尺插入一条准线。将报表对象拖动到准线上,使对象的一个边缘位于准线之上。

准线的对齐属性对基于文本的对象所起的作用不同于对其他如 OLE之类的对象所起的作用。当一行基于文本的对象与准线对齐时,与准线对齐的是文本的基线而不是对象框。当多行基于文本的对象与准线对齐时,与准线对齐的既可以是文本的基线也可以是对象框。

通过查看“设计”视图中对象两侧直接位于基线之上的特殊指示符(即下图中圈划的点),可以确定基于文本的对象是否与水平准线对齐。如果对象与垂直准线对齐,则特殊指示符将沿对象侧边显示。

要在一行上放置几个字体大小不同的文本对象并使它们的基线成一

条直线,则需要使每个对象的基线都与同一条水平准线对齐。

水晶报表Crystal Reports培训教程 35_水晶报表教程

使用报表设计环境211

13.3.11.7 使用准线定位对象

使一个或多个对象与某条准线对齐之后,通过移动该准线即可同时移动所有对象。要移动准线,沿标尺拖动其箭头。

将准线拖动到所需的位置。

对象与准线一起移

动。

注意: 当移动准线时,所有与之对齐的对象也一起移动。但如果移动的是与准线对齐的对象,该准线并不随之移动。

13.3.11.8 使用准线调整对象大小

使用两条准线可以对两个或多个大小(高度或宽度)相同或不同的对象调整大小。两种情况下使用两个准线调整大小的过程是一样的。X使用准线调整对象的大小

1

2创建一个准线。将对象的一端与该准线对齐。

3在该对象的右侧创建第二条准线。

注意:此准线不应接触到该对象。

单击对象以激活大小调整控柄。

将调整大小控柄拖至第二条准线,让对象与该准线对齐。45

212Crystal Reports 用户指南

6

7对于每一个要与这两条准线对齐的其他对象,重复执行第 2 步到第5 步。如果对象不是所需要的大小,则拖动准线之一或全部准线直到对象大

小正确为止。

13.3.11.9 缩进行

使用 Crystal Reports,可以控制备注字段、字符串字段和基于文本的对象的行缩进。对于对象,通过将光标定位在某特定段落的开始,便可以使用该段落的行缩进选项了。或者,如果完全选择了某个对象,则可以对该对象内的所有段落应用相同的缩进规范。

记住,任何跟随在回车之后的行都将视为新段落的首行。

X缩进行

1

2右击希望格式化的字段或对象以调出快捷菜单。在快捷菜单上,单击“格式化文本”。

出现“格式编辑器”对话框。

单击“段落”选项卡。

在“缩进”区域中,可以缩进段落的首行,可以从左边距缩进段落的所有行,也可以从右边距缩进段落的所有行。

注意:只接受字段或对象宽度范围内的缩进值。

单击“确定”保存更改。345

13.3.12溢出字段表示法

Crystal Reports 使用“溢出字段表示法”来帮助用户在报表单元格中使用数字或货币值。通常,如果某个数字或货币值大于包含它的字段,则将该值截断(即“剪辑”)。例如,100,000,000 之类的值可能作为1,000 或 000 出现在报表上(视所设置的属性而定)。阅读报表时这可能会导致混乱。

当清除了“允许字段剪辑”格式化选项后,超出字段大小的数字/货币字段值将在“预览”选项卡中以数字记号 (######) 表示,让您在字段过小时一目了然。

X允许溢出字段表示法

1

2右击希望格式化的货币字段或数字字段以调出快捷菜单。在快捷菜单上,单击“格式字段”。

“格式化编辑器”对话框出现,其中的“数字”选项卡打开。

使用报表设计环境213

3单击“自定义”按钮。

“自定义样式”对话框出现,其中的“数字”选项卡打开。

若要允许溢出字段表示法,请清除“允许字段剪辑”复选框。

注意:还可以选择单击“条件格式化”按钮在“格式化编辑器”中输入公式。在“格式化公式工作室”中,可以指定仅当满足某些条件时才禁用字段剪辑。

单击“确定”保存更改。45

若要查看结果,请刷新报表。如果禁用了字段剪辑,则超出其所在字段对象大小的任何数字/货币字段值都将以数字记号 (######) 表示。

13.3.13选择多个对象

可以选择多个对象来一起格式化,包括文本、字段、图表、地图、位图、OLAP 网格、交叉表和 OLE 对象。

一旦选定了多个对象,可以将它们作为一组来移动、对齐、调整大小、剪切以及复制和粘贴。还可以更改它们的字体、颜色和段落样式。

对象基于一个“主”对象进行移动、对齐和调整大小,该对象通常为所选的最后一个对象。可以通过右击所需对象将主对象更改为该对象。X选择多个对象

1单击一个对象,然后按住 Ctrl 键并单击要选择的其他对象。

注意:也可以通过左击并将光标拖过一定区域来选择多个对象。右击主对象。

在快捷菜单上,选择适当的格式化选项。23

X若要选择某一节中的所有对象

1

2在“设计”或“预览”选项卡上,右击要使用的节左边的灰色区域。从快捷菜单中选择“选择所有节对象”。

该节中的所有报表对象即被选中。

13.3.14自由格式位置

可能还需要在没有网格的情况下使用 Crystal Reports,即在类似于绘图程序的自由格式的环境中工作。自由格式表示可以将对象放在报表中所需要的任何位置。唯一的限制是本程序不允许将图表和交叉表对象放在“页眉”节、“页脚”节或“详细资料”节上。

若要在自由格式环境中工作,请选择“选项”对话框中的“布局”选项卡上的

“自由格式位置”选项。

214Crystal Reports 用户指南

13.3.14.1 自由格式位置打开

为创建动态报表和尽可能减小打印机驱动程序相关性,建议在“自由格式位置”选项打开的情况下将报表的所有节格式化。如果报表包含图表、框、行和位图图像(如公司徽标)之类的 OLE 对象,则这一点尤其正确。

当某节以自由格式位置进行格式化时,所有 对象都可以放在该节上的任意位置。Crystal Reports 基于对象的绝对坐标在节内放置对象。这些坐标决定对象在报表上的垂直位置。这表示由您来控制单行、基于文本的对象的垂直位置,而不是由打印机驱动程序来控制。这样做,便可以更好保护报表,使其不会由于使用不同的打印机驱动程序而产生打印不一致的问题。

但是,虽然打印机驱动程序不再控制基于文本的对象在节内的垂直间距,但它仍然决定基于文本的对象内的文本的水平间距,以及多行、基于文本的对象的行间距。因此,虽然自由格式位置提供更好的控制,但是设计报表时仍必须考虑这些事项。请参阅 第12 页上的 “放置多行、基于文本的对象”。

13.3.14.2 自由格式位置关闭

如果某个节的“自由格式位置”选项关闭,则本程序不再参照对象的绝对坐标来确定在哪里打印该对象,但以下情况例外。

?仍然参照绝对 x 坐标来确定每个对象在水平位置上从哪里开始打印

(左位置和右位置)。

?仍然参照 y 坐标以确定对象的垂直位置,但当打印机驱动程序改变

时,Crystal Reports Designer 可以对该坐标进行调整。

因此,如果使用行间距的度量大于原打印机驱动程序的打印机驱动程序打印报表,则 y 坐标增加,并且基于文本的对象打印在页面更靠下的地方。“自由格式位置”选项关闭的情况下,用户不再控制基于文本的对象的垂直位置,而由打印机驱动程序来决定。

但是,图形、框和行之类的 OLE 对象的位置不受打印机驱动程序控制。因此,当放置和打印这些对象时,Crystal Reports Designer 始终参照这些对象的绝对坐标。由于各种不同的定位方法,当在报表上既要放置基于文本的对象又要放置 OLE 对象时,就会产生一些问题。

例如,将一个框(OLE 对象)放在一个数据库字符串字段(基于文本的对象)周围。报表看起来很不错,所有对象都按要求对齐了。但是,如果使用行间距的度量十分大的打印机打印该报表,则将发生以下情况。?框的位置不相对于放置该框的节变化(其 x 坐标和 y 坐标不变)。?基于文本的对象的垂直位置改变了,因为它的 y 坐标向上调整了。

注意: 该值从节的左上角开始度量;因此,该值越大,对象就打印在页面越靠下的位置。

使用报表设计环境215

如果您正在分发一些报表,这些报表具有在“自由格式位置”选项关闭的情况下进行格式设置的节,并且需要将那些节中的对象用边框包围或用线条设置格式,则最好修改对象的边框属性,而不要插入线条和框。这样做的话,边框相对于对象的位置便会始终不变。请参阅 第26 页上的 “向字段添加边框、颜色和阴影”。

请记住,任何节都可以在“自由格式位置”选项打开或关闭的情况下进行格式化。虽然某些情况下最好打开该选项,而其它情况却未必如此,但是强烈建议报表中的所有节以相同的方式进行格式化。

13.3.14.3 使用准线的自由格式位置

您也许希望在自由格式环境中工作,同时保留对齐对象的功能,或作为一组移动或调整它们的大小。可以使用准线这样做。

准线是从“设计”选项卡和“预览”选项卡垂直或水平延伸的线条。准线具有对齐属性。当将某对象移动到准线的磁力范围内时,此对象将对齐于或附加在该准线上。

?一旦对象与某准线对齐,如果移动该准线,则此对象也跟着移动。?如果有几个对象都对齐于某个准线,则当移动该准线时它们都将跟着

移动。

?如果有几个对象的两端(左端和右端,或顶端和底端)各对齐于一个

准线,并且移动其中一个准线,则所有对象同样地进行大小调整。在自由格式环境中使用准线提供了灵活的控制。请参阅 第14 页上的 “使用准线设计”。

13.3.15垂直位置

在“格式化编辑器”的“公用”选项卡上,可以使用文本旋转选项来垂直对齐报表上的字段和基于文本的对象。

当选择 90 度的文本旋转时,该文本将以逆时针方向旋转 90 度。当选择 270 度的文本旋转时,该文本将以逆时针方向旋转 270 度。?

?

?注意: 如果文本旋转为 0 度不变,则报表水平地从左到右进行格式化。对于基于文本的对象的文本旋转,自动清除“可以扩大”选项,该选项禁止对象内文本的截断。有关“可以扩大”选项的更多信息,请参阅 第10 页上的 “禁止截断对象内的文本”。横越页面边缘的垂直格式化的文本不能作为报表的一部分显示。

水晶报表Crystal Reports培训教程 35_水晶报表教程

216Crystal Reports 用户指南

13.3.16插入字符间距和行间距

使用 Crystal Reports,您可以为备注字段、字符串字段和基于文本的对象指定字符间或行间的间距量。

X插入字符间距和行间距

1

2右击希望格式化的字段或对象以调出快捷菜单。在快捷菜单上,单击“格式字段”。

出现“格式编辑器”对话框。

单击“字体”选项卡。

将使用该选项卡来设置字符间距值。

在“间距”区域的“字符精确间距”字段中,指定每个字符占据的值 n。值 n 定义为从一个字符的开始到下一个字符的开始的距离,以磅数为单位。更改字符间距时,只更改了相邻字符间的间距,而没有更改字符的字体大小。

例如,如果您指定了一个带有 14 磅字符间距的 14 磅字体,则每个字符将保持 14 磅字体大小,同时占据 14 磅宽的空间。

单击“段落”选项卡。

将使用该选项卡来设置行间距值。

在“间距”区域的“行间距”字段中,将行间距指定为所用字体大小的倍数,或指定为具体的磅数。

单击“确定”保存更改。34567

13.3.17设置小数字体大小

在“格式化编辑器”的“字体”选项卡上,可以为报表上的数据库字段和基于文本的对象选择小数字体大小。

X设置小数字体大小

1

2右击希望格式化的字段或对象以调出快捷菜单。在快捷菜单上,单击“格式字段”。

出现“格式编辑器”对话框。

单击“字体”选项卡。

在“大小”列表中,为字段或对象键入所需的小数字体大小。

注意:键入的数字必须介于 1 和 1638 之间。Crystal Reports 会自动将所有小数项舍入到最接近的 0.5。因此,报表中可以使用小数形式的字体大小,如 1.5,2.5,3.5 等,一直到 1637.5。34

使用报表设计环境217

5单击“确定”保存更改。

注意: 为已经置入报表的单个数据库字段和基于文本的对象设置小数字体大小时,必须手动进行更改,即遵循以上这些步骤。(这是因为报表中对象的现有字体设置将覆盖默认的选项。)不过,可以使用“选项”对话框的“字体”选项卡调整默认字体设置:这些默认选项将影响所有新建报表,以及添加到现有报表中的所有新对象。

13.3.18TrueType 字体

使用打印机特有的字体设计报表可能在使用不同的打印机时导致一些问题。其它的打印机可能不支持这些字体,或者如果支持的话,也可能未在打印机上安装这些字体。

打印过程中,如果遇到打印机驱动程序不可识别的打印机特有的字体,则 Crystal Reports 将替换这些字体,从而生成不一致的结果。为避免这种情况,设计报表时应只使用常用的 TrueType 字体。

13.3.19页边距

13.3.19.1 设置特定的边距

Crystal Reports 提供用于设置边距的选项以满足您的特定要求。X设置特定的边距

1在“文件” 菜单上,单击“页面设置”。

出现“页面设置”对话框。

更改默认页边距以适应您的需要。

单击“确定”保存更改。23

注意: 所有边距均从页面边缘开始计算。因而,.25 英寸的左边距使打印精确地从页面边缘向内的四分之一英寸处开始。

13.3.19.2 使用默认边距

如果您决定使用默认边距设计报表,则可能发生下列问题。

?当在另一种环境中打印报表时,如果该环境中打印机的默认边距大于

其设置,则报表上右部的报表对象将打印到页面以外。

?当在另一种环境中打印报表时,如果该环境中打印机的默认边距较小

(允许更大的打印区域),则整个报表将移动到页面的左部。

218Crystal Reports 用户指南

建议您总是设置自己的边距。即使想要使用的边距与默认边距相同,也要确保“页面设置”对话框中的“使用默认边距”选项未选,并且使用“页面设置”手动设置自己的边距。

注意: 如果希望 Crystal Reports 在纸张大小变动时自动调整报表的边距,则可以选中“自动调整”复选框。该选项将通过按同一比例扩大或缩小左/右边距和上/下边距来保持报表的可打印区域。

13.3.20默认打印机

一般而言,最好不要选择特定的打印机。尽管该打印机可能与默认打印机相同,但打印机的识别方式对于不同的操作系统仍可能不同。?

?例如,一台 HP Laser III 打印机安装在两个不同的操作系统上。对于 Microsoft Windows 98,打印机名称可以更改,所以 HP LaserIII 为 Front Reception Printer,但打印机驱动程序将列为HPPCL5MS.DRV。对于 Microsoft Windows NT,打印机名称也可以由用户引用和更

改,但打印机驱动程序则始终为 WINSPOOL。

如果选择特定的打印机,则 Crystal Reports 根据名称查找该打印机。如果找不到所选择的打印机,则选择默认打印机,从而带来打印不一致的可能性。

当选择特定的打印机时,如标签打印机或专用于打印发票的打印机,其打印机名称必须与在其上设计报表的打印机的名称相同。请明白打印该报表的任何用户必须使用同一台打印机,否则他们将遇到一些问题。

如果您的报表是您所分发的应用程序的一部分,则可以提供一个“选择打印机”对话框。使用该对话框,您报表的用户便可以选择正确的打印机或根据需要将打印机重命名。

13.3.20.1 设置页面方向和纸张大小

可以使用纵向或横向以及各种纸张大小来打印报表。可以使用“文件”菜单的“打印”命令来指定这些选项。

X设置页面方向和纸张大小

1在“文件”菜单上,单击“打印”。

即会出现“打印”对话框。

在“选择打印机”区域内,选择要使用的打印机(如果它尚未成为默认的打印机的话)。

单击“首选项”。23

使用报表设计环境219

4

5在“布局”选项卡上,单击“纵向”或“横向”。单击“高级”,在“纸张/输出”列表中选择所要的纸张大小。

纸张大小选项与所选择的打印机直接相关。例如,HP LaserJet 驱动程序 (PCL) 提供 letter、legal、executive 或 A4 纸张大小供您选择,而 PostScript 打印机驱动程序使您可以从 letter、legal、note、A4、B5、letter small 和 A4 small 纸张大小中进行选择。单击“确定”两次保存更改。6

13.3.21打印机驱动程序

13.3.21.1 更新打印机驱动程序

为维护性能,Crystal Reports 向打印机驱动程序查询每一个字体元素(字体量度),如平均字符高度、字符宽度、上行字母和下行字母的高度、内部起始等等。如果使用一个旧的打印机驱动程序而该驱动程序不精确返回字体量度的话,则可能发生问题。如果打印时遇到问题(丢失字段、不正确的格式化等等),建议您获取并安装打印机的最新更新的驱动程序。在很多情况下,较新的打印机驱动程序能提供精确的字体量度,并且能快速解决任何打印问题。

13.3.21.2 由于打印机驱动程序造成的不一致

打印时,如果使用不同的打印机驱动程序来创建和打印报表,则可能产生不一致。这些不一致是由于个体打印机驱动程序所用来度量字体大小之类的文本量度的方法不同的结果。打印时,基于文本的对象可能未对齐、被截断或相互重叠着打印。基于文本的对象的示例包括字符串或字符字段、文本对象、备注字段、数字字段和公式字段。

?

?

?

?

?

?

?以下情况下可能发生这类问题:拥有两台相同的打印机,但使用的打印机驱动程序不同。拥有两台不同的打印机,使用的打印机驱动程序相同。拥有两台不同的打印机,使用的打印机驱动程序不同。拥有一个使用 TrueType 字体的打印机驱动程序和另一个将TrueType 字体映射为 PostScript 字体的打印机驱动程序。拥有两台使用相同打印机驱动程序的同样的打印机,但每一台都在不同的 Microsoft Windows 版本中打印。拥有两台使用相同打印机驱动程序的同样的打印机,但两个打印机驱动程序为不同版本。拥有两台相同的打印机、两个相同的打印机驱动程序和两个相同的操

作系统,但视频驱动程序的分辨率不同。

220Crystal Reports 用户指南

因此,虽然使用某个打印机驱动程序的文档可能需要六整行来显示一个文本块:

?使用第二个将字体度量得较窄的打印机驱动程序可能导致同样的文

本块需要不足六整行。

?使用第三个将字体度量得较宽的打印机驱动程序可能需要多于六整行。

一般来讲,这种情况无法避免。报表发行人的目标是设计适应打印机驱动程序相关性的报表,且这样的报表使用不同的打印机驱动程序仍能一致地打印。为实现这一点,Crystal Reports 提供几种设计解决方案。如果创建报表时考虑了这些解决方案,则可以确保报表在几乎任何环境中都能正确打印和分发。

13.4格式化属性

可以使用用于对象的“格式化编辑器”和用于报表节的“节专家”来设置格式化属性。在大多数情况下,可以设置两种类型的属性中的一种:?绝对(始终应用该属性)。

?条件(仅当满足某些条件时才应用该属性)。

13.5使用绝对格式化

绝对格式化是在任何条件下都应用的格式化。这种格式化属性总是遵照选择,然后应用的过程。例如,选择要格式化的内容(对象或节),然后使用属性设置将格式化应用到选定内容。

?

?

?可以使用下列对话框来格式化报表:使用“格式化编辑器”来格式化字段值。使用“节专家”来格式化整个节。使用“突出显示专家”来条件格式化所有类型的字段。

以上每个对话框都不仅包含一些不同的格式化属性,还包含用于打开或关闭这些属性以及指定特性的工具。

13.5.1向字段添加边框、颜色和阴影

Crystal Reports 使您得以向报表上的字段添加边框、颜色和阴影,以强调重要数据和创建具有专业化外观的报表。

X向字段添加边框、颜色和阴影

1

2右击希望格式化的字段以调出快捷菜单。在快捷菜单上,单击“格式字段”。

出现“格式编辑器”对话框。

水晶报表Crystal Reports培训教程 35_水晶报表教程

使用绝对格式化221

3

4

5单击“边框”选项卡。选择字段的线型、颜色和背景颜色。单击“确定”保存更改。

13.5.2将报表、节、区域或对象设置为只读

可以将报表、节、区域或对象设置为只读,以便无法对其设置格式。设置该选项后,“格式化编辑器”中的所有选项都被置为不活动状态。工具栏或快捷菜单上通常可用于对报表或对象设置格式的选项也同时被取消。

注意: 该功能为您保护报表格式提供了方便;它并不是为了保证报表的安全而设计的。

X将报表设置为只读

1

2在“文件”菜单上,选择“报表选项”。选择“只读”。

X将节或区域设置为只读

1

2

3在“报表”菜单上,选择“节专家”。选择您想设置为只读的节或区域。在“公用”选项卡上,选择“只读”。

注意:在节为只读时,您可以移动、剪切和删除它,但无法更改节中的内容。在区域为只读时,区域中的所有节均为只读;因此,您无法插入另一个节,也无法移动、剪切或删除现有的节。

X将对象设置为只读

1

2右击要设置为只读的对象。在快捷菜单上,单击“格式字段”。

出现“格式编辑器”对话框。

在“公用”选项卡上,选择“只读”。

注意:

?也可以通过在“格式化”工具栏上单击“锁定格式”按钮来完成

此操作。

?在报表对象为只读时,您可以移动、复制、剪切和删除它,以及浏

览其数据并选择它,但无法设置其格式。3

222Crystal Reports 用户指南

13.5.3锁定对象的大小和位置

您可以锁定所选报表对象的位置,防止将其移动。设置该选项后,就无法在 Report Designer 中拖动该对象,并且“大小和位置”命令被置为不活动状态。

X锁定对象的大小和位置

1

2选择要锁定其大小和位置的对象。在“格式化”工具栏上,单击“锁定大小/位置”。13.5.4更改默认字段格式

Crystal Reports 允许您几乎可以用任何格式在报表上显示数据库字段。本节说明如何使用“选项”命令控制 Crystal Reports 向任一报表添加字段时所使用的默认格式设置。在“选项”对话框中,可以为数据库字段设置以下类型的默认格式:字符串、数字、货币、日期、时间、日期和时间以及布尔值。

注意: 更改默认字段格式后,新的设置只会影响随后添加到报表的对象。要格式化已经添加到报表的字段,必须右击该报表字段,然后从快捷菜单中选择“格式化字段”。

X指定字段的默认格式

1

2

3在“文件”菜单上,单击“选项”。在“选项”对话框中,单击“字段”选项卡。单击对应于要格式化的字段类型的按钮(字符串、数字、货币、日期、

时间、日期和时间或布尔值)。

出现“格式编辑器”。

使用“格式设置编辑器”选项卡指定所需的格式。

单击“确定”。45

13.5.4.1 设置日期、时间及日期和时间字段的默认格式

以下步骤首先说明如何指定日期、时间及日期和时间字段的标准格式,而后再说明如何对这些字段的格式进行自定义。

注意: 这些默认设置只会影响到此后添加到报表的对象。要格式化已经添加到报表的字段,必须右击该报表字段,然后从快捷菜单中选择“格式化字段”。

使用绝对格式化223

X设置日期、时间及日期和时间字段的标准默认格式

1

2

3在“文件”菜单上,单击“选项”。在“选项”对话框中,单击“字段”选项卡。要打开“格式化编辑器”,单击对应于要格式化的字段的按钮(“日

期”、“时间”或“日期和时间”)。

注意:如果单击“格式化编辑器”中的“日期和时间”按钮,随后的所有更改将只影响“日期和时间”字段。必须单击“日期”或“时间”才能对单独的日期字段或时间字段进行格式化。

在“格式化编辑器”对话框中,单击“日期和时间”选项卡。

从列表中选择一种预定义的格式(或单击“自定义”创建首选格式)。单击一种新格式后,可以在“格式化编辑器”的“示例”区域中预览结果。

注意:从预定义格式列表中可以选择“系统默认”设置,确保Crystal Reports 使用 Windows 规定的格式。可以通过“控制面板”中的“区域设置属性”对话框来变更系统设置。

选择一种格式后,单击“格式化编辑器”对话框中的“确定”。 单击“选项”对话框中的“确定”。4567

现在,向报表添加日期、时间或日期和时间字段时,Crystal Reports就应使用您指定的格式了。

X自定义日期、时间及日期和时间字段的格式

1

2

3

4

5在“文件”菜单上,单击“选项”。在“选项”对话框中,单击“字段”选项卡。通过单击对应于要格式化的字段的按钮(“日期”、“时间”或“日期和时间”),打开“格式化编辑器”。在“格式化编辑器”对话框中,单击“日期和时间”选项卡。单击“自定义”打开“自定义样式”对话框。

注意:如果在第 3 步选择设置“日期和时间”字段的格式,则会在“自定义样式”对话框中看到三个选项卡(“日期和时间”、“日期”和“时间”)。在这些选项卡中指定的格式只应用到“日期和时间”字段的两个元素,而不会影响为单独的日期字段或时间字段指定的格式。在“自定义样式”对话框中调整各种选项,以便创建首选格式。格式设计完毕后,单击“自定义样式”对话框中的“确定”。

单击“格式化编辑器”对话框中的“确定”。 678

224Crystal Reports 用户指南

9要格式化其他类型的字段,在“选项”对话框中单击对应的按钮。否

则,单击“确定”返回 Crystal Reports。

现在,向报表添加日期、时间或日期和时间字段时,Crystal Reports就应使用您创建的自定义格式了。

13.5.5添加和编辑行

Crystal Reports使您得以向报表添加行以强调重要数据和创建具有专业化外观的报表。直线可以在水平或垂直方向上延伸。对于跨页断开的竖线,线尾所在的报表节不得与线头位于同一页。例如,如果一条直线从一个组页眉延伸到对应的组页脚,则该直线将在每个后续页的顶部(页眉下方)一直延伸到组页脚。

X向报表添加行

1在“插入工具”工具栏上,单击“插入行”。

2使用铅笔光标在所需的地方画线。

注意:不能绘制对角线。

X编辑报表上的行

1

2右击要格式化的行以调出快捷菜单。在快捷菜单上,单击“格式化行”。

出现“格式编辑器”对话框。

在“行”选项卡上,对行进行所需的更改。

单击“确定”保存更改。34

13.5.6添加和编辑框

Crystal Reports 使您得以向报表添加框以强调重要数据和创建具有

专业化外观的报表。

使用绝对格式化225

X向报表添加框

1在“插入工具”工具栏上,单击“插入框”。

2

使用铅笔光标在需要的地方画框。

X编辑报表上的框

1

2右击要格式化的框以调出快捷菜单。在快捷菜单上,单击“格式化框”。

出现“格式编辑器”对话框。

在“框”选项卡上,对框进行所需的更改。

单击“确定”保存更改。34

13.5.7向报表添加形状

在 Crystal Reports 中设计报表格式时,可以插入各种形状作为报表的一部分,如圆形、椭圆和带有圆角的框。如果格式化报表所用的语言需要用这些形状进行有效的交流,这一点特别有用。

X向报表添加形状

1将一个框添加到报表。

请参阅 第30 页上的 “添加和编辑框”。

右击该框以调出快捷菜单。

在快捷菜单上,单击“格式化框”。

在出现的“格式化编辑器”中,单击“制圆”选项卡。

在“圆角”框中选择介于 0 和 100 之间的数字,或将滑块向右移动以增大框各角的曲率。

开始的框逐渐更改为椭圆或圆形,这取决于右移动滑块的距离。

注意:如果已指定框的圆角,则不能再使用“格式化编辑器”的“框”选项卡中通常可用的“阴影”选项。

一旦生成了适当的形状,单击“确定”以保存更改。23456

水晶报表Crystal Reports培训教程 35_水晶报表教程

226Crystal Reports 用户指南

13.5.8使用常规计帐格式

作为支持会计专业中所用规则的一种方法,Crystal Reports 使您可以决定如何在财务报表上显示货币符号、负值和零值。还可以建立报表来反转贷方和借方金额的符号。

X在报表中使用计帐规则

1

2右击希望格式化的货币字段或数字字段以调出快捷菜单。在快捷菜单上,单击“格式字段”。

“格式化编辑器”对话框出现,其中的“数字”选项卡打开。

在“样式”区域中,选择希望正数或负数值显示时的系统数字格式。在“货币符号”(系统默认)区域中,指定希望货币符号与货币值一起出现在报表上的形式。

单击“确定”保存更改。345

X自定义报表的计帐规则

1

2右击希望格式化的货币字段或数字字段以调出快捷菜单。在快捷菜单上,单击“格式字段”。

“格式化编辑器”对话框出现,其中的“数字”选项卡打开。

单击“自定义”按钮。

“自定义样式”对话框出现,其中的“数字”选项卡打开。

选择“使用计帐格式”复选框。

一旦选择了该选项,将发生下列情况:

?在“负数”列表中,负数值出现在报表上的形式由 Windows 区域

设置决定。负数值由减号或括号表示。

?在“将零值显示为”列表中,自动选择划线符号来表示报表上的零

值。

?在“自定义样式”对话框的“货币符号”选项卡上,货币符号放

在货币和数字值的左侧。

注意:对 Windows 区域设置进行的更改仅在退出并重新启动Crystal Reports 后才能生效。

选择“反转显示符号”复选框来反转财务报表中的借方和贷方金额的符号。

单击“确定”保存更改。

再次单击“确定”以返回报表。34567

使用绝对格式化227

13.5.9在横排页面上重复报表对象

某些报表对象(如交叉表和 OLAP 网格)可以水平扩展到多个页面上。Crystal Reports 允许您指定不水平扩展的其他报表对象(如文本对象、字段对象、OLE 对象、图表、地图、线条、框等)在交叉表或 OLAP网格创建的每个附加水平页上重复。例如,如果报表页脚包含图像、文本对象和页码,则可以使用“格式化编辑器”使 Crystal Reports 在每个横排页上重复这些对象。

X在横排页面上重复对象

右击要重复的报表对象。

2在快捷菜单上单击“格式字段”或相应的格式选项。

注意:如果您选择的对象已连接到 BusinessObjects Enterprise 储备库,则格式设置选项将不可用。有关修改储备库中的对象的信息,请参阅 第108 页上的 “修改储备库中的对象”。

3在“格式化编辑器”的“公用”选项卡上,选中“在横排页面上重复”

复选框。

对于线条或方框,“在横排页面上重复”选项将出现在“直线”或“框”选项卡上。

4单击“确定”保存更改。

至此,如果交叉表或 OLAP 网格使报表水平延伸,则您设置了格式的对象将在每个横排页面上重复。1

?

?

?注意: 不能移动报表对象的重复副本;您必须通过移动原对象来移动这些副本。您可以设置重复报表对象的任何副本的格式,但您所做的更改将应用到所有副本。不能重复报表节中已经在“节专家”中选择了“相对位置”选项的报表对象。

13.5.9.1 编制横排页的页码

可以使用一个名为“横排页页码”的特殊字段来编制横排页的页码。X编制横排页的页码

1

2在“字段资源管理器”中,向下滚动到“特殊字段”并通过单击展开该节点。从列表中选择“横排页页码”并将其插入报表中。

注意: 当您通过这种方式插入“横排页页码”字段时,“在横排页面上重复”选项将自动启用。如果您剪切并粘贴“横排页页码”字段,或者将这种字段插入到其他字段或文本对象中,则“在横排页面上重复”选项不会自动启用。

228Crystal Reports 用户指南

13.5.10在行间使用空白区域

节相对于其内对象的高度将影响出现在报表上的行间的空白区域的量。

?

?自由格式的“设计”选项卡使您可以以两种方式添加和删除空白区域:使用“调整大小”光标来调整“设计”选项卡上的区域。更改“节专家”中的选项。

注意:

还可以右击节左边的阴影区域,然后从快捷菜单中选择“适应节”

。本程序自动调整节的大小,以使其底端边界与节内底部对象的基线相平。

13.5.10.1 通过调整大小来添加空白区域若要在报表中的行间添加额外的空白区域,请将指针移动到下端的节边界线处。指针变为“调整大小”光标。

当“调整大小”光标出现时,向下拖

动节边界以添加额外的空白区域。

注意: 还可以通过右击节左边的阴影区域并从快捷菜单中选择“插入行”,将空白区域添加到节。本程序自动调整节的大小,添加容纳一行典型数据库字段所必需的空间量。

使用条件格式化229

13.5.10.2 通过调整大小来删除空白区域

若要删除节内不必要的空白区域,请将指针移动到下端的节边界线。指针变为“调整大小”光标。

当“调整大小”光标出现时,向上拖动节边界以删除多余的空白区

域。

13.5.10.3 通过取消节来删除空白区域

如果整个节都是空白的(例如,如果未将任何内容放置到报表的“页脚”节中),则可以通过在“节专家”中取消该节来消除“页脚”节占据的不必要的空白区域。

X通过取消节来删除空白区域

1

2

3

4在“报表”菜单上,单击“节专家”。出现“节专家”对话框。提示:完成此项任务的另一方法是单击“专家工具”工具栏上的“节专家”按钮。在“节”区域中,单击要取消的节。在“公用”选项卡上,选择“取消(无深化)”复选框。单击“确定”以返回报表。

空白节将不再打印。

13.6使用条件格式化

条件格式化是只在某些条件下才应用的格式化。例如,在某个报表中您可能只想:

?如果客户结余超限则以红色显示。

?如果客户来自加拿大,则日期以“日, 月, 年”格式显示。?

背景颜色隔行显示。

230Crystal Reports 用户指南

Crystal Reports使得在这些情况下以及其它许多情况下有条件地应用格式化变得容易。

对于绝对格式化,您遵照选择,然后应用的过程进行。而对于条件格式化,所遵照的一般过程是相同的,但有更进一步的操作,即建立一些条件来决定是否将应用格式化。使用简单公式来指定这些条件。有关使用Crystal 或 Basic 语法创建公式的更多信息,请参阅联机帮助。

当建立条件格式化公式时,该公式将取代在“格式化编辑器”中所选的任何固定设置。例如,如果选择“取消”选项,然后建立“取消”选项的条件公式,则该属性将仅当公式中的条件满足时才应用。

Crystal Reports 使您可以有条件地设置开/关属性以及特性属性。但是,每一种做法都需要一种不同的公式。

13.6.1条件开或关属性

条件开或关属性测试某个条件是否满足。如果条件满足,则它为开,如果条件不满足,则它为关。不存在中间情况。使用布尔值公式来进行此类格式化。

Crystal 语法示例

condition

Basic 语法示例

formula = condition

程序测试每个值是否满足条件,并将返回“是”或“否”答案。然后,它将该属性应用于返回“是”答案的每个值。

13.6.2条件特性属性

条件特性属性测试两个或多个条件中的哪一个是满足的。然后程序应用该条件对应的格式化。例如,假定希望低于配额的值以红色打印,而其它所有值以黑色打印。本程序测试某个值是否低于配额。如果它低于配额,则应用红色特性;如果不低于配额,则应用黑色特性。

使用 If-Then-Else 公式来进行这种条件格式化。

Crystal 语法示例

If Condition A Then

crRed

Else

crBlack

水晶报表Crystal Reports培训教程 35_水晶报表教程

使用条件格式化231

Basic 语法示例

If Condition A Then

formula = crRed

Else

formula = crBlack

End If

设置了条件特性属性后,Crystal Reports 会将一组特性加载到公式工作室的“函数”列表内。双击任意特性以将其添加到公式。例如,如果正在有条件地设置水平对齐,则“函数”列表包含 DefaultHorAligned、LeftAligned 和 Justified 等属性。如果正在有条件地设置边框,则“函数”列表包含 NoLine、SingleLine 和 DashedLine 等属性。

注意: 在条件公式中始终要包括 Else 关键字;否则,不符合 If 条件的值可能不会保留其原始格式。若要保留不符合 If 条件的值的原始格式,请使用 DefaultAttribute 函数。

Crystal 语法示例

If Condition A Then

crRed

Else

DefaultAttribute

Basic 语法示例

If Condition A Then

formula = crRed

Else

formula = DefaultAttribute

End If

可以进一步利用这种属性。您可以指定一个条件列表,每个条件一个属性;即并不只限于两个条件。例如,如果您的报表上有一个数字字段,其内包含来自世界各国的销售数字,则可以指定要应用于各个国家的数字特性。这种情况下,您的条件可以指定如果数字来自 A 国,则程序应当应用 A 国特性;如果来自 B 国,则应用 B 国特性;如果来自 C 国,则应用 C 国特性,以此类推。

对于两个以上可选条件,使用这种公式:

Crystal 语法示例

If Condition A Then

crRed

Else If Condition B Then

crBlack

Else If Condition C Then

crGreen

Else

crBlue

232Crystal Reports 用户指南

Basic 语法示例

If Condition A Then

formula = crRed

ElseIf Condition B Then

formula = crBlack

ElseIf Condition C Then

formula = crGreen

Else

formula = crBlue

End If

使用多条件的 If-Then-Else 公式来进行这种条件格式化。

13.6.3有条件地更改字体

对于基于参数值之类的条件的备注字段或字符串字段,可以使用“格式化编辑器”来更改这些字段的字体、字体样式、大小和颜色。X有条件地更改字体

1

2右击希望格式化的字段以调出快捷菜单。在快捷菜单上,单击“格式字段”。

出现“格式编辑器”对话框。

单击“字体”选项卡。

若要更改任何字体选项,请单击位于对话框右部的适当的“公式”按钮。在公式工作室中,可以指定仅当满足某些条件时才更改条件字体。单击“保存并关闭”。

注意:

?如果公式中存在错误,则将出现一个消息框,询问您是否仍要保

存。如果您单击“否”,则将显示另一个消息框,详细说明错误。?如果公式中无错误,则返回到“格式化编辑器”。注意“公式”

按钮已更改。这表明已经为该属性输入了公式。

单击“确定”以返回报表。34567

13.6.4有条件地更改 X 位置

可以根据条件更改对象的 X 位置(也即相对左边距的水平位置)。在希望值满足某个条件的对象出现在不同的列中时,您可能会这样做;例如,按时发货的订单出现在第一列中,而未按时发货的订单出现在第二列中。

使用条件格式化233

X有条件地更改对象的 X 位置

1

2

3右击要有条件地移动的字段,然后选择“大小和位置”。单击 X 位置值字段旁边的“条件公式”按钮。在公式工作室中,输入 X 位置条件公式文本。

例如,要将未按时发货的订单移到第二列,请输入如下所示的公式文本:

If (订单.发货日期) < CDateTime (2004, 01, 01, 02, 10, 11) then 4320注意:数字 4320 代表您要定义为第二列的新位置。位置以缇为测量单位;一英寸等于 1440 缇。

4

5单击“保存并关闭”返回到报表。单击“确定”以保存位置设置。

Crystal Reports 将满足条件的对象移到新的位置,但将不满足条件的那些对象保留在原来的位置上。

13.6.5在第一页之后创建页脚

可以选择在第一页以后的所有页上打印页脚。这可以通过使用开或关属性有条件地格式化“页脚”节来实现。

X在第一页之后创建页脚

1

2在报表的“页脚”节中放置要作为页脚显示的字段。在“报表”菜单上,单击“节专家”。

提示:完成此项任务的另一方法是单击“专家工具”工具栏上的“节专家”按钮。

出现“节专家”对话框。

在“节”区域内,单击“页脚”。

要打开公式工作室,单击“公式”按钮,它位于“取消(无深化)”复选框的右侧。

在“格式化公式编辑器”中输入以下公式:

Crystal 语法示例:

PageNumber = 1345

Basic 语法示例:

formula = PageNumber = 1

该公式取消第一页上的页脚,但不取消其它任何页上的页脚。

234Crystal Reports 用户指南

6单击“保存并关闭”。

注意:

?如果公式中存在错误,则将出现一个消息框,询问您是否仍要保

存。如果您单击“否”,则将显示另一个消息框,详细说明错误。?如果公式中无错误,则返回到“节专家”。注意“公式”按钮已

更改。这表明已经为该属性输入了公式。

在“标准”工具栏上,单击“预览”以预览报表并确保页脚在除了第一页以外的所有页上显示。7

注意:

?如果具有多行页脚并且已将这些行插入到各个单独的“页脚”节,则

将需要使用上面的公式有条件地取消每个节。

?若要创建出现在第一页以外的所有页上的页眉,请将页眉信息放在

“页眉”节中,然后使用与用于取消“页脚”节相同的公式有条件地取消该节。

13.6.6使用“突出显示专家”

“突出显示专家”使您能够将条件格式应用于所有类型的报表字段(数字、货币、字符串、布尔值、日期、时间及日期和时间字段)。使用该专家,可以通过以下方式来设置所选字段的格式:根据该字段的值指定条件,或者根据其他报表字段的值指定条件。也就是说,该专家使您能够创建以下公式:如果字段 X 的值满足条件 A,则对报表上选定的字段应用指定的格式设置。

?

?

?

?

?

?

?

?当用于条件格式时,“突出显示专家”可以用于:一次修改多个属性,而不用编写公式。突出显示报表中使用的所有字段类型。设置字体样式、背景颜色、字体颜色和边框样式。根据字段本身的值或另一个字段的值对该字段进行格式设置。根据行和列的标题值突出显示交叉表或 OLAP 单元格。使用区域设置特定的数字格式输入值(如对于北美洲用户使用1,224.23)。以数字或文本方式输入日期(如 2001年1月12日 或 2001-01-12)。快速撤消突出显示。

需要对报表字段有条件地设置格式时,“突出显示专家”比公式工作室更快捷,也更方便使用。突出显示专家通常用于突出显示在某方面有别于报表中其他值的字段值。例如,您可以在销售额超出 $50,000 时就将{Customer.Last Year? Sales} 字段的背景显示为红色,借此来突出显示重要客户。同样,为突出对结订单的关注,您可以在 {Orders.Shipped} 的

值为 False 时将 {Product.Product Name} 字段加粗显示。

使用条件格式化235

不过,“突出显示专家”并不像公式工作室那样灵活。要充分利用Crystal Reports 的格式化功能,请通过公式工作室(可通过“格式化编辑器”对话框访问)创建自己的条件格式化公式。有关完整的详细信息,请参阅 第356 页上的 “使用公式”。

13.6.6.1 使用“突出显示专家”条件格式化字段

“突出显示专家”相对于公式工作室来说是一种快捷的替代方式;它允许您有条件地对任意报表字段设置格式。“突出显示专家”实际上使您能够创建以下公式:如果字段 X 的值满足条件 A,则对报表上选定的字段应用指定的格式设置。

该对话框分为两个区域:“项目列表”区域显示公式;“项目编辑器”区域可用来指定公式。“项目编辑器”区域包括一个“示例”字段,用于显示所应用的格式规范。

X使用“突出显示专家”来有条件地格式化字段

1要打开“突出显示专家”,可右击要格式化的字段,然后选择快捷菜

单上的“突出显示专家”。

提示:通过单击“专家工具”工具栏上的“突出显示”按钮或“格式”菜单上的“突出显示专家”,也可以启动该专家。

打开后,专家就可以对当前所选报表字段进行格式化了。

在“突出显示专家”中,单击“新建”创建采用默认设置的新条件公式。2

3在“项目编辑器”区域中,单击“值属于”列表,然后选择条件所基

于的字段。

水晶报表Crystal Reports培训教程 35_水晶报表教程

236Crystal Reports 用户指南

此处所选字段是您的条件所基于的字段;该字段不一定是要进行格式化的字段。若要基于要设置其格式的字段的值创建条件,请从列表中选择“此字段”。要将条件基于其他报表字段,请从可用字段列表中选择这个字段。

注意:“值属于”列表仅显示您已经添加到报表中的那些字段。

4从下一个列表中选择一种比较方法(等于、小于等等)。

该比较语句就如同专家创建的条件公式中的运算符。

在下一个框中输入所需的值,完成条件设置。

注意:如果在“值属于”列表中选择的不是数值字段,该文本框将变为一个含有可用值的列表,您必须从中选择一个值。

在“字体样式”、“字体颜色”、“背景”和“边框”列表中,指定在满足条件时希望对所选字段应用的格式更改。

如果要对所选字段应用多种突出显示条件,则重复执行步骤 3 和 4。注意:可以使用专家的“删除”按钮从该列表中删除突出显示的公式。使用“优先级”箭头可以指定希望 Crystal Reports 在应用各个条件时所依照的顺序。有关详细信息,请参阅 第42 页上的 “设置突出显示优先级”。

单击“确定”以返回报表。56789

13.6.6.2 设置突出显示优先级

“突出显示专家”的“项目列表”区域内的“优先级”按钮可用于设置公式的优先级。当具有两个或多个公式,并且它们在某些情况下可能产生矛盾结果时,该按钮十分有用。

例如,假设要突出显示报表上的“单价”字段。为该字段指定一个突出显示公式,此公式规定当单价大于 $100 时显示黄色背景。然后,在同一个报表上,创建另一个突出显示公式,当单价大于 $200 时显示红色背景。考虑到 100 是 200 的子集,则有可能当某些“单价”字段实际上应该为红色背景时,却显示黄色背景。换句话说,$300 的单价既可能接收红色背景又可能接收黄色背景,这取决于哪个公式指定了优先级。X设置突出显示公式的优先级

1

2

3在“格式”菜单上,单击“突出显示专家”。在“项目”列表区域中,选择已创建的某个条件突出显示公式。单击“优先级”箭头将所选公式移至其他公式之上或之下。

注意:当某个公式在“项目列表”区域中的位置比另一个公式高时,位置高的公式便优先于位置低的公式。

使用格式刷237

4

5单击“确定”。单击“预览”选项卡,或刷新报表以查看突出显示更改。

13.6.7撤消/恢复活动

Crystal Reports 包含多级撤消。使用多级撤消,您可以以倒序撤消对某个对象的任意个数的更改,直到得到所希望的状况下的报表。

本程序还具有反转撤消操作的恢复功能。例如,如果您移动了某个对象,却不喜欢其新位置,则可以单击“撤消”来将它移动回原来的位置。如果您接着又改变主意,则可以单击“恢复”来恢复最近的更改。

“撤消”和“恢复”按钮各具有一个列表,使您可以一次撤消或恢复许多更改。

?若要撤消某个操作,请单击“标准”工具栏上的“撤消”。

第一次单击该按钮时,它反转对报表所做的最近的更改。每单击该按钮一次,它便反转下一个最近的更改。

若要一次撤消几个操作,请单击箭头按钮以显示操作列表。选择要撤消的操作系列。

?若要在撤消了某更改之后恢复该更改,请单击“标准”工具栏上的

“恢复”。

当没有可供撤消/恢复的操作时或当进行了不可反转的更改时,本程序将禁用“撤消”按钮和“撤消”/“恢复”命令。

若要一次恢复几个操作,请单击箭头按钮以显示操作列表。选择要恢复的操作系列。

注意: 只能从最近的操作开始按照向后的顺序来撤消或恢复操作。不能在未撤消比某操作更近的操作时就撤消该操作。

13.7使用格式刷

使用格式刷可以将一个报表对象中的绝对或条件格式设置属性复制到一个或多个目标对象。当您在报表中选择一个源对象时,“标准”工具栏上的“格式刷”按钮就会被激活。如果将格式应用到与源字段不同的目标字段,则将只应用通用属性。例如,如果源字段为布尔型字段,而目标字段为货币字段,则只更改通用的字体和边框属性,而不应用布尔属性,也不设置货币属性。

?

?

?

注意: 格式刷不会将超级链接信息复制到目标对象或字段。格式刷不会复制通过使用“突出显示专家”应用的格式设置。格式刷不会将格式设置从文本/模板对象复制到数据库字段。

238Crystal Reports 用户指南

?

?格式刷可以使用任何对象(包括储备库对象、只读对象和只读节中包含的对象)作为格式设置的来源(但是,不能为这些对象应用格式设置)。当使用“日期和时间”字段作为源字段时,将更改目标字段的日期或

时间属性;反之亦然(也就是说,用作源字段的“日期”字段或“时间”字段也影响“日期和时间”字段的日期和时间属性)。

X复制和应用格式设置

1在报表中选择一个源对象或字段,然后单击“格式刷”。

提示:也可从快捷菜单中选择“格式刷”。

注意:

?在您选择对象或字段之前,“格式刷”按钮不可用。

?再次单击该按钮或者 ESC 键,以退出“格式刷”。

单击要将格式设置应用到的目标对象或字段。

当您在报表上移动鼠标时,如果对象或字段不能用作目标,则光标将变为“停止”光标。

注意:

?不能将格式设置应用到只读对象或只读字段。

?

如果要将格式设置应用到多个对象或字段,请按住 ALT 键。2

第14章 图表

14.1绘制图表概念

14.1.1绘制图表概述

Crystal Reports 使您可以在报表中包含复杂的、多彩的图表。任何时候都可以使用这些图表来增加报表的可用性。

例如,如果您有一个按地区分组的销售报表,其中有各个地区去年的销售小计,则可以快速创建显示各地区销售额的图表。

?

?

?

?您可以根据以下内容绘制图表:汇总和小计字段详细资料、公式和运行总计字段。交叉表汇总。OLAP 数据

通常在组级根据汇总和小计信息绘制图表。但是,根据所用数据类

型,您可以为报表创建高级图表、交叉表图或 OLAP 网格图表。

240Crystal Reports 用户指南

14.1.2图表布局

“图表专家”提供四种布局,分别对应特定的数据集。

您可以用下列布局中的任意一种来创建图表,并可根据所用数据更改图表的布局。

高级

当有多个图表值或在报表中没有分组和摘要字段时,请使用“高级”布局。

“高级”图表布局支持一个或两个条件字段:您可以使用这些条件字段创建二维图表、三维图表或饼图。“高级”布局中的其他特殊功能包括:?数值可按升序、降序、指定的顺序、合计的最前 N 个或排序来分组。?可为每个记录绘制值。

?可为所有记录绘制总计值。

?图表可基于公式和运行总计字段。

“分组”布局是一种简化的布局,可以用来表示国家/地区等主题字段更改时的摘要。

注意: 为了用“分组”布局创建图表,您必须至少有一个分组和用于该分组的摘要字段。

交叉表

使用“交叉表”布局在交叉表对象上绘制图表。交叉表图表使用交叉表中的字段作为其条件和摘要字段。

OLAP

使用 OLAP 布局在 OLAP 网格上绘制图表。OLAP 图表使用 OLAP 网格中的字段作为其条件和摘要字段。

注意: 您的报表必须包括 OLAP 网格才能创建 OLAP 图表。

14.1.3图表类型

不同的数据组适合不同的图表类型。下面是主要图表类型及其常见用途的概述。

水晶报表Crystal Reports培训教程 35_水晶报表教程

绘制图表概念241

条形图

大多数条形图(也称作柱形图)显示或比较多个数据组。两种有用的条形图是并排条形图和堆积条形图。

?并排条形图

并排条形图以一系列垂直条显示数据。这种类型的图表最适于表示跨越一段时间的多个数据组(例如 AZ、CA、OR 和 WA 地区去年的销售数字)。

?堆积条形图

堆积条形图以一系列垂直条显示数据。这种类型的图表最适合表示三个系列的数据,每个系列的数据由一种颜色表示,堆积在一个条形中(例如,1997 年、1998 年和 1999 年的销售情况)。

折线图

折线图用一系列以线段相连接的点表示数据。这种类型的图表最适于表示大批分组的数据(例如过去几年的销售总额)。

Area

面积图用填充了颜色或图案的面积来显示数据。这种类型的图表最适于显示有限数量的若干组数据(例如,AZ、CA、OR 和 WA 地区在销售总额中所占的百分比)。

饼图

饼图用分割并填充了颜色或图案的饼形来表示数据。饼图通常用来表示一组数据(例如销售占整个库存的百分比),然而,您也可以选择多个饼图来显示多组数据。

圆环图

圆环图类似于饼图,将数据显示在圆圈或圆环上。例如,如果在一个特定报表上绘制按地区分类的销售图表,会在圆环的中心看到销售总量(数据),各地区的销售额以不同颜色显示在圆环上。像饼图一样,您可以选择多个圆环图来显示多组数据。

三维梯形图

三维梯形图以一系列三维对象显示数据,这些三维对象在三维平面并列排列。三维梯形图显示报表数据中的极端情况。例如,客户以及国家/地区间的销售额差异在此图表中可以动态地显示出来。

242Crystal Reports 用户指南

三维曲面图

三维平面图展示多组数据的地形视图。例如,如果需要一张图表,以可视的动态及相互关联的格式、按客户及国家/地区显示销售数量,或许会考虑使用三维平面图。

XY 散点图

XY 散点图是由代表信息池中特定数据的绘制点组成的集合。XY 散点图允许用户考察大范围的数据来确定趋势。例如,如果输入客户的信息(包括销售、产品、国家/地区、月份、年份),便会得到一个由代表客户信息池的绘制点组成的集合。通过查看 XY 散点图上的所有数据,可以推测出为什么某些产品的销量比其他产品好,或为什么某些地区的购买力比其他地区强。

雷达图

雷达图将国家/地区或客户等分组数据放置于雷达的边缘。雷达图将数值按升序从中心向边缘排列。通过这种方式,用户一看便知特定分组数据与全体分组数据的关系。

气泡图

气泡图(XY 散点图类型的扩展)将数据表示为一系列气泡,气泡的大小与数据量成正比。使用气泡图表示产品在某地区的销量很有效,气泡越大,此地区的销量就越大。

股票图

股票图用来表示数据值的高低。在监视金融或销售行为方面很有用。注意: Crystal Reports 提供了两种可能的股票图格式:“最高-最低价位”和“开盘-最高-最低-收盘价位”。其中每种类型都需要一系列值,这些值是按其名称中指定的顺序排列的。

数轴图

数轴图是以数值字段或日期/时间字段作为其“依据”字段的条形图、折线图或面积图。数轴图提供了一种缩放 X 轴的值的方法,从而创建真正的数值 X 轴或真正的日期/时间 X 轴。

量度图

量度图以图形化的方式将数值显示为量具上的点。同饼图类似,量度图通常用于一组数据(例如,整个库存中销售所占的百分比)。

绘制图表概念243

甘特图

甘特图是一种水平条形图,通常用于时间表的图形化表示。横轴显示时间范围,纵轴显示一系列任务或事件。图表上的水平条表示纵轴各项的事件序列及时间范围。在创建甘特图时应仅使用日期字段。为数据轴选择的字段应设置为“对于每个记录”,并且应将开始和结束日期字段添加到“图表专家”中“数据”选项卡的“显示值”区域。

漏斗图

漏斗图通常用于表示销售过程的各个阶段。例如,为每个阶段显示的潜在收入金额。在确定组织的销售过程中可能存在的问题时,此类型的图表也很有用。漏斗图与堆积条形图之间的相似之处在于,它们都表示图表中包含的分组的 100% 汇总值。

直方图

直方图是一种用于描绘测量值与平均值有何不同的条形图类型。借助分布的形状和分布的宽度(偏差),它可以帮助用户确定过程中的问题的原因。在直方图中,频率由条形的面积而不是条形的高度表示。

14.1.4在哪里放置图表

图表的位置决定显示哪些数据以及在哪里打印。例如,放置在“报表页眉”节中的图表包含了整个报表的数据,而放置在“组页眉”或“组页脚”节中的图表只显示特定于组的数据。

?

?注意: 如果报表包含子报表,也可以将图表放置于子报表中。请参阅第401 页上的 “子报表”。默认情况下,在插入图表或图表对象框架时,会将它放置在“报表页

眉”中。

14.1.5使用图表深化

图表不仅是一种表现数据的方式,它还是一种分析工具。将光标移动到“预览”选项卡上组图表的某一节上方,以使指针变成一个“深化”光标,然后双击以查看图表中该节的基础详细资料。

14.1.6使用图例深化

如果图表中包含一个或多个分组字段,则可以使用图表图例来深化各个分组。双击图例中标志和文本上的“深化”游标,查看图表此节的详细资料。

244Crystal Reports 用户指南

14.2创建图表

?

?在报表中插入图表时,您可能会看到以下选项之一:位于“报表页眉”中的图表对象框架。放置了图表框架后,“图表专家”对话框即会出现。有关将图表放置在报表中的哪个位置的更多信息,请参阅 第5 页上的 “在哪里放置图表”。 自动插入“报表页眉”中的图表。

在某些情况下,例如当报表中至少有一个组和一个汇总字段时,会自动将图表添加到“报表页眉”中,并且“图表专家”对话框不会出现。这通常会在您依据交叉表汇总或 OLAP 多维数据集绘制图表时发生,但也可能会在您依据汇总或小计字段绘制图表时发生。

14.2.1在详细资料或公式字段上绘制图表(高级布局)

“高级”布局允许您根据特定值创建图表。因为图表是一种表示汇总信息的好方法,所以通常基于报表的汇总字段。使用“高级”布局,您可以使用报表“详细资料”节的值来创建图表,而无须使用汇总字段。?

?若要创建基于“高级”布局的图表,您必须指定以下两方面内容:条件(可以有两个)。值(可以有多个值)。

14.2.1.1 条件

条件用来指定什么时候绘制点。例如,显示您的客户去年销售额的图表使用客户姓名字段作为条件。每当条件改变(即客户姓名改变)时,即绘制一个点。

您也可以选择为每个记录绘制一个点,或为全部记录绘制一个点。14.2.1.2 Value

“高级”图表使用数值来指定将哪些信息绘制成图表上的点。例如,若要创建显示您的客户去年销售额的图表,去年的销售额字段便是值。X在详细资料或公式字段上绘制图表

1在“插入”菜单中,单击“图表”。

对象框架会出现在“报表页眉”区域中。

提示:创建图表的另一方法是单击“插入工具”工具栏上的“插入图

表”按钮。

创建图表245

2

3

4将框架拖到“报表页眉”中的所需位置。显示“图表专家”对话框。在“类型”选项卡上,从“图表类型”列表中选择一个图表类型。单击数据演示效果最好的图表子类型。请参阅 第2 页上的 “图表类型”。单击“数据”选项卡。

5

6

7

8

9

10

11

12在“布局”区,单击“高级”(如果尚未被选中)。在“数据”区域,指定要作为条件使用的数据库字段。可以从列表中选择“更改主体”,然后在列表下方的框中最多添加两个数据库字段。“图表专家”对话框中的箭头按钮使您能够将字段从一个列表移至另一个列表。单箭头只移动选定字段;双箭头则可同时移动所有字段。将希望用作值的数据库字段添加到“显示值”列表。如果不希望 Crystal Reports 自动汇总某一公式字段的图表值,请选择“不汇总”复选框。如果“坐标轴”和“选项”选项卡出现,则可以自定义某些图表属性,如轴的缩放比例、图例和数据点。单击“文本”选项卡。接受默认标题信息或将新标题添加到图表。单击“确定”。

注意: 图表插入时,它可能覆盖报表的一部分。移动并调整图表大小

使它适合于报表。

水晶报表Crystal Reports培训教程 35_水晶报表教程

246Crystal Reports 用户指南

14.2.2在汇总或小计字段上绘制图表(分组布局)

您所创建的很多图表是根据报表中的汇总或小计字段绘制的。为了创建这些图表,您必须先在报表的组页眉或页脚中插入汇总或小计。有关插入汇总或小计的更多信息,请参阅 第160 页上的 “汇总分组的数据”和 第164 页上的 “小计”。

X在汇总或小计字段上绘制图表

1在“插入”菜单上,单击“图表”。

对象框架会出现在“报表页眉”区域中。

提示:创建图表的另一方法是单击“插入工具”工具栏上的“插入图表”按钮。

将框架拖到“报表页眉”、“组页眉”或“组页脚”中的所需位置。显示“图表专家”对话框。

注意:您可能会看到“报表页眉”节中的默认图表而不是看到“图表专家”对话框。要选择不同的图表类型,请右击该默认图表,然后单击“图表专家”。显示“图表专家”对话框。

在“类型”选项卡上,从“图表类型”列表中选择一个图表类型。 单击数据演示效果最好的图表子类型。请参阅 第2 页上的 “图表类型”。

单击“数据”选项卡。

在“布局”区,单击“分组”(如果尚未被选中)。

在“数据”区中的“依据”列表内,单击图表所基于的分组字段,然后在“显示”列表内,单击希望显示在图表上的汇总字段。

如果“坐标轴”和“选项”选项卡出现,则可以自定义某些图表属性,如轴的缩放比例、图例和数据点。

单击“文本”选项卡。

接受默认标题信息或将新标题添加到图表。

单击“确定”。2345678910

注意: 图表插入时,它可能覆盖报表的一部分。移动并调整图表大小

使它适合于报表。

创建图表247

14.2.3在交叉表汇总上绘制图表(交叉表布局)

Crystal Reports 允许您在交叉表报表中包含基于汇总值的图表。例如,使用显示某种商品在美国各地区销售量的交叉表时,可能想用一个图表来显示各地该商品的销售额占总销售额的百分比。

若要创建交叉表图表,报表中必须有交叉表。有关更多信息,请参阅第279 页上的 “交叉表对象”。

X在交叉表汇总上绘制图表

1

2选择绘制图表所基于的交叉表。在“插入”菜单上,单击“图表”。

对象框架会出现在“报表页眉”区域中。

提示:创建图表的另一方法是单击“插入工具”工具栏上的“插入图表”按钮。

将框架拖到“报表页眉”中的所需位置。

显示“图表专家”对话框。

注意:您可能会看到“报表页眉”节中的默认图表而不是看到“图表专家”对话框。要选择不同的图表类型,请右击该默认图表,然后单击“图表专家”。显示“图表专家”对话框。

在“类型”选项卡上,从“图表类型”列表中选择一个图表类型。单击数据演示效果最好的图表子类型。请参阅 第2 页上的 “图表类型”。

单击“数据”选项卡。

在“布局”区,单击“交叉表”(如果尚未被选中)。

在“数据”区的“依据”列表中,单击图表所基于的分组字段。如有必要,在“细分依据”列表中,单击希望图表所基于的次要行或列。

然后在“显示”列表中,单击希望显示在图表上的汇总字段。

如果“坐标轴”和“选项”选项卡出现,则可以自定义某些图表属性,如轴的缩放比例、图例和数据点。

单击“文本”选项卡。

接受默认标题信息或将新标题添加到图表。

单击“确定”。345678910111213

注意: 图表插入时,它可能覆盖报表的一部分。移动并调整图表大小

使它适合于报表。

248Crystal Reports 用户指南

14.2.4在 OLAP 多维数据集上绘制图表(OLAP 布局)

OLAP 布局允许您在 OLAP 网格上绘制图表。为了创建 OLAP 图表,报表中必须首先有 OLAP 网格。有关更多信息,请参阅 第312 页上的“创建 OLAP 报表”。

X在 OLAP 多维数据集上绘制图表

1

2选择要为其绘制图表的 OLAP 网格。在“插入”菜单上,单击“图表”。

对象框架会出现在“报表页眉”区域中。

提示:创建图表的另一方法是单击“插入工具”工具栏上的“插入图表”按钮。

将框架拖到“报表页眉”中的所需位置。

显示“图表专家”对话框。

注意:您可能会看到“报表页眉”节中的默认图表而不是看到“图表专家”对话框。要选择不同的图表类型,请右击该默认图表,然后单击“图表专家”。显示“图表专家”对话框。

在“类型”选项卡上,从“图表类型”列表中选择一个图表类型。然后单击数据演示效果最好的图表子类型。请参阅 第2 页上的 “图表类型”。

单击“数据”选项卡。

在“布局”区,单击“OLAP”按钮(如果尚未被选中)。

在“数据”区的“依据”列表中,单击希望图表所基于的字段。如有必要,在“细分依据”列表中,单击希望图表所基于的次要行或列。

注意:要确保在步骤 3 中所选的图表类型支持次要图表字段。

如果“坐标轴”和“选项”选项卡出现,则可以自定义某些图表属性,如轴的缩放比例、图例和数据点。

单击“文本”选项卡。

接受默认标题信息或将新标题添加到图表。

单击“确定”。34567891011

注意: 图表插入时,它可能覆盖报表的一部分。移动并调整图表大小

使它适合于报表。

使用图表249

14.3使用图表

创建了图表之后,您可能需要添加新标题、表头或图例、更改字体或者甚至更改图表的类型。Crystal Reports 提供了多种用于处理现有图表的选项;要了解更多信息,请从以下列表中选择一个主题:

? 第11 页上的 “使用“图表专家”编辑图表”

? 第11 页上的 “使用“图表选项”菜单项编辑图表”

? 第12 页上的 “使用其他菜单项编辑图表”

? 第13 页上的 “在条形图和折线图中使用缩放功能”

? 第13 页上的 “自动排列图表”

? 第14 页上的 “设置统计图格式”

? 第15 页上的 “在图表上使用延伸功能”

14.3.1使用“图表专家”编辑图表

使用“图表专家”编辑图表使您可以返回到在其中设计图表的专家。您可以修改原来的多项选择,例如要显示的图表类型、图表所基于的数据等。

X用“图表专家”编辑图表

1

2

3

4右击该图表以调出快捷菜单。单击快捷菜单上的“图表专家”。在“图表专家”对话框中,进行所需修改。单击“确定”。

14.3.2使用“图表选项”菜单项编辑图表

图表专家中提供的某些编辑选项也可以直接从“图表选项”菜单中进行访问。此菜单在您右击图表时出现,它还包含许多高级的格式化选项。

以下过程显示如何访问“图表选项”菜单中包含的各个选项。有关如何使用这些功能的更多信息,请单击各个对话框中的“帮助”以打开“图表帮助”。默认情况下,“图表帮助”(Chart.chm) 安装在 \ProgramFiles\Common Files\Business Objects\3.0\ChartSupport\Help目录中。

X更改图表格式

1

2右击图表,然后选择“图表选项”。单击相应的选项卡以更改外观、标题、数据标签等。

250Crystal Reports 用户指南

X更改“数值轴网格”选项

1

2右击图表,然后选择“图表选项”。单击相应的选项卡以更改网格线、轴等。

X更改图表标题

1

2右击图表,然后选择“图表选项”。单击“标题”选项卡并进行更改。

14.3.3使用其他菜单项编辑图表

X应用新模板

1

2右击图表,从菜单中选择“加载模板”。“自定义”模板对话框会出现。

“自定义”选项卡上的选项表示 \Program Files\CommonFiles\Business Objects\3.0\ChartSupport\Templates 下存储自定义图表文件的位置。

注意:只有在您安装 Crystal Reports 时选择“自定义图表”的情况下,自定义图表才可用。

X设置选定图表对象的格式

1

2选择图表上的一个折线、面积或文本对象。右击指定的对象,然后单击“格式”<对象>。

例如,如果您选择饼图片,则将看到“设置饼图片格式”;如果选择面积图或条形图中的项目,则将看到“设置系列标志格式”,依次类推。单击相应的选项卡以更改格式。3

X更改系列选项

1

2选择一个上升体项目(面积、条形、折线、标志、饼图片等)或图例标志。右击指定的区域,然后选择“系列选项”。

注意:除非您按照上一步所述选择一个上升体或标志,否则“系列选项”不可用,而且它本身对于某些图表类型可能并不可用。单击相应的选项卡以更改外观、数据标签等。3

水晶报表Crystal Reports培训教程 35_水晶报表教程

使用图表251

X设置网格线格式

1

2选择图表中的网格线。右击该对象,然后选择“设置网格线格式”。

也可以从菜单中选择“数据 (Y) 轴选项”。

单击相应的选项卡以更改折线、标尺、布局等。3

X选择三维图表的查看角度:

?右击图表,然后从菜单中选择“三维查看角度”。

14.3.4在条形图和折线图中使用缩放功能

在“预览”选项卡中,可以找到用于缩放报表中的条形图和折线图的命令。您可以在任何时候缩放这些图表类型,每次均称为实例特定。如果决定保存已缩放过的图表实例,则必须将该数据与报表一起保存。X放大或缩小条形图或折线图

1

2

3在“预览”选项卡上,右击条形图或折线图以调出快捷菜单。在快捷菜单上,单击“放大”。拖动放大光标,使图表的某节包含在跟踪矩形中。

图表将放大到所选的节。

重复上一步骤进一步放大。

注意:若要查看放大的图表视图上的邻近区域(如条形图中相邻的条),请使用快捷菜单上的“平移”选项。向左或向右拖动平移光标可使图表朝相应方向移动。

若想缩小图表,右击图表以调出快捷方式菜单。

在快捷菜单上,单击“缩小”。

使用缩小游标单击图表。

图表缩小一级。

再次单击图表进一步缩小。45678

14.3.5自动排列图表

如果在“预览”选项卡上移动图表对象或调整其大小,请选择“自动排列图表”功能重置图表。

252Crystal Reports 用户指南

X自动排列图表

1

2在“预览”选项卡上,右击图表以调出快捷菜单。单击快捷菜单上的“自动排列报表”。

Crystal Reports 将图表重置到其原始大小和位置。

14.3.6设置统计图格式

14.3.6.1 更改图表边框

1

2

3

4

5在“设计”或“预览”选项卡上,右击图表以调出快捷菜单。单击快捷菜单上的“设置背景格式”。在“格式编辑器”对话框上,单击“边框”选项卡以查看其选项。更改线型、颜色或粗细。单击“确定”保存更改。

Crystal Reports 使您返回到报表并实现您的更改。

14.3.6.2 根据条件格式化图表

1

2在“设计”或“预览”选项卡上,右击图表以调出快捷菜单。在快捷菜单上,单击“图表专家”,然后选择“颜色突出显示”选项卡。

有关图表颜色格式专家的信息,请在联机帮助中搜索“图表颜色格式专家”。

注意:

?并非在所有图表类型中都可以应用条件格式化。

?面积图必须具有两个“依据”值才能进行条件格式化。

?如果图表类型为折线图,则图表必须包含数据标记,这样您才能

看到条件格式。

?应用条件格式后,必须选中“图表选项”对话框“查看”选项卡

上的“按组分类的颜色”才能看到您的格式。若要设置该选项,请右击图表,指向快捷菜单中的“图表选项”,并从子菜单中选择“常规”。这条说明适用于包含一个“依据”字段的折线图、三维梯形图和三维曲面图,以及包含两个汇总的条形图、数轴图、三维曲面图、雷达图、股票图和量度图。

单击“确定”。3

使用图表253

14.3.6.3 更改图表的图例文本

1在“预览”选项卡上,单击图表的图例中的文本以将其选中。

提示:确保选中的是文本,而不是整个图例。

右击图例文本并从快捷菜单中选择“编辑轴标签”。

在“标签别名”对话框中,添加要显示在“显示的标签”字段中的文本。单击“确定”。234

14.3.7在图表上使用延伸功能

因为图表只能在报表的某些节打印,延伸功能使您能够进一步控制报表的整体外观。图表无须打印在所代表的数据前面,能够显示在数据旁边从而使得报表更易读。

这便是您利用报表数据延伸图表时报表的外观。

X延伸图表

1

2创建图表并将其放置在“报表页眉”节中。请参阅 第6 页上的 “创建图表”。在“报表”菜单上,单击“节专家”。

提示:完成此项任务的另一方法是单击“专家工具”工具栏上的“节专家”按钮。

出现“节专家”对话框。

在“节”区中,单击“报表页眉”,然后选择“延伸到后续节”复选框。单击“确定”。

Crystal Reports 使您返回到报表。您的图表便会延伸至其下面的节。如果需要,请移动图表或调整其大小。345

第15章 地图功能

15.1地图功能的概念

15.1.1地图功能概述

通过 Crystal Reports,可以在报表中包含地理地图。地图能帮助更有效地分析报表数据和辨别趋势。例如,可以创建一个按地区显示销售额的地图。于是可以:

?使用五种地图类型之一分析数据。

?调整地图的外观和结构(以便更好地确定趋势)。

?深化地图区域以查看基础数据。

15.1.2地图布局

“地图专家”提供了四种与某几组数据相应的布局。

可以创建具有下列布局中任何一种的地图,并且,根据所用的数据,可以把地图从一种布局更改为另一种。

高级

当使用多个地图值或者在报表中没有组或汇总时,使用“高级”布局。组

“组”布局是一种简化布局,其中显示根据地理字段(例如“地区”)变化的汇总。

注意: 为了使用“组”布局创建地图,必须至少有一个组以及至少一个用于该组的汇总字段。

交叉表

在“交叉表”对象上制作地图时使用“交叉表”布局。交叉表地图不需要组和汇总字段。

255Crystal Reports 用户指南

OLAP

在 OLAP 网格上制作地图时使用 OLAP 布局。OLAP 地图不需要组或汇总字段。

注意: 如果没有与指定的数据相关的地图,则如果地图所放置的部分为空白的话,除非已将其格式化以取消,否则将会出现一个空块。

15.1.3地图类型

“地图专家”还提供了五种基本的地图类型,每一种适合于一种不同的数据分析策略。决定最适合于报表的地图类型时,应该考虑希望分析的数据类型。例如,如果希望地图为每个地理区域(城市、州、国家等)显示一个数据项,则可以使用“范围”、“点密度”或“分级”地图。反之,如果希望地图为每个新地理区域显示一个以上的值,则可以使用“饼图”地图或“条形图”地图。下面是主要地图类型的概述及其最常见的应用。范围

“范围”地图将数据划分成范围,为每一范围分配一种特定的颜色,然后将地图上的每一地理区域编以色码以显示范围。例如,可以创建一个根据地区显示“去年销售额”的地图。如果销售额范围为从 0 到 100,000,可以给此地图五个相等间隔的范围,各个范围间隔为 20,000。可以根据其销售数字用不同深浅的红色(从深红色到浅红色)将每一地区编以色码。然后就可以使用这个地图查看哪里销售额最高。

在相等间隔情况下,可能会得到这样的不良结果:除可能会有一个地区(例如加利福尼亚)销售额特别高(比如说 98,000)之外,所有地区都在 0 和 20,000 之间。这个地图会是对数据非常扭曲的表现。较好的地图应这样确定范围,比如:0-5000、5000-10000、10000-15000、15000-20000 和 20000 以上。务必要仔细地对范围进行定义。

注意: 每个等分区的结束值作为下一个等分区的起始值进行重复;实际值包含以它开始的分组中。也就是说,上一个示例中的范围实际上是:0-4999、5000-9999,依此类推。

?对范围地图,有四种不同的分配方式。相等计数

此选项以这样一种方式分配间隔:每一间隔中显示相同的地区数(或者尽可能接近相同的地区数)。换句话说,此选项将指定间隔以使地图上每一种颜色指定给相同的地区数。根据单个地区及其汇总值,每一间隔中汇总值的数值量可能相等,也可能不等。

水晶报表Crystal Reports培训教程 35_水晶报表教程

地图功能的概念256

?

?

?相等范围此选项以这样一种方式分配间隔:每一间隔中的汇总值在数值上相等。根据单个地区及其汇总值,每一间隔中的地区数可能相等,也可能不等。自然中断此选项使用特定算法分配间隔,该算法尝试使每个间隔的汇总值和汇总值平均数之间的差减到最小。标准偏差

此选项以这样一种方式分配间隔:中间的间隔在数据值的中数(或平均数)处中断,并且中间范围以上和以下的间隔是中数以上或以下的一个标准偏差。标准偏差是方差的平方根。它表现一组值中的不同值怎样偏离此组值的平均数。

点密度

点密度地图为指定项目的每一次出现显示一个点。例如,可以创建一个“美国”地图,为该国每一个造船厂显示一个点。象田纳西州这样的州中将没有点。然而,在一些沿海的州中,例如南加利福尼亚,能够在地图上计算点的个数,因为它们的散布将相当宽。

“点密度”地图的目的是提供特定项目分布的整体印象。“点密度”地图很象一张美国的夜间卫星照片,在那能看到所有城市的灯光。这样的地图不是一种很精确的交流信息的方式(特别是有大量的项目时),但它是给出分布概观的一种好的方法。

分级

“分级”地图很象“范围”地图;它为指定项目的每一实例显示一个符号。这个符号默认情况下是一个圆形,但是,如果愿意可以选择不同的符号。每个符号与它代表的项目值(在由三个大小组成的范围内)大小成比例。

“分级”地图与“范围”地图交流同样的信息,但在地理区域有明显地理边界的情况下(象在“地区”情况下),通常创建“范围”地图,而显示链接到点而不是精确区域(象在“城市”的情况下)的数据,则使用“分级”地图。

例如,个别地区的地图可以使用分级圆形代表每个办事处的销售额。每个圆形的大小与它所代表的办事处销售额(或销售额范围)成比例。在这个地图上,销售额数字为 70,000 美元的办公室可能表示为一个大圆形,而销售额数字为 20,000 美元的办公室可能表示为一个小圆形。因此,“分级”地图比“范围”地图提供点数据(例如“城市”)的更有效的表现方式,并且它使用大小不同的符号而不是颜色来区分所代表项目在值上的不同。

257Crystal Reports 用户指南

饼图

饼图地图显示每个地理区域的饼图。“饼图”代表组成一个整体的数据项目。饼图的每个扇区代表一个单个的数据项,并显示该项目在总体中所占百分比。例如,可以创建一个按地区显示供热燃料类型的“饼图”地图。可能有四种燃料类型(每一饼图中的四个扇区):电、煤气、木材和太阳能。则每一地区将有一个显示该地区内供热燃料类型细分的饼图。由于华盛顿地区的水电,该州可能使用高百分比(饼的大扇区)的电,而爱达荷州可能使用高百分比(饼的大扇区)的天然气。

可以使用该地图类型比较特定区域内若干项目的分布情况。还可以指定成比例调整饼图大小,以便象“分级”地图中的符号一样,根据基础数据值以不同的大小显示“饼图”。这使您能够比较地区间的总计。条形图

条形图地图类似于饼图地图,但对于某些数据集也许更有用。通常,对于总和不是 100% 的项目,也就是说,对于不构成一个整体的数据项目,或者无关的数据项目,将使用“条形图”地图。例如,可以创建一个按地区显示供热燃料使用的“条形图”地图。可能选择分析三种类型的燃料的使用:电、煤气和太阳能。地图上每一条形图可以包含每种类型的单个条。在本例中,数据项目(电、煤气和太阳能)不构成一个整体。在这些地区,还可能使用其他类型的燃料,比如木材,但该地图只集中注意其中三种。还有,这个地图的目的是将每一地区每一燃料类型的使用和其他所有地区做比较。在“饼图”地图中,可以按其占每一地区中整体燃料使用的百分比显示这三种燃料类型,这虽然能够比较每一地区的百分比,但是由于每一地区都将有相同的总值 (100%),所以可能不能比较每一地区的实际值。

15.1.4地图放置在何处

在选择将地图放置于何处时,将确定包括在地图中的数据的数量。例如,如果将地图放置于“报表页眉”节中,地图包括整个报表的数据。如果将地图放置于“组页眉”或“组页脚”节中,地图显示组特有的数据。这个选择也将确定地图是为整个报表打印一次,还是打印多次(为给定组的每一实例打印一次)。

注意: 如果报表包含子报表,也可以将地图放置于那些子报表中。

15.1.5使用地图深化

地图功能不仅是一种表现数据的方式,它还是一种分析工具。将光标移动到“预览”选项卡上地图的某一节上方,以使指针变成一个“深化”光标,然后双击以查看地图中该节的基础详细资料。

注意: 如果在一个没有相关数据的区域上深化,将得到一个消息指出“无明细记录用于{地区名}”。

创建地图258

15.2创建地图

根据正在为其制作地图的数据的不同,创建地图的过程有所不同。下面几节针对每一种地图布局详述地图制作过程。

15.2.1基于详细资料字段制作地图(“高级”布局)

“高级”布局允许您基于特定值创建地图。使用“高级”布局,您可以使用报表“详细资料”节的值来创建地图,而不必使用汇总字段。?

?若要创建基于“高级”布局的地图,您必须指定以下两方面内容:条件(可以有两个)。值(必须只有一个值)。

15.2.1.1 条件

条件用于指明在地图上的什么地方绘制数据。条件必须是字符串字段。为了生成地图,该字段应包含地理信息。例如,显示各个国家/地区去年销售额的地图使用“国家/地区”字段作为条件。每当条件更改(国家/地区更改)时,地图上的这一区域就会突出显示。

15.2.1.2 Value

“高级”布局使用值来指明当地图上的区域突出显示时,正在针对什么信息制作地图。例如,若要创建显示各个国家/地区去年销售额的地图,“去年的销售额”字段便是值。

X基于详细资料字段制作地图

1在“插入”菜单上,单击“地图”。

提示:完成此项任务的另一方法是单击“插入工具”工具栏上的“插入地图”按钮。

出现

“地图专家”对话框。

259Crystal Reports 用户指南

2

3

4在“数据”选项卡上的“布局”区中,单击“高级”(如果它尚未选定)。在“位置”区中的“放置地图”列表内,指定地图在报表上显示的频率,然后单击“页眉”或“页脚”指定放置地图的位置。在“数据”区中,将希望将地图基于的数据库字段添加到地理字段。

“地图专家”对话框上的箭头按钮使您能够将字段从一个列表移到另一个列表。单箭头只移动选定字段;双箭头则可同时移动所有字段。注意:必须基于某一地理字段(例如“城市”、“地区”或“国家/地区”)制作地图;否则,Crystal Reports 不能生成地图。

将希望随每一更改显示的数据库字段添加到“依据”字段。

将希望用作值的数据库字段添加到“地图值”列表。

如果不希望 Crystal Reports 自动汇总某一公式字段的地图值,请选择

“不汇总值”复选框。567

创建地图260

8单击“类型”选项卡。

9

10

11

12

13单击最能阐明数据的地图类型(“范围”、“点密度”、“分级”、“饼图”或“条形图”)。请参阅 第2 页上的 “地图类型”。在“选项”区中,将格式化选项应用于地图。单击“文本”选项卡。在“地图标题”区中,输入地图标题。在“图例”区中,可以单击下列选项之一:

?“详尽图例”在地图上显示详细图例。

?“精简图例”在地图上显示精简图例。

?“无图例”从地图中排除图例。

如果单击“详尽图例”,则单击“通过地图生成”以使 CrystalReports 创建一个基于地图的图例标题,或单击“指定”输入自己的图例标题和副标题。

单击“确定”。

根据步骤 3 中的选定内容,地图置于报表“页眉”或“页脚”节。1415

15.2.2基于组字段制作地图(“组”布局)

若要基于组制作地图,可以使用“组”布局,其中显示根据地理字段(比如“地区”)变化的汇总(比如“去年销售额”)。为了使用“组”

布局创建地图,必须至少有一个组以及至少一个用于该组的汇总字段。

水晶报表Crystal Reports培训教程 35_水晶报表教程

261Crystal Reports 用户指南

X为组制作地图

1在“插入”菜单上,单击“地图”。

提示:完成此项任务的另一方法是单击“插入工具”工具栏上的“插入地图”按钮。

出现“地图专家”对话框。

在“数据”选项卡上的“布局”区中,单击“组”(如果它尚未选定)。在“位置”区中的“放置地图”列表内,指定地图在报表上显示的频率,然后单击“页眉”或“页脚”指定放置地图的位置。

在“数据”区中的“依据”列表内,单击希望将地图基于的组字段,然后在“显示”列表内,单击希望显示在地图上的汇总字段。

单击“类型”选项卡。

单击最能阐明数据的地图类型(“范围”、“点密度”或“分级”)。请参阅 第2 页上的 “地图类型”。

在“选项”区中,将格式化选项应用于地图。

单击“文本”选项卡。

在“地图标题”区中,输入地图标题。

在“图例”区中,可以单击下列选项之一:

?“详尽图例”在地图上显示详细图例。

?“精简图例”在地图上显示精简图例。

?“无图例”从地图中排除图例。

如果单击“详尽图例”,则单击“通过地图生成”以使 CrystalReports 创建一个基于地图的图例标题,或单击“指定”输入自己的图例标题和副标题。

单击“确定”。

根据步骤 3 中的选定内容,地图置于报表“页眉”或“页脚”节。23456789101112

15.2.3基于交叉表汇总制作地图(“交叉表”布局)

使用“交叉表”布局,可以用地图表示“交叉表”汇总字段。例如,有一个显示美国每一地区产品销售项目总数的“交叉表”,可能希望在其内包括一个地图,来显示每一地区提供的产品的总销售额的百分比。

为了创建“交叉表”地图,在报表中必须有一个“交叉表”。有关“交叉表”的更多信息,请参阅 第279 页上的 “交叉表对象”

创建地图262

X用地图表示交叉表汇总

1在“插入”菜单上,单击“地图”。

提示:完成此项任务的另一方法是单击“插入工具”工具栏上的“插入地图”按钮。

出现“地图专家”对话框。

在“数据”选项卡上的“布局”区中,单击“交叉表”(如果它尚未选定)。

在“位置”区中,单击“页眉”或“页脚”指定放置地图的位置。在“数据”区中的“地理字段”列表内,单击某一地理字段,为地图提供地理区域。

如有必要,在“细分依据”列表中,单击要用地图表示的另一字段。Crystal Reports 使用此字段细分出现在地图中的饼图或条形图。在“地图对象”列表中,单击某一汇总字段,以为地图提供数字数据。单击“类型”选项卡。

单击最能阐明数据的地图类型。请参阅 第2 页上的 “地图类型”。?如果打算为单个字段制作地图,确保从“细分依据”列表中选择“无”,然后选择“范围”、“点密度”或者“分级”地图类型。?如果打算为两个字段制作地图,确保从“细分依据”列表中选择另

一个字段,然后选择“饼图”或者“条形图”地图类型。

在“选项”区中,将格式化选项应用于地图。

单击“文本”选项卡。

在“地图标题”区中,输入地图标题。

在“图例”区中,可以单击下列选项之一:

?“详尽图例”在地图上显示详细图例。

?“精简图例”在地图上显示精简图例。

?“无图例”从地图中排除图例。

如果单击“详尽图例”,则单击“通过地图生成”以使 CrystalReports 创建一个基于地图的图例标题,或单击“指定”输入自己的图例标题和副标题。

单击“确定”。

根据步骤 3 中的选定内容,地图置于报表“页眉”或

“页脚”节。234567891011121314

263Crystal Reports 用户指南

15.2.4基于 OLAP 多维数据集制作地图(OLAP 布局)

使用 OLAP 布局,可以为 OLAP 网格制作地图。为了创建 OLAP 地图,首先报表中必须有 OLAP 网格。有关 OLAP 网格的更多信息,请参阅第312 页上的 “创建 OLAP 报表”。

X为 OLAP 多维数据集制作地图

1在“插入”菜单上,单击“地图”。

提示:完成此项任务的另一方法是单击“插入工具”工具栏上的“插入地图”按钮。

出现“地图专家”对话框。

在“数据”选项卡上的“布局”区中,单击“OLAP”(如果它尚未选定)。在“位置”区中,单击“页眉”或“页脚”指定放置地图的位置。在“数据”区中,单击“依据”列表并选择要将地图基于的字段。注意:该字段应包含地理信息(如“国家/地区”)。

如有必要,单击“细分依据”列表并选择要并入地图的二级行或列。注意:如果选择按二级地图制作字段(行或列)细分,则将影响第 8步中可用的地图类型。

单击“类型”选项卡。

单击最能阐明数据的地图类型。如果没有二级地图制作字段,可以选择“范围”、“点密度”或“分级”;如果 存在二级地图制作字段,可以选择“饼图”或“条形图”。请参阅 第2 页上的 “地图类型”。在“选项”区中,将格式化选项应用于地图。

单击“文本”选项卡。

在“地图标题”区中,输入地图标题。

在“图例”区中,可以单击下列选项之一:

?“详尽图例”在地图上显示详细图例。

?“精简图例”在地图上显示精简图例。

?“无图例”从地图中排除图例。

注意:如果单击“详尽图例”,则单击“通过地图生成”以使 CrystalReports 创建一个基于地图的图例标题,或单击“指定”输入自己的图例标题和副标题。

单击“确定”。

根据步骤 3 中的选定内容,地图置于报表“页眉”或

“页脚”节。23456789101112

使用地图264

15.3使用地图

创建了地图之后,您可能需要添加新标题、表头和图例,并可能需要更改字体或者甚至更改地图类型。Crystal Reports 提供了许多种用于处理现有地图的选项;要了解更多信息,请从以下列表中选择一个主题:? 第11 页上的 “使用“地图专家”编辑地图”

? 第11 页上的 “更改地图标题”

? 第12 页上的 “更改地图类型”

? 第12 页上的 “更改地图层”

? 第13 页上的 “解决数据不匹配”

? 第14 页上的 “更改地理地图”

? 第14 页上的 “放大和缩小地图”

? 第15 页上的 “平移地图”

? 第15 页上的 “地图居中”

? 第15 页上的 “隐藏和显示“地图导航器””

? 第16 页上的 “设置地图格式”

? 第16 页上的 “对地图使用延伸功能”

15.3.1使用“地图专家”编辑地图

用“地图专家”编辑地图使您可以返回到在其中设计地图的专家。您可以修改原来的多项选择,例如要显示的地图类型、地图所基于的数据等。从“设计”选项卡或者“预览”选项卡,可以打开“地图专家”并做修改。

X使用“地图专家”编辑地图

1

2

3

4右击地图以调出快捷菜单。在快捷菜单上,单击“地图专家”。在“地图专家”对话框中,做需要的更改。单击“确定”。

15.3.2更改地图标题

1

2

3

4在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,选择“标题”。在“更改地图标题”对话框中,输入一个新标题。单击“确定”保存更改。

Crystal Reports 使您返回到“预览”选项卡并实现您的更改。

265Crystal Reports 用户指南

15.3.3更改地图类型

从您在“预览”选项卡上右击地图时所显示的菜单中,可以直接更改地图类型并设置地图属性。例如,如果要查看“范围”地图的数据在“点密度”样式下的外观,则可以重排该地图而不必返回到“地图专家”重新处理格式。

X更改地图类型

1

2

3

4

5在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,选择“类型”。出现“自定义地图”对话框。在“地图类型”列表中,单击新的地图类型。在“选项”区中,将格式化选项应用于新地图。可用的属性根据所选择的地图有所不同。单击“确定”保存更改。

Crystal Reports 使您返回到“预览”选项卡并实现您的更改。

15.3.4更改地图层

在 Crystal Reports 中,地图是由若干个层组成的。可以将这些层一层层叠起来以创建更详细的地图。例如,您可能想查看每个国家/地区中主要城市的名称;要实现此目的,可以添加一个包含城市名称的层。该层位于基本的世界地图之上,用于提供详细的信息。

您可以指定要查看所提供的地图层中的哪一层,也可以重新排列选定层的顺序。

X更改地图层

1

2在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,选择“层”。

出现

“层控件”对话框。

水晶报表Crystal Reports培训教程 35_水晶报表教程

使用地图266

3在“层”列表中,单击“向上”或“向下”来排列地图层的顺序。

请注意,某些地图层包含可能会遮盖其他层的详细信息的不透明部分。例如,“海洋”层通常是不透明的;如果将该层放在层列表中的较高位置,它将遮住其他多个层(其他各层看起来消失了,但它们只是被“海洋”层遮住了)。

在“属性”区中,为每一地图层设置属性,指定该层是否可见以及是否自动标记。

“可见”选项指定是否显示层。“自动标签”选项指定是否显示预定义的标签(例如,世界主要城市的名称标签)。

如有必要,单击“显示”以打开“显示属性”对话框。

使用该对话框设置当前层的默认显示模式和缩放范围(最小和最大可能缩放),然后单击“确定”以返回“层控件”对话框。

单击“确定”保存更改。

Crystal Reports 使您返回到“预览”选项卡并实现您的更改。456

15.3.5解决数据不匹配

有时,所处理的地图的地理名称与数据库中的不同。例如,欧洲地图可能使用“英国”,而数据库使用缩写“U.K”。必须解决该数据不匹配后,地图才能显示所选地理区域的信息。

X解决数据不匹配

1

2在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,选择“解决不匹配”。

出现“解决地图不匹配”对话框。

单击“解决不匹配”选项卡以查看数据库和地图之间不对应的地理名称的列表。

在“分配此字段名称”列表中,单击要解决的字段名称。

若要分配标题,请单击“到此地图名称”列表中的一个关键字。如果有匹配,则单击“匹配”。

新的分配将显示在“解决不匹配”选项卡的“匹配结果”部分。一旦完成了解决数据不匹配,单击“确定”。

现在地图就可以显示所选择地理区域的数据了。34567

267Crystal Reports 用户指南

15.3.6更改地理地图

如果更喜欢将数据值以不同的地理地图显示,则使用“更改地图”对话框指定更改。

X更改地理地图

1

2在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,单击“解决不匹配”。

出现“解决地图不匹配”对话框,显示正在使用的当前地图的名称,以及可以从中选择替换地图的列表。

在“可用地图”列表中,单击要使用的新地图。

单击“确定”保存更改。

Crystal Reports 使您返回到“预览”选项卡并实现您的更改。34

15.3.7放大和缩小地图

1

2

3在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,单击“放大”。在要查看的地图片段周围拖动选择光标。

地图放大一级。

再次选择区域并拖动光标可进一步放大。

若要缩小地图,请右击地图以调出快捷方式菜单。

在快捷菜单上,单击“缩小”。

单击该地图。

地图缩小一级。

再次单击地图可进一步缩小。

注意:

如果地图对于组中每一实例出现一次,则指定的任何平移或缩放设置都是对于特定实例的。换句话说,如果在一个组页眉中的地图上放大,这个设置只是对于那个组页眉的。页眉并没有更改。用这种方法,可以为每一地图进行不同的设置。

如果从“文件”菜单中选择了“用报表保存数据”选项,平移和缩放设置将同报表一起保存。如果没选此选项,则只保存默认地图设置。45678??

使用地图268

15.3.8平移地图

1

2

3在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,单击“平移”。将平移光标拖至所需的地图节。

15.3.9地图居中

1

2在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,单击“地图居中”。

15.3.10隐藏和显示“地图导航器”

“地图导航器”提供当前显示的地图的小比例版本,使您可以选择要平移的区域。通过平移,您可以根据需要快速拖动以更改地图的焦点。之后可以使用“地图居中”命令将地图返回到显示区中央。

有隐藏或显示“地图导航器”的选项。

X隐藏“地图导航器”

1

2在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,单击“地图导航器”。

“地图导航器”将从“预览”选项卡中删除。

X显示“地图导航器”

1

2在“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,单击“地图导航器”。

“地图导航器”将显示在

“预览”选项卡上。

269Crystal Reports 用户指南

15.3.11设置地图格式

15.3.11.1 更改地图边框

1

2

3

4

5在“设计”或“预览”选项卡上,右击地图以调出快捷菜单。在快捷菜单上,单击“设置地图格式”。在“格式编辑器”对话框上,单击“边框”选项卡以查看其选项。从地图边框中更改线形、颜色、背景颜色以及添加或删除阴影。单击“确定”保存更改。

Crystal Reports 使您返回到报表并实现您的更改。

15.3.12对地图使用延伸功能

既然地图只能打印在报表的特定区域和节中,延伸功能使地图更加有用。可以将地图显示在其所代表的数据旁边,而不是将地图打印在这些数据前面,这样使报表更易于阅读并且更易于理解。

X延伸地图

1创建地图并将其放置于“报表页眉”节。

有关更多信息,请参阅 第5 页上的 “创建地图”。

在“报表”菜单上,单击“节专家”。

提示:完成此项任务的另一方法是单击“专家工具”工具栏上的“节专家”按钮。

出现“节专家”对话框。

在“节”区中,单击“报表页眉”,然后选择“延伸到后续节”复选框。单击“确定”。

Crystal Reports 使您返回到报表。现在地图就可以延伸到其下的节。如果需要,移动地图或调整地图大小。2345

第16章 OLE

16.1OLE 概述

对象链接和嵌入 (OLE) 使您得以从其他应用程序(OLE 服务器应用程序)将对象(OLE 对象)插入报表之中,如果必要的话,还可以在Crystal Reports 中使用这些应用程序编辑该对象。

如果没有使用 OLE,则必须退出 Crystal Reports,打开原始应用程序,更改该对象,然后返回 Crystal Reports,删除最初插入的对象,再插入修订过的对象。

注意: 如果要在 BusinessObjects Enterprise 中或通过报表应用程序服务器 (RAS) 使用 Crystal 报表,请将源文件复制到可由这样一些网络帐户访问的网络文件夹:在这些帐户下,处理服务器(作业服务器、页面服务器、RAS)正在运行。确保报表设计者的帐户也具有访问该网络文件夹的权限。将链接的 OLE 对象插入 Crystal Reports 中时,请使用 UNC 路径。

16.1.1OLE 术语

在使用 Crystal Reports 中的 OLE 对象之前,回顾一些术语会很有益处:

?OLE

OLE 是 Object Linking and Embedding(对象链接与嵌入)的缩写形式。它是指创建复合文档的能力,即所创建的文档包含来自其他应用程序的元素,并且这些元素可用原始应用程序进行编辑。

?OLE 对象

从广义上讲,OLE 对象是数据的一种表示方法,这些数据先在另一个应用程序中创建且与创建它的应用程序保持某种关系。若作为 OLE对象插入接收文档中,“画图”中创建的位图、Excel 电子表格或者来自 MS Graph 的图形都可以成为 OLE 对象如果它们不作为 OLE 对象插入,那么它们与原始应用程序之间没有任何关系。

水晶报表Crystal Reports培训教程 35_水晶报表教程

271Crystal Reports 用户指南

?

?

?

?OLE 容器应用程序OLE 容器应用程序是一种可以包含并处理在其他应用程序(如“画图”或 Excel)中创建的 OLE 对象的应用程序。Crystal Reports 是一种容器应用程序。容器文档容器文档是使用容器应用程序创建的文档,其中包含一个或多个 OLE对象。OLE 服务器应用程序OLE 服务器应用程序是允许其文档作为 OLE 对象插入到 OLE 容器文档中的应用程序。例如,Microsoft Word 和 Excel 就既是 OLE 服务器又是 OLE 容器的应用程序。也就是说,它们既可创建新的 OLE对象,也可包含在其他地方创建的 OLE 对象。服务器文档

服务器文档是在服务器应用程序中创建的文件,它存储原始 OLE 对象。

16.1.2OLE 对象的类型

?

?

?静态对象静态 OLE 对象是对象的图片,它可以显示和打印,但不能在原地进行编辑。它与服务器应用程序之间没有连接。静态对象有两种:静态位图和静态图元文件。嵌入对象嵌入对象包含对象的某种表示形式以及定义其内容的信息。它与服务器文档中的原始对象没有连接。一般来讲,当需要独立于原始服务器文档之外编辑对象时使用嵌入对象。链接对象

链接对象包含数据的某种表示形式和一个指向其原始文件的链接。一般来讲,当服务器文档中的数据不断变化,而您希望在打开报表时对报表中的对象进行更新,则使用链接对象。

16.1.3常规 OLE 注意事项

?当使用 OLE 功能时需要记住几个要点。当双击一个嵌入的 OLE 对象时,会激活该对象以进行编辑,Report

Designer 还会将其菜单和工具栏与对象的服务器应用程序的菜单和工具栏合并在一起。如果该 OLE 服务器应用程序不支持此行为,则该对象将显示在一个单独的窗口中。编辑完成后,在对象外单击,Report Designer 工具栏会重新出现。

将 OLE 对象插入报表272

?当双击一个链接的 OLE 对象时,程序会打开该对象的服务器应用程

序,并在其中显示该对象且该对象可以进行编辑。不能在 CrystalReports 中即席编辑链接对象,因为您正在处理原始对象。由于对象能够链接到多个文档,所以在服务器应用程序中显示原始对象将对编辑器的访问限制为每次一个。

16.2将 OLE 对象插入报表

?

?将 OLE 对象插入应用程序有若干种方法。可使用“插入”菜单上的“OLE 对象”选项导入一个现有的对象或者创建一个新对象。可以使用这种方法放置嵌入或链接的对象。可使用“编辑”菜单上的“选择性粘贴”从 OLE 服务器应用程序复

制或剪切对象并将其粘贴到报表中。如果该对象可以多种格式进行粘贴,则需要决定使用哪种格式。例如,当插入来自 Microsoft Word文档的文本时,可将该文本粘贴为 Microsoft Word 文档文本(可在Word 中编辑),或者粘贴为图元文件,而图元文件只是一个不能编辑的文本图形。使用“选择性粘贴”放置嵌入或链接的对象。

注意: 当插入选定信息(大文件的某些部分)时,最好使用“复制”和“选择性粘贴”。当插入整个文件时,单击“插入”菜单中的“OLE对象”选项。

X复制和粘贴 OLE 对象

该过程假设您的计算机上装有是 OLE 服务器应用程序的 MicrosoftExcel 或者其他电子表格程序。

1

2

3

4

5

6

7

8打开 Crystal Reports 和 Microsoft Excel。在 Crystal Reports 中打开一个现有的报表。在 Microsoft Excel 中的单元格 A1 至 A10 中分别键入数字 1 到10 (1-10)来创建一个电子表格。选择 A1 到 A10 的单元格,右击并从 Excel 快捷菜单中选择“复制”。转到 Crystal Reports,然后从“编辑” 菜单中选择“粘贴”。将单元格放入报表的“详细资料”节。右击报表中的电子表格对象,可看到它标识为 OLE 对象,而倒数第三个命令将其标识为工作表对象。双击电子表格对象。

菜单和工具栏变成 OLE 服务器应用程序和 Crystal Reports 两者的菜单和工具栏的合并。现在可以现场编辑对象。由于该对象是嵌入对象,对该对象所做的任何更改都不会对其初始对象产生影响。

273Crystal Reports 用户指南

9结束时在该对象之外单击。

菜单和工具栏还原为 Crystal Reports 的菜单和工具栏。编辑过程所做的所有更改将被保存。

16.3OLE 对象在报表中如何表示

OLE 对象可在报表中以几种不同的格式显示,具体使用哪种格式取决于插入对象的方式。

?如果选择将该对象显示为图标,则报表中将会出现该图标。用户可选择以后通过双击该图标来编辑对象。

?如果对象是从现有文件创建的,那么来自该文件(或图标)的数据将在报表中显示。双击该对象或其图标就可以对该数据进行编辑。?如果想创建一个新对象,所选对象类型的应用程序将打开,可以开始设计该对象。完成后,关闭或退出应用程序。报表中将显示该对象

(或其图标)。

16.4编辑报表中的 OLE 对象

16.4.1现场编辑

现场编辑就是能够在 OLE 容器应用程序(如 Crystal Reports)之中更改 OLE 对象的属性。容器应用程序的菜单项改变为提供来自服务器应用程序的编辑工具,以使更改操作更容易些。

当 OLE 对象放入报表中后,该对象就会成为报表的一部分。若要编辑此对象,请双击该对象,然后使用编辑工具对它进行修改,这些编辑工具可在对象的原始应用程序中或允许现场编辑的类似应用程序中找到。只有在计算机上安装有相应的服务器应用程序时才能编辑 OLE 对象。但即使未安装服务器应用程序,依然可以查看和打印包含 OLE 对象的报表。

16.4.2动态 OLE 菜单命令

选定一个 OLE 对象后,在“编辑”菜单上将出现一个子菜单,该子菜单提供用于此对象的命令。这个子菜单的名称反映该 OLE 对象的类型。该子菜单上的命令也随着对象类型的不同而不同。

可将该对象描述成文档对象、位图图像对象、图片对象、工作表对象或类似描述性对象:

?如果对象是嵌入的,“编辑”菜单将显示那些可用于该类型嵌入对象的命令。

?如果对象是链接的,“编辑”菜单显示用于该类链接对象的命令。

上下文菜单上的命令以相似的方式进行变化。

所提供的这些动态命令使您在处理 OLE 对象时具有更强的控制能力。

处理静态 OLE 对象274

16.4.3OLE 和“插入图片”命令

当用“插入”菜单上的“对象”命令在报表中放入图片时,该图片将被转换成与“Microsoft 画图”(或其他图像编辑应用程序)相关联的嵌入对象或链接对象。

当用“插入”菜单上的“图片”命令在报表中放入图片时,ReportDesigner 将它们转换成静态对象。

静态对象不可编辑。若要编辑静态对象,必须用“编辑”菜单上的“转换”命令将其转换成可编辑类型的对象。

16.5处理静态 OLE 对象

可以将多种不同类型的静态 OLE 对象插入报表。Crystal Reports 支持以下基于像素的图像格式:

?Windows 位图 (BMP)

?TIFF

?JPEG

?PNG

?另外,Crystal Reports 还支持以下基于矢量的图像格式:Windows 图元文件(WMF 和更新的增强图元文件格式)。

注意: 宽静态 OLE 对象可以跨多个页面。此功能可能导致在报表中出现两个或更多的水平页。如果这不是您想要的效果,则应调整静态OLE 对象的大小。另外,建议您不要为任何跨几个页面的静态 OLE 对象使用“在水平页上重复”选项。

X若要插入静态 OLE 对象

1

2打开或创建一个想在其中插入静态 OLE 对象的报表。单击“插入”菜单上的“图片”。

提示:实现此目的的另一种方法是单击“插入工具”工具栏上的图片按钮。

出现“打开”对话框。

从您有权访问的目录中选择图片(.bmp、.tiff、.jpg、.png 或 .wmf)。单击“打开”。

当对象框架出现后,将图片放置到“报表页眉”节的最左侧。

右击该图片,注意该图片在快捷菜单标识为 OLE 对象。

当双击该对象时,什么都不会发生。因为静态 OLE 对象不能编辑。34567

275Crystal Reports 用户指南

动态化的静态 OLE 对象是您通过使用文件路径或 URL 在 CrystalReports 中访问的图片或元文件。通常,如果知道以字符串字段形式存储在数据库中的图片或元文件的路径(也即数据库中没有存储实际的对象),您可以使用此选项。当您将图片或元文件存储在网络共享位置中,并且知道这些对象有时会发生变化时,也可以使用此选项。

这些动态化的静态 OLE 对象(或动态图形)的功能是在 CrystalReports 中通过使用条件格式设置公式创建的,该公式允许您通过引用来链接到静态 OLE 对象。

注意:

?此功能将在您刷新报表数据时激活;因此,当您在 Crystal Reports

中单击“刷新”按钮之前,您可能不会注意到静态 OLE 对象中的变化。

?当您在 BusinessObjects Enterprise 中计划包含动态化的静态 OLE

对象的报表时,所创建的实例将包含在您计划 Crystal 报表时存在于该报表中的静态 OLE 对象的版本。BusinessObjects Enterprise不会为每个实例动态更新对象。

?在此版本中,为动态化的静态 OLE 对象使用绝对或相对路径的报表

在 BusinessObjects Enterprise 环境中不受支持。如果您打算将包含动态化的静态 OLE 对象发布到 BusinessObjects Enterprise,则建议您为 OLE 对象使用 URL 链接。

X使静态 OLE 对象成为动态

1右击插入的静态 OLE 对象,然后从快捷菜单中选择“格式化图形”。

注意:开始使某个静态 OLE 对象成为动态的过程时,要先按通常方式将该对象插入报表。此对象将成为默认对象。如果 CrystalReports 无法找到指向对象的动态引用,则会改为使用默认对象。2在“格式化编辑器”中,单击“图片”选项卡,然后单击邻近“图形

位置”标签的“条件公式”按钮。

3在公式工作室中,创建指向静态 OLE 对象的路径。

例如,如果路径存储在某个数据库字段中,请将该字段添加到公式。4单击“保存并关闭”返回到“格式化编辑器”。

5单击“确定”返回到报表。

6单击“刷新”以更新指向静态 OLE 对象的引用链接。

X将静态 OLE 对象转换成位图图像对象

1右击插入的静态 OLE 对象,然后从快捷菜单中选择“转换图片对象”。

显示

“转换”对话框。

水晶报表Crystal Reports培训教程 35_水晶报表教程

处理嵌入和链接的对象276

2从“对象类型”列表中选择“画笔图片”,然后单击“确定”。

这样就将静态 OLE 对象转换成可修改的 OLE 对象了。

注意:如果原始文件为图元文件,则此选项不显示。

右击刚才已转换的对象。

快捷菜单上的命令现在变成了“位图图像对象”。

双击该对象。

计算机上安装的“Microsoft 画图”或其他图形应用程序将会打开。34

16.6处理嵌入和链接的对象

由于嵌入和链接的对象各自具有不同的属性,对于您来讲,重要的是当决定使用哪种 OLE 格式时要考虑其各自的功能。

16.6.1嵌入对象

嵌入对象能够在 Crystal Reports 创建,或者利用已经存在的文件创建。如果利用现有的文件,将该对象复制到报表中。

当对嵌入对象进行更改时,对原始文件不会有影响,反之亦然。仅对报表内的对象进行更改。

X若要插入嵌入 OLE 对象

1

2单击“设计”选项卡。单击“插入”菜单上的“OLE 对象”。

出现“插入对象”对话框。

选择“由文件创建”。

该对话框发生变化,使您得以键入对象名或进行浏览。

单击“浏览”,然后选择位图文件 (BMP)。

单击“打开”以返回“插入对象”对话框。

单击“确定”按钮返回报表。

出现一个对象框架。

将对象放置在恰好在第一幅图片右侧的“报表页眉”节中。

右键单击该图片,可观察到在快捷菜单上该对象标识为“OLE 对象”。快捷菜单上的倒数第二个命令将其识别为“位图图像对象”。该对象是一个嵌入 OLE 对象。345678

277Crystal Reports 用户指南

9双击该对象。

注意:虽然您仍处于 Crystal Reports 中,但它的菜单和工具已与Microsoft“画图”或计算机上安装的其他图形软件包的菜单和工具整合。这些工具可用来现场编辑位图。请记住虽然您使用的是 OLE服务器应用程序的工具,但也不能处理原始文件;您使用的是一份副本,在此处所做的一切都不会影响原始文件。

16.6.2链接对象

当将链接对象插入到报表时,Windows 复制一份来自已存在文件的数据快照(而不是数据本身)。该对象的图像以及对创建该对象所用数据的引用一起添加到报表中。实际数据保存在原始文件中。

当对象在报表内激活时,原始文件也在创建它的应用程序中打开。所做的任何更改也直接影响原始文件。

如果想使对象中的数据可为其他应用程序所用,并始终反映对数据所做的最新更改,那么将该对象链接到报表中。每当加载报表时,从源文件刷新自动链接;而手动链接只在请求时才刷新。可在“编辑链接”对话框中强制刷新、断开链接或重新定义链接。

当有一个链接对象,并用“链接”对话框断开了该链接时,与服务器文档中原始数据的所有连接都将断开。容器应用程序中的链接对象仅仅是该对象的一种表示法以及该对象与服务器文档之间的链接。链接断开之后,剩下的只是该链接的表示形式,它与原始数据或服务器应用程序的编辑功能之间不再有关系。在这种情况下,Crystal Reports 将该对象转变成静态对象,即一个独立对象,既不能使用 OLE 功能对其进行编辑,也不能将其转换成可编辑的 OLE 对象。

X若要链接位图图像对象

1单击“插入”菜单上的“OLE 对象”。

出现“插入对象”对话框。

选择“由文件创建”。

对话框发生变化,使您得以输入对象名或进行浏览。

单击“浏览”,然后选择位图文件 (BMP)。

单击“打开”以返回“插入对象”对话框。

选择“链接”复选框。2345

处理嵌入和链接的对象278

6单击“确定”按钮返回报表。

出现一个对象框架。

将该对象紧挨嵌入对象的右侧放置。

右击该对象,可观察到该对象标识为“OLE 对象”。

快捷菜单上的倒数第二个命令将该对象标识为“链接位图图像对象”。双击该对象。

“Microsoft 画图”或者使用的图形应用程序打开,显示原始文件。对原始文件所做的任何更改都将会反映到报表中出现的对象中。

关闭“Microsoft 画图”或者正在使用的图形应用程序,然后返回报表。78910

第17章 交叉表对象

17.1什么是交叉表对象?

“交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个元素组成:?行

?列

?摘要字段

“交叉表”中的行沿水平方向延伸(从一侧到另一侧)。在上面的示例中,“手套”(Gloves) 是一行。

?“交叉表”中的列沿垂直方向延伸(上下)。在上面的示例中,“美

国”(USA) 是一列。

?汇总字段位于行和列的交叉处。每个交叉处的值代表对既满足行条件

又满足列条件的记录的汇总(求和、计数等)。在上面的示例中,“手套”和“美国”交叉处的值是四,这是在美国销售的手套的数量。

?“交叉表”还可以包括若干总计:

280Crystal Reports 用户指南

每行的结尾是该行的总计。在上面的例子中,该总计代表一个产品在所有国家/地区的销售量。“手套”行结尾处的值是 8,这就是手套在所有国家/地区销售的总数。

注意:总计列可以出现在每一行的开头。

?每列的底部是该列的总计。在上面的例子中,该总计代表所有产品在

一个国家/地区的销售量。“美国”一列底部的值是四,这是所有产品(手套、腰带和鞋子)在美国销售的总数。

注意:总计列可以出现在每一行的顶部。

?“总计”(Total) 列(产品总计)和“总计”(Total) 行(国家/地

区总计)的交叉处是总计。在上面的例子中,“总计”列和“总计”行交叉处的值是 12,这是所有产品在所有国家/地区销售的总数。?

17.2交叉表示例

此示例展示如何使用“交叉表”对象使复杂的数据变得易于理解。本报表的目的是分析五种不同的自行车锁在四个不同地区的销售情况(按地区划分的车锁销售报表)。为了更清楚起见,只包含了报表中最基本的信息:

?订单所来自的地区。

?车锁名称。

?所订数量。

第一种浏览数据的方式是采用最基本的报表形式,即未分组、未排序的纵栏式报表。

17.2.1订单数据的报表 - 未排序/未分组

水晶报表Crystal Reports培训教程 35_水晶报表教程

交叉表示例281

此报表给出了详细的信息。每行代表一份订单。对于不同车锁,每个地区都有多份订单。但是由于缺少汇总信息,几乎不可能从这样一张报表中得到任何有用的信息。

下面合乎逻辑的步骤就是以某种方式对数据进行分组。既可以按地区分组也可以按产品线分组。下面一节将展示这两种分组方法。

17.2.2订单数据的报表 - 按地区分组

本报表使用第一个报表中出现的数据,但是将数据按地区分组。同一地区的所有订单组织在一起,但每个地区组里包含不同类型车锁的订单。由于组中包含了不同类型的数据,汇总“数量”字段将确定每一地区车锁销售总数,而不是每一类型的总计。

每一地区组里包含不同类型车锁的订单。

17.2.3订单数据的报表 - 按产品分组

本报表将数据按产品分组。每组显示一个特定产品的所有订单。初看上去似乎很有用,但是过一会即可清楚地看到每一产品组中包括来自若

干不同地区的订单。

282Crystal Reports 用户指南

这个信息是有帮助的,使您离目标更近了一些,但是离得到所需信息还有很长一段距离。

每一产品组包含多个地区的订单。

17.2.4订单数据的报表 - 按地区和产品分组

本报表是下一个合乎逻辑的步骤。如果“按地区分组”报表在每一地区组中包含多种产品,“按产品分组”报表在每一产品组中包含多个地区,那么,将两者合并起来似乎很有意义。这么做其实就是先按“地区”分组,然后再按

“产品”分组。

交叉表示例283

每组包含某一地区某个产品的订单。

但是数据完全分散,仍然难以分析。这种信息是有用的,通过少量的工作就可以使用这样一个报表来得到所需要的比较信息。然而,“交叉表”提供了更好的解决方案。

17.2.5交叉表对象中的订单数据

通过“交叉表”,所需的全部信息都以一种压缩格式提供。此报表给出在每一地区所销售的产品及其销售量。例如,很容易发现,“守护者 XL“U”型锁”(Guardian XL "U" Lock) 在 BC 地区一点也不受欢迎,但在佛罗里达 (Florida) 却是销售量最大的锁;或者,每种锁在阿拉巴马

(Alabama) 都比在加利福尼亚 (California) 卖得多。

284Crystal Reports 用户指南

地区

总计 -- 所有

地区某一产品

产品名称总计 -- 某一

地区某一产品

总计 -- 所有地

区所有产品总计 -- 某一地区所有产品

?

?

?

?

?

?在此“交叉表”中:产品名称组成行标题。地区组成列标题。每一行/列交叉处的值为某一特定地区某一特定产品所有订单的总和;例如,不列颠哥仑比亚省 (British Columbia) 所购买的守护者小型锁 (Guardian Mini Lock) 的总数。每行行尾的总计是所有地区购买某一产品的总计;例如,阿拉巴马州、不列颠哥仑比亚省、加利福尼亚以及佛罗里达购买守护者 ATB锁 (Guardian ATB Lock) 的总数。每列底部的总计是某一地区所订购的各种类型的锁的总数;例如,加利福尼亚购买所有类型的锁的数量。右下角的总计是所有四个地区所有五种类型的锁销售的总计。

这个报表简洁明了,可以很快地比较出客户的购买习惯。

17.3创建交叉表报表

本节介绍在新报表中创建“交叉表”对象的步骤以及如何在已有报表中添加“交叉表”对象。

?

?

?

?在使用“交叉表”对象时应记住以下几点:可以有多个行、列以及汇总字段。可以使用打印时间公式作为行或列。可以使用“运行总计”字段作为汇总字段。您可以在“交叉表”的行上包括组排序(前 N 个或后 N 个)。

注意:

不能将组排序应用于列。

创建交叉表报表285

?

?

?如果需要,可以在一个报表中插入多个“交叉表”对象。可以将“交叉表”插入报表页眉或报表页脚,也可以插入组页眉或组页脚。可以将“交叉表”对象放在子报表中。当要引用来自其他报表中的结

果时,这一点很有用。

X创建新“交叉表”报表

?在“开始页”上,单击“交叉表报表创建向导”。

出现“交叉表报表创建向导”。

17.3.0.1 指定数据源

1在“数据”屏幕上,定位要使用的数据源。

本示例使用 Xtreme 示例数据库。

有关如何选择数据源的信息,请参阅 第42 页上的 “选择要使用的数据库”。

选择表,这些表应包含要加入到报表中的字段。

提示:按住 Ctrl 键单击可选择不连续的字段区域,按住 Shift 键单击可选择连续的一列字段。

本示例使用“客户”、“订单”、“订单细节”以及“产品”这些表格。单击 > 箭头添加选中的表格。

单击“下一步”。

出现“链接”屏幕。234

17.3.0.2 修改链接

1在本示例中,请检查以确认“客户”表格通过“订单”表格以及“订

单细节”表格链接到“产品”表格。

如果不喜欢 Crystal Reports 自动建议的链接,请单击“清除链接”进行修改,然后选择要链接在一起的字段。

单击“下一步”。

出现“交叉表”屏幕。2

17.3.0.3 定义“交叉表”结构

将字段从“可用字段”区添加到“行”区、“列”区和“汇总字段”区。1从“客户”表格中,选择“地区”;然后单击“行”区旁边的 > 箭头。

“地区”字段即添加到“行”区。

提示:选定一个字段并将其拖动到“列”区、“行”区或“汇总字段”区,也可以将其添加到不同的“交叉表”区。

水晶报表Crystal Reports培训教程 35_水晶报表教程

286Crystal Reports 用户指南

2从“产品”表格中,选择“产品类”;然后单击“列”区旁边的 > 箭头。

“产品类”字段即添加到“列”区。

从“订单”表格中,选择“订单金额”;然后单击“汇总字段”区旁边的 > 箭头。

“订单金额”字段即添加到“汇总字段”区。

从“汇总字段”区下面的列表中,选择要对“订单金额”执行的汇总操作。

单击“下一步”。

出现“图表”屏幕。345

17.3.0.4 添加图表

1选择您希望在报表中看到的图表类型:

?条形图

?折线图

?饼图

注意:如果您不想添加图表,则保持“无图表”为选定状态并跳至第8 页上的 “选择记录”。

更改默认图表信息以适合您的报表。

有关创建组图表的更多信息,请参阅 第246 页上的 “在汇总或小计字段上绘制图表(分组布局)”。

单击“下一步”。

出现“记录选定”屏幕。23

17.3.0.5 选择记录

通过此屏幕应用选择条件。将报表中所返回的结果限制为自己感兴趣的记录。

1选择要应用选择条件的字段。

对于本示例选择“地区”。

单击 > 箭头。

该字段即添加到“筛选字段”区,而且在该区下方出现筛选器类型列表。

从筛选器类型列表中选择一种筛选方法。

对于本示例,选择筛选方法“属于”。

在出现的筛选器值列表中,选择一个或多个进行筛选所依据的值,然后单击“添加”。234

创建交叉表报表287

对于本示例,从下拉列表中选择“AZ”、“CA”和“OR”。

本报表将提供亚利桑那州 (Arizona)、加利福尼亚以及俄勒冈州(Oregon) 辅件和自行车销售的细分与汇总。

5单击“下一步”。

出现“网格样式”屏幕。

17.3.0.6 应用预定义的样式并完成报表

1选择样式。

在本示例中选择“初始”。

单击“完成”。

在“预览”选项卡中出现“交叉表”报表。

如果不想让“交叉表”出现在“报表页眉”中,则单击“设计”选项卡,并将“交叉表”移到“报表页脚”中。

注意:

?您也可以将“交叉表”放入“组页眉”或“组页脚”中。?如果将“交叉表”放入“报表页脚”中,则可通过右击“报表页

脚”灰色区并选择“不抑制显示”以便不抑制显示页脚。

单击“预览”选项卡以查看报表。234

X在已有报表中添加“交叉表”

1打开报表。

本示例使用包含在 Feature Examples 目录中的 Group byIntervals.rpt。

单击“设计”选项卡。

在“插入”菜单,单击“交叉表”。

提示:完成此项任务的另一方法是单击“插入工具”工具栏上的“插入交叉表”按钮。

在将交叉表对象拖动到报表时,出现带箭头光标的对象框架。

将对象框架放入“组页眉 #1”的空白区域中,并单击以释放它。一个空的交叉表对象将出现在报表中。您可以将字段从字段资源管理器拖到交叉表中。此示例使用“客户”表中的“客户名称”、“国家/地区”和“去年销售额”。

在字段资源管理器中,选择“客户名称”,然后将它拖到交叉表中。

此字段将是您的列值。2345

288Crystal Reports 用户指南

6将字段拖到交叉表对象的右上角。

您将看到一个位置箭头以显示当您放下该字段时它所出现的位置。在您单击以释放该字段后,它将出现在所选列的右边。

78在字段资源管理器中,选择“国家/地区”,然后将它拖到交叉表中。

此字段将是您的行值。将字段拖到交叉表对象的左下角,然后单击以释放它。

9最后,将“去年销售额”拖到交叉表的“插入摘要”单元格,然后单击以释放它。

提示:请注意,当您将字段放在单元格上时,所有单元格的颜色都会改变。

10单击“预览”选项卡查看交叉表。

X使用交叉表专家将交叉表添加到现有报表

在本示例中,在已有的报表中添加“交叉表”,将北美地区的销售与世界其他地区的销售进行比较。但是,您将使用交叉表专家,而不是通过将字段拖到报表上来定义报表。

1打开报表。

本示例使用包含在 Feature Examples 目录中的 Group byIntervals.rpt。

单击“设计”选项卡。

在“插入”菜单,单击“交叉表”。

提示:完成此项任务的另一方法是单击“插入工具”工具栏上的“插入交叉表”按钮。23

创建交叉表报表289

在将交叉表对象拖动到报表时,出现带箭头光标的对象框架。4将对象框架放入“报表页眉”的空白区域中,并单击以释放它。

一个空的交叉表对象将出现在报表中。

右击交叉表,然后从快捷菜单中选择“交叉表专家”。

出现“交叉表专家”。此对话框由三个选项卡组成:“交叉表”、“样式”和“自定义样式”。5

定义“交叉表”结构

将字段添加到“行”区、“列”区以及“汇总字段”区。

1从“可用字段”列表中,选择“国家/地区”;然后单击“行”区旁

边的 > 箭头。

“国家/地区”字段即添加到“行”区。

提示:选定一个字段并将其拖动到“列”区、“行”区或“汇总字段”区,也可将其添加到不同的“交叉表”区。

从“可用字段”列表中,选择“去年的销售额”;然后单击“汇总字段”区旁边的 > 箭头。

“去年的销售额”字段即被添加到“汇总字段”区。

应用附加结构:

?单击“行”区中的“国家/地区”。

?单击“组选项”。

?从下拉列表中选择“按特定顺序”。

?键入“北美”(North America) 作为“命名组”的名称。?单击“新建”。

?从下拉列表中选择“其中之一”。

?从下拉列表中选择“加拿大”(Canada)、“墨西哥”(Mexico) 和“美国”(USA)。23

单击“确定”关闭

“定义命名组”对话框。

?单击“确定”关闭“交叉表组选项”对话框。?

290Crystal Reports 用户指南

选择预定义样式

1

2单击“样式”选项卡。选择样式。

应用自定义样式

1

2单击“自定义样式”选项卡。按需要自定义样式。

完成交叉表

1

2单击“确定”。在“报表”菜单中,单击“刷新报表数据”。

出现更新后的报表。

17.4使用交叉表

?

?

?

?

?本节说明将“交叉表”添加到报表后,使用“交叉表”的几种方法:以百分比显示值缩写大的汇总字段自定义行/列标签在交叉表中使用运行总计打印跨越多页的“交叉表”

17.4.1以百分比显示值

1右击“交叉表”顶端左侧的空白区域并从快捷菜单中选择“交叉表

专家”。

出现“交叉表专家”。

在“交叉表”选项卡上,选择一个汇总字段;然后单击“更改汇总”。在“编辑汇总”对话框中,选择“以百分比显示”选项,然后选择希望百分比所基于的汇总字段。

选择“行”或“列”,选择依据是您希望水平计算(行)还是垂直计算(列)百分比值。

单击“确定”以关闭“编辑汇总”对话框。

单击“确定”返回“交叉表”。

现在,“交叉表”上汇总字段的值以百分比显示。23456

提示:您也可以通过选择汇总字段并从快捷菜单中选择“编辑汇总”,从交叉表中直接访问“编辑汇总”对话框。

水晶报表Crystal Reports培训教程 35_水晶报表教程

使用交叉表291

17.4.2缩写大的汇总字段

由于“交叉表”汇总字段中的值通常很大,因此 Crystal Reports 允许您缩写这些值。

若要完成此过程,您在处理的报表必须包括名为

cdFormatCurrencyUsingScaling 的自定义函数。称为 CustomFunctions.rpt 的示例报表包括此函数。示例报表位于 CrystalReports 目录中的 \Samples\Chs\Reports 之下。

1注意: 右击要缩写的汇总字段,并从快捷菜单中选择“格式字段”。

出现“格式编辑器”。

在“公用”选项卡上,单击“显示字符串”旁边的条件格式设置按钮。在“格式公式编辑器”的“函数”树中,从“自定义函数”文件夹中选择 cdFormatCurrencyUsingScaling。

完成自定义函数参数的设置,如下所示:

cdFormatCurrencyUsingScaling (CurrentFieldValue,1,"K","M")234

对于第一个参数,从“函数”树的“格式设置函数”文件夹中选择 CurrentFieldValue。此参数定义要汇总的实际值。

?对于第二个参数,输入希望在“交叉表”上显示的小数位数。?对于第三个和第四个参数,输入希望显示为千位和百万位符号的

字符串(用引号括起来)。?

5

6

7 单击“检查”识别出公式中的任何错误。修复“公式检查器”识别出的任何语法错误。当公式具有正确的语法后,单击公式工作室工具栏上的“保存并关闭”。

返回“格式编辑器”对话框。

单击“确定”返回“交叉表”。

您的汇总字段值按照所定义的样式以缩写形式出现。8

注意: 您可以创建自己的自定义函数,也可以复制并修改提供的示例来缩写汇总字段。一般说来,使用“显示字符串”功能时,不需要使用自定义函数。只要其返回值是字符串,您就可以编写所需的任何“显示字符串”公式。

17.4.3自定义行/列标签

默认情况下会根据“交叉表”所基于的数据派生出行标签和列标签。但您也`可以自定义行标签和列标签。

1右击要自定义其标签的行或列,并从快捷菜单中选择“格式字段”。

出现“格式编辑器”

292Crystal Reports 用户指南

2

3在“公用”选项卡上,单击“显示字符串”旁边的条件格式设置按钮。在“格式公式编辑器”中,创建公式文本,该文本用于说明要使用的

自定义名称以及这些名称的应用条件。

有关如何执行此操作的更多信息,请参阅 第229 页上的 “使用条件格式化”。

单击“检查”识别出公式中的任何错误。

修复“公式检查器”识别出的任何语法错误。

当公式具有正确的语法后,单击公式工作室工具栏上的“保存并关闭”。返回“格式编辑器”对话框。

单击“确定”返回“交叉表”。

如果符合所设置的条件,就会出现自定义的行名称和列名称。4567

17.4.4在交叉表中使用运行总计

在“交叉表”对象中,“运行总计”字段可以用作汇总字段。按照第6 页上的 “创建交叉表报表”中的说明创建“交叉表”,但选择一个运行总计字段作为“汇总字段”。

注意: 不能使用“运行总计”字段作为“交叉表”中的列或行。如果需要对“交叉表”的列进行汇总的运行总计,则您必须先按“列”再按“行”对“交叉表”中的记录进行排序。

X对列进行汇总

1

2

3

4

5右击“交叉表”顶端左侧的空白区域并从快捷菜单中选择“交叉表。专家”在“交叉表专家”的“交叉表”选项卡上,确保已经将一个“运行总计”字段添加到“汇总字段”区。单击“确定”返回报表中的“交叉表”。单击“记录排序专家”,并根据在“交叉表专家”中指定为“列”的字段对“交叉表”进行排序。在“交叉表专家”中指定为“行”的字段上创建第二个排序。

如果需要对“交叉表”的行进行汇总的运行总计,则您必须先按“行”再按“列”对

“交叉表”中的记录进行排序。

设置交叉表格式293

X对行进行汇总

1

2

3重复前一过程的第 1 至 3 步。单击“记录排序专家”,并按照在“交叉表专家”中指定为“行”的字段对“交叉表”进行排序。在“交叉表专家”中指定为“列”的字段上创建第二个排序。

如果基于“运行总计”字段添加了“组排序”(前 N 个或后 N 个排序),则按“交叉表”的“行总计”/“列总计”区中显示的运行总计值执行排序,而不是基于汇总字段的总计。而且,在这种情况下,只有在总计数据中才能正确显示运行总计结果,在单元格数据中不能正确显示。

17.4.5打印跨越多页的“交叉表”

当所创建的“交叉表”比设定的页面大小宽或长时,程序会自动地跨越足够的页面进行打印,以适应“交叉表”的大小。在“预览”选项卡中,在每一分页处会出现一条线。为便于阅读,在随后的页面上都会重复列标题。使用“将列保持在同页”选项,行标题也会重复。

X重复行标签

1右击“交叉表”顶端左侧的空白区域并从快捷菜单中选择“交叉表

专家”。

出现“交叉表专家”。

单击“自定义样式”选项卡。

如果需要,则选中“重复行标签”复选框。23

Crystal Reports 允许您指定不水平扩展的报表对象(如文本对象、字段对象、OLE 对象、图表、地图、线条、框等)在交叉表所创建的每个附加水平页上重复。有关更多信息,请参阅 第227 页上的 “在横排页面上重复报表对象”。

17.5设置交叉表格式

Crystal Reports 有强大的格式设置功能,可应用于“交叉表”中。下面几节说明这些关键过程:

?更改交叉表单元格的宽度、高度和对齐方式

?设置整行/整列的背景颜色的格式

?设置个别字段的格式

?一次设置若干字段的格式

?取消“交叉表”数据

?

水平显示汇总字段

294Crystal Reports 用户指南

通过应用背景颜色、边框以及字体等格式设置,可强调重要数据,创建具有专业外观且易于理解的“交叉表”。有关更多信息,请参阅 第220页上的 “格式化属性”。

也可以使用“突出显示专家”将条件格式设置应用于“交叉表”单元格。若要访问“突出显示专家”,请右击要设置格式的单元格,并在快捷菜单上单击“突出显示专家”。有关详细信息,参见 第234 页上的“使用“突出显示专家””。

17.5.1更改交叉表单元格的宽度、高度和对齐方式

1

2

3单击“交叉表”内的单元格激活大小调整手柄。单击并拖动任一大小调整手柄增大单元格的宽度或高度。单击“格式设置”工具栏上的对齐方式选项,更改单元格中数据的对

齐方式。

您可以从“左对齐”、“右对齐”、“居中”和“两端对齐”中进行选择。注意: 更改一个单元格会影响所有同类单元格。例如,更改一个汇总字段单元格的宽度,会同时更改所有其他汇总字段单元格的宽度。

17.5.2设置整行/整列的背景颜色的格式

使用背景颜色强调“交叉表”中的行或列。

1右击“交叉表”顶端左侧的空白区域并从快捷菜单中选择“交叉表

。专家”

出现“交叉表专家”。

单击“自定义样式”选项卡。

单击行(在“行”区)或列(在“列”区),并从“背景颜色”下拉列表中选择颜色。

单击“确定”以返回“交叉表”。

行/列将按要求进行格式设置。234

17.5.3设置个别字段的格式

1右击想要设置格式的字段,并从快捷菜单中选择“格式字段”。

出现“格式编辑器”。

使用“格式编辑器”生成字体、背景、边框、编号、货币符号和打印特性选择。

单击“确定”以返回“交叉表”。

字段将按要求进行格式设置。23

设置交叉表格式295

17.5.4一次设置若干字段的格式

1

2采用按住 Shift 键并单击的方式突出显示所需字段。右击其中任何一个并从快捷菜单中选择“格式对象”。

出现“格式编辑器”。

使用“格式编辑器”生成字体、背景、边框、编号、货币符号和打印特性选择。

单击“确定”以返回“交叉表”。

字段将按要求进行格式设置。34

17.5.5取消“交叉表”数据

?

?

?本节讲述在报表中取消数据的操作步骤。您能够取消:空行和空列。行总计和列总计。小计及其标签

X取消空行和空列

1右击“交叉表”顶端左侧的空白区域并从快捷菜单中选择“交叉表

专家”。

出现“交叉表专家”。

单击“自定义样式”选项卡。

选中“取消空行”或“取消空列”复选框。

单击“确定”。

打印报表时,将不出现空行和/或空列。234

X取消行总计和列总计

1右击“交叉表”顶端左侧的空白区域并从快捷菜单中选择“交叉表

专家”。

出现“交叉表专家”。

单击“自定义样式”选项卡。

选中“取消行总计”或“取消列总计”复选框。

单击“确定”。234

水晶报表Crystal Reports培训教程 35_水晶报表教程

296Crystal Reports 用户指南

X取消小计及其标签

如果“交叉表”中有两个以上的组,则您可以取消其中一个的小计及

标签。

1右击“交叉表”顶端左侧的空白区域并从快捷菜单中选择“交叉表

专家”。

出现“交叉表专家”。

单击“自定义样式”选项卡。

单击要取消小计的字段。

“取消小计”以及“取消标签”复选框激活。

在“组选项”区中,选中“取消小计”复选框。

单击“取消标签”复选框以取消与小计相关的标签。

单击“确定”。23456

17.5.6水平显示汇总字段

如果在“交叉表”中有两个或多个汇总字段,则可以水平显示这些字

段的值,而不是垂直显示(默认)。

1右击“交叉表”顶端左侧的空白区域并从快捷菜单中选择“交叉表

。专家”

出现“交叉表专家”。

单击“自定义样式”选项卡。

在“汇总字段”区中,选择“水平”。

如果希望为汇总字段显示标签,请单击“显示标签”复选框。

标签即沿着为汇总字段选择的方向进行显示。

单击“确定”。2345

第18章 构建查询

18.1连接到 Universe

可以通过“数据库专家”访问 Crystal Reports 中的“Business

Objects 查询面板”。从“创建新连接”节点中选择了“Universe”之后,系统将提示您登录到 BusinessObjects Enterprise,之后就可以选择 Universe 和设计查询。

X连接到 Universe

1

2

3

4在 Crystal Reports 的“文件”菜单上,单击“新建”,然后单击“空白报表”。在“数据库专家”中,双击“创建新连接”。双击“Universe”。登录到 BusinessObjects Enterprise(如果尚未登录)。

有关如何登录到 BusinessObjects Enterprise 的信息,请参阅

第335 页上的 “使用 Enterprise 文件夹”。

选择查询所基于的 Universe,然后单击“打开”。

将出现“Business Objects 查询面板”。5

18.2为查询定义数据选定区域

可以通过使用 Business Objects Universe 中的对象在“查询面板”

中构建查询。Universe 中的对象是信息在数据库中的图形表示方式。Universe 中的对象映射为数据库中的表列和行。

“查询面板”分为若干窗格:

?左边的窗格显示 Universe 所包含对象的树形视图。不能在“查询面板”中添加新对象或编辑现有对象。有关此窗格中可能出现的对象类

型的信息,请参阅 第2 页上的 “快速引用对象”。

注意:可以通过选择“所有对象”来查看此窗格中的所有可用对象。

如果要查看对象如何互相关联,请选择“层次”。此选项为您直观地

呈现了对象的层次结构(如果 Universe 中存在此类结构)。

?“结果对象”窗格,您在其中放置要作为查询部件的对象。

?“查询筛选器”窗格,您在其中放置要用于筛选从 Universe 中所返回数据的对象。在将对象添加到此窗格时,可以定义筛选器。

298Crystal Reports 用户指南

X构建简单的查询

1在“查询名称”字段中,输入查询的名称。

注意:Crystal Reports 使用查询名称作为它为报表创建的 SQL 命

令的名称。在“查询面板”中创建了查询之后,您将在“数据库专家”

的“可用数据源”和“选定的表”区域中看到此名称。

在左边的窗格中选择一个对象,然后双击该对象或将它拖到“结果对

象”窗格中。

“结果对象”窗格中出现的对象将成为您在 Crystal 报表中创建报表

所依据的字段。

为要包括在查询中的每个对象重复前面的步骤。

在左边的窗格或“结果对象”窗格中选择一个对象,然后将它拖到

“查询筛选器”窗格中。

将筛选器添加到“查询筛选器”窗格中,以便基于选定对象限制查询

返回的数据。筛选限制了用户可以看到的数据,并缩短了查询的运行

时间。有关添加筛选器的信息,请参阅 第4 页上的 “创建查询筛

选器”。

单击“确定”。

如果查询包含提示,请在“输入参数值”对话框中选择提示值。

有关使用“输入参数值”对话框的信息,请在Crystal Reports 联机

帮助中按名称搜索该对话框。

如果数据源是安全的,请使用连接对话框登录到 Universe 使用的数

据库。

有关使用支持的连接对话框的信息,请在Crystal Reports 联机帮助

中搜索“数据源连接对话框”。234567

18.2.1快速引用对象

对象是映射到数据库中的数据或数据派生的指定组件。例如,对象可

能代表数据库表中的列,也可能是列中值的汇总。

可以在查询中使用对象来检索报表的数据。例如,人力资源

Universe 中的某些对象可能是“名称”、“地址”和“工资”。

对象可以表示不同类型的信息。

注意: 不能在“查询面板”中直接定义对象。请使用

BusinessObjects Designer 来定义 Universe 中的对象。

编辑现有查询299

对象

维示例说明此对象检索在报表中作为分析基准的数据。维度

对象通常检索字符类型数据(例如,客户名称、

休假地名称或日期)。

此对象提供有关维度的描述性数据。明细总是附

属于维(明细为该维提供附加信息)。例如,

“年龄”是与“客户”维度关联的明细对象。

“地址”提供有关客户的附加信息。

此对象检索对数据库中数据进行计算所得的数值

数据。例如,“收入”是售出项目数乘以项目价

格的计算结果。度量对象通常位于度量类中。明细度量

18.3编辑现有查询

可以返回到“查询面板”来更改现有查询。可以添加或删除对象,也

可添加、编辑或删除筛选器。

X编辑现有查询

1

2

3在 Crystal Reports 中,打开一个以 Universe 作为数据源创建的报表,转到“数据库”菜单,然后单击“数据库专家”。在“数据库专家”中,在“选定的表”列表中右击查询,然后选择“编辑命令”。登录到 BusinessObjects Enterprise(如果尚未登录)。

有关如何登录到 BusinessObjects Enterprise 的信息,请参阅

第335 页上的 “使用 Enterprise 文件夹”。

在“查询面板”中,根据需要编辑您的查询。

编辑完查询后,单击“确定”。

在“数据库专家”中单击“确定”返回到报表。

您在查询中所做的更改即会反映在 Crystal Reports 中。

注意:如果从查询中删除已在 Crystal 报表中使用的对象,您必须

从报表中删除这些对象。

456

300Crystal Reports 用户指南

18.4查看查询后面的 SQL

当您构建查询时,Crystal Reports 将自动生成与查询对应的 SQL,并将其保存为 Crystal SQL 命令对象。有关 SQL 命令对象的详细信息,请在Crystal Reports 联机帮助中搜索“定义 SQL 命令”。

X创建查询时查看 SQL

?在查询面板上单击“查看 SQL”。

将出现 SQL 对话框;它包含组成查询的 SQL。如果在创建查询时要检查 SQL 则使用此选项。

X创建查询后查看 SQL

?在 Crystal Reports 中,打开一个以 Universe 作为数据源创建的

报表,转到“数据库”菜单,然后单击“显示 SQL 查询”。

可以在“显示 SQL 查询”对话框中看到 SQL。

或者

在 Crystal Reports 中,打开一个以 Universe 作为数据源创建的报表,转到“数据库”菜单,然后单击“数据库专家”。

进入“数据库专家”后,右击“选定的表”列表中的查询,然后选择“查看命令”。可以在“查看命令”对话框中看到 SQL。

18.5查询筛选器和提示

18.5.1创建查询筛选器

?

?

?

?可以在查询中使用以下类型的筛选器:预定义筛选器这些筛选器由管理员创建。自定义筛选器您在创建查询时定义这些筛选器。高级筛选器您在查询中的数据子选定区域上定义这些筛选器。提示

提示是定义为显示问题或值列表的动态筛选器;用户在每次刷新报表时可以选择不同的筛选器值。

水晶报表Crystal Reports培训教程 35_水晶报表教程

查询筛选器和提示301

X将预定义筛选器添加到查询

1双击要在报表中使用的对象,或将它们拖到“结果对象”窗格中。

有关选择对象以构建查询的逐步说明信息,请参阅 第1 页上的 “为查询定义数据选定区域”。

将预定义筛选器拖到“查询筛选器”窗格中。

当您运行查询时,与您选择的查询筛选器对应的数据将会返回到报表。2注意: 预定义筛选器由您的管理员创建并进行编辑。作为“查询面板”的用户,您无法查看预定义筛选器的组成部分,也无法编辑它们。X使用筛选器编辑器创建自定义筛选器

1选择您要过滤的对象并将其拖动到“查询筛选器”窗格。

将出现筛选器编辑器。所选择对象的名称显示在“过滤的对象”文本下面。

从列表中选择一个运算符。

有关每个运算符的说明和示例,请参阅 第13 页上的 “查询筛选器运算符的快速参考”。

选择“常量”或“列表中的值”。

取决于所选的运算符,在“请输入值”字段中键入一个或多个值。单击“确定”以确认自定义筛选器的属性。2345

18.5.2构建提示

提示是一种动态筛选器,每次您刷新报表中的数据时,该筛选器将显示一个问题。可通过键入或选择要在刷新数据之前查看的值来回应提示。Crystal Reports 只会从数据库中检索您指定的值,并将这些值返回到报表。

提示:提示允许多个用户查看单一报表但指定不同的数据库信息子集。提示还可以减少从数据库中检索数据所用的时间。

X创建提示

1选择想要应用提示的对象,然后将它拖到“查询筛选器”窗格中。

例如,如果想要允许用户指定报表的地理区域,请将“地区”字段拖到“查询筛选器”窗格。

将出现筛选器编辑器。缺省情况下,筛选器的名称就是过滤的对象的名称。

302Crystal Reports 用户指南

2从列表中选择一个运算符。

请参阅 第13 页上的 “查询筛选器运算符的快速参考”。

注意:不能为提示使用以下运算符:“为空”、“不为空”、“两者”和“除外”。

在“运算符类型”下,选择“提示”。

“提示”文本字段将显示默认消息。

如果要更改默认消息,请编辑它以描述一个问题。

例如,您可以询问“您要查看哪个地区的数据?”

如果要让提示显示一个用户可从中选择值的值列表,则选择仅从列表选择。

当您想要防止用户键入数据库中可能不存在的值时,使用此选项。单击“确定”以确认提示。

每次刷新报表时都会出现提示。3456

相关主题

?

? 第6 页上的 “合并查询筛选器和提示” 第4 页上的 “创建查询筛选器”

18.5.3合并查询筛选器和提示

可以在一个查询上应用多个过滤器和提示。

X合并筛选器和/或提示

1创建各个查询筛选器和/或提示。

有关如何创建筛选器和提示的逐步信息,请参阅 第4 页上的 “创建查询筛选器”或 第5 页上的 “构建提示”。

默认情况下,“查询面板”使用 And 运算符合并筛选器和提示。可以保留“和”运算符,也可以将运算符改为“或”。请参阅 第12 页上的 “使用“和”或“或”合并查询筛选器”。

2如有必要,通过双击 And 运算符来将运算符更改为 Or。

“或”将显示为运算符。提示将在单击“确定”时出现,或在您刷新

报表数据时出现。

查询筛选器和提示303

相关主题

?

?

? 第4 页上的 “创建查询筛选器” 第5 页上的 “构建提示” 第12 页上的 “编辑和删除查询筛选器”

18.5.4创建高级查询筛选器

在筛选查询以限制返回到 Crystal 报表的值时,您将筛选器应用于查询中的整个数据选定区域。通过使用高级查询筛选器,您可以将筛选器应用于主查询中未选定的数据的动态子集。

提示:创建高级筛选器需要您透彻了解查询构建和筛选器。有关高级查询筛选器工作方式的完整说明和示例,请参阅《使用 Web IntelligenceJava 报表面板构建报表》指南。可以从 Web Intelligence Java 报表面板的“帮助”菜单中访问此指南。

?

?

?创建高级查询筛选器的过程包含若干步骤:选择对象并为主查询定义查询筛选器。为高级筛选器选择对象。将简单的查询筛选器添加到高级筛选器。

X选择对象并为主查询定义筛选器

?双击或拖动要包括在报表中的对象。

选定对象即会出现在“结果对象”窗格中。

要限制返回到报表的值,您可以创建查询筛选器。取决于“结果对象”窗格中显示的对象,您创建的筛选器将聚合在一起。有关如何定义查询筛选器的逐步说明,请参阅 第4 页上的 “创建查询筛选器”。X为高级筛选器选择对象

1选择要在查询定义中指定为子集的对象。

所选对象定义了稍后置于高级筛选器上的任何度量或度量筛选器的聚合上下文。例如,要依据按服务行列出的销售收入计算并筛选销售收入结果,请选择“服务行”对象。

将选定维度拖到“查询筛选器”窗格。

将出现筛选器编辑器。缺省情况下,筛选器的名称就是过滤的对象的名称。

选中“高级筛选器”。23

304Crystal Reports 用户指南

4下一步取决于您是否要在报表中包括或排除筛选器返回的值。

示例

检索筛选器中列出的服务行

的数据。

检索除筛选器中所列服务行

之外的所有服务行的数据。操作不要选中“从结果中排除筛选器值”。选中“从结果中排除筛选器值”

。检索此数据检索筛选器中定义的数据,并将这些值返回到报表。检索除筛选器中所定义数据之外的所有数

据,并将这些值返回

到报表。

5最后一步取决于您是否要包括更多对象来进一步定义筛选器的聚合

上下文。

聚合示例操作

要添加更多对象,请将另一

个对象从左边的窗格拖到高

级筛选器上,然后在筛选器

编辑器中选择“高级筛选

器”。

转到第 6 步。想要执行什么操作将更多对象添加到高[服务系列] [国家/地区]级筛选器。在高级筛选器中只保[服务系列]

留一个对象。

6现已准备就绪,可以将查询筛选器添加到在新的高级筛选器中选定的

对象。

X将查询筛选器添加到高级筛选器

1将预定义筛选器从左边的窗格拖放到高级筛选器底部的白色区域上。

或者

将对象拖到高级筛选器底部的白色区域上,然后使用筛选器编辑器定义自定义筛选器。

例如,如果“国家/地区”维度上有高级筛选器,并且想要按国家/地区筛选订单金额,请将“订单金额”度量拖到高级筛选器上。

有关定义运算符、操作数类型和简单查询筛选器值的逐步说明,请参阅 第4 页上的 “创建查询筛选器”。

查询筛选器和提示305

2单击“确定”以确认新的筛选器。

新的筛选器即会出现在高级筛选器中。

要进一步明确查询定义,您可以基于其他维度和度量添加更多筛选器,并将它们添加到高级筛选器。为此,请重复第 1 和第 2 步。3单击“确定”。

即会将与主查询中和高级筛选器中的定义对应的数据返回到报表。相关主题

?

?

? 第10 页上的 “合并高级查询筛选器” 第9 页上的 “命名高级筛选器” 第12 页上的 “编辑和删除查询筛选器”

18.5.5命名高级筛选器

高级筛选器可以包含许多维。默认情况下,筛选器上显示每个维度的名称。为了帮助您看一眼就了解每个筛选器所筛选业务信息的类型,可以为筛选器指定一个更有意义的业务名称。当筛选器最小化时,会显示您指定的名称而不是各个维的单独名称。

X命名高级筛选器

1双击要命名的高级筛选器。

“高级筛选器设置”对话框即会出现。

在“筛选器名称”框中键入一个新名称,然后单击“确定”以确认新名称。

新名称会显示在筛选器上。

也可以选择从报表中排除筛选器返回的值。2

水晶报表Crystal Reports培训教程 35_水晶报表教程

306Crystal Reports 用户指南

X从报表中排除筛选器结果

?

下表提供了在报表中包括或排除筛选器结果的示例。

示例

检索筛选器中列出的服务行的数据。

检索除筛选器中所列服务行之外的所有服务行的数据。

操作

不要选中“从结果中排除筛选器值”。选中“从结果中排除筛选器值”。

检索此数据

检索筛选器中定义的

数据,并将这些值返回到报表。

检索除筛选器中所定义数据之外的所有数据,并将这些值返回到报表。

相关主题

??

第7 页上的 “创建高级查询筛选器” 第12 页上的 “编辑和删除查询筛选器”

18.5.6合并高级查询筛选器

可以将高级筛选器与其他高级筛选器合并,也可以将它们与查询中的其他筛选器或提示合并。

X将高级筛选器与其他高级筛选器合并

1

创建每个高级筛选器。

有关如何创建高级查询筛选器的逐步信息,请参阅 第7 页上的 “创建高级查询筛选器”。默认情况下,“查询面板”使用 And 运算符合并筛选器。

2

保留 And 运算符。或者

双击 And 运算符,将运算符更改为 Or。

有关各个运算符的示例以及它们之间的差异,请参阅 第12 页上的“使用“和”或“或”合并查询筛选器”。

查询筛选器和提示307

X将高级筛选器与其他筛选器或提示合并

1

创建每个筛选器。

有关如何创建高级筛选器的逐步说明信息,请参阅 第7 页上的 “创建高级查询筛选器”。有关如何创建简单查询筛选器的信息,请参阅第4 页上的 “创建查询筛选器”。默认情况下,“查询面板”使用 And 运算符合并筛选器。

2

您可以保留 And 运算符,也可以双击该运算符将其更改为 Or。有关各个运算符的示例以及它们之间的差异,请参阅 第12 页上的“使用“和”或“或”合并查询筛选器”。要将某一个筛选器嵌套在另一个筛选器或提示下面,请选择您要嵌套的筛选器,并请它拖动到要与之组合的筛选器上。

“查询面板”即会将这两个筛选器组成一组,并将这一组筛选器嵌入在其他筛选器之下。

3

4

如有必要,双击 And/Or 运算符来更改该运算符。当您运行查询或刷新报表数据时,Crystal Reports 即会依据定义的查询筛选器来筛选数据。

相关主题

?

第12 页上的

“编辑和删除查询筛选器”

308Crystal Reports 用户指南

18.5.7使用“和”或“或”合并查询筛选器

下表说明了 And 和 Or 运算符之间的差异。

检索此数据

示例

选择

对于两个筛选器均为在第 1 季度和第 2 季度订购了生和真的数据活用品的客户(检索的数据将包

括:在第 1 季度和第 2 季度都下了订单的客户)。

对于任意一个筛选器在第 1 季度或第 2 季度订购了生或者为真的数据。活用品的客户(检索的数据将包

括:只在第 1 季度下了订单的客户;只在第 2 季度下了订单的客户;以及在第 1 季度和第 2 季度都下了订单的客户)。

相关主题

?

第6 页上的 “合并查询筛选器和提示”

18.5.8编辑和删除查询筛选器

可以编辑和删除查询中的筛选器。

X编辑查询筛选器

1

双击想要编辑的筛选器。

将出现过滤器编辑器。

在“筛选器编辑器”中更改筛选器的定义。

有关如何定义筛选器的信息,请参阅 第4 页上的 “创建查询筛选器”。注意:如果是编辑高级筛选器,您可以删除筛选器中定义的对象,方法是将它们拖离筛选器放到左边的窗格上,也可以将对象添加到筛选器,方法是将对象从左边的窗格拖到高级筛选器上。有关更多信息,请参阅 第7 页上的 “创建高级查询筛选器”。单击“确定”以确认您的更改。

修改后的查询会出现在“查询筛选器”窗格中。

2

3

查询筛选器和提示309

X删除查询筛选器

?

将想要删除的筛选器拖放到左边的窗格上。

该筛选器即会从查询定义中删除并不会再显示在“查询筛选器”窗格中。

相关主题

??

第4 页上的 “创建查询筛选器” 第5 页上的 “构建提示”

18.5.9查询筛选器运算符的快速参考

下表将帮助您选择定义查询筛选器所需的运算符。

要检索的值与指定值相等的值。

与指定值不同的值。

大于指定值的值。

大于或等于指定值的值。

示例

选择

创建的筛选器<国家/地区> 等于美国<季度> 不同于第 4 季度

<客户年龄> 大于 60<收入> 大于或等于 1500000

<考试分数> 小于 40<年龄> 小于或等于 30<周> 介于 25 和 36

仅检索美国的数据。等于

检索除第 4 季度之不同于外所有季度的数据。

检索年龄超过 60 大于岁的客户的数据。检索高于或等于 大于或等于150 万的收入的数据。

小于指定值的检索考试分数低于 小于值。40 的数据。

小于或等于指检索年龄为 30 岁小于或等于定值的值。或 30 以下的客户。

介于指定的两检索从第 25 周开介于个值之间(包始到第 36 周结束括这两个值)的各个周(包括第 的值。25 周和第 36 周)超出指定的两检索年度的所有各不介于个值的范围的个周,除第 25 周值。到第 36 周之外

第 36 周)。

<周> 不介于 25 和 36

310Crystal Reports 用户指南

要检索的值示例选择在列表中

创建的筛选器

<国家/地区> 在列表中 '美国; 日本; 英国'<国家/地区> 不在列表中 '美国; 日本; 英国'<子女> 为空

与指定的若干仅检索以下国家/地值相同的值。区的数据:美国、

日本和英国。

不同于指定的不检索以下国家/地多个值的值。区的数据:美国、

日本和英国。

在数据库中没检索没有子女的客有输入值的户(数据库中的子值。女列没有数据项)。在数据库中输检索有子女的客户入了值的值。有数据项)。

包括特定字符检索生日为 1972 年串的值。的客户。

不包括特定字检索生日不是 1972 符串的值。年的客户。

对应于所指定检索既有固定电话两个值的值。也有移动电话的电

信客户。

对应于单一值检索有固定电话但而不对应于所没有移动电话的电指定的另一个信客户。值的值。

相关主题

?

不在列表中

为空

不为空<子女> 不为空

匹配模式不同于模式两者

<生日> 匹配模式, '72'<生日> 不同于模式, '72'

<帐户类型> 两者 "固定" 和 "移动"

<帐户类型> "固定" 除外 "移动"

除外

第4 页上的 “创建查询筛选器”

水晶报表Crystal Reports培训教程 35_水晶报表教程

第19章 创建和更新 OLAP 报表19.1用创建 OLAP 报表 Crystal Reports

尽管关系数据库(如 SQL 服务器和 PC 数据库)是最常用的数据源,但“联机分析处理”(OLAP) 和多维数据正在迅速成为常用的数据存储和分析格式。Crystal Reports 为 OLAP 数据源提供了与它为关系数据所提供的访问和报告功能一样的功能。

注意: 这个主题中的术语 OLAP 指 OLAP 和多维数据的存储和访问系统的所有常见格式。

Crystal Reports 支持通过直接连接和 Open OLAP 网关来访问 OLAP数据。直接连接要求已安装 OLAP 客户端软件并使用本机上的 DLL;而Open OLAP 网关两者都不需要。使用 Open OLAP 连接时,数据访问是通过一台与 Crystal Reports 和您的 OLAP 数据源通信的“名称服务器”主机实现的。在“新建服务器”对话框的“高级设置”选项卡上可以设置 Open OLAP 连接。

对于直接连接,Crystal Reports 支持多种 OLAP 服务器类型。支持的类型显示在“新建服务器”对话框的“服务器类型”列表中。此列表动态更新,随时显示所有安装了客户端软件的服务器的类型。

注意: Crystal Reports 可以打开在先前版本中创建的 OLAP 报表。但是,尽管 Crystal Reports 9 可以打开已保存有数据的版本 10 的OLAP 报表,但却不能对它们进行刷新。

19.1.1OLAP 网格对象

使用 OLAP 数据设计报表时,Crystal Reports 创建的主报表包含一个或多个 OLAP 网格对象。OLAP 网格对象的外观和工作方式十分类似“交叉表”对象,但它们是专门为 OLAP 数据设计的。

OLAP 网格对象提供真正的多维报表。将维度添加到任一轴以分析在单个 OLAP 网格中的三个、四个或更多的维度。或在同一个报表内创建多个 OLAP 网格,来代替在一个 OLAP 网格内查看多个维度。

注意: Crystal Reports 显示 OLAP 网格时,网格较长(向下延伸多页)比网格较宽(横跨多页)时的显示速度要快得多。网格较长时,程序逐页处理。网格较宽时,程序必须先收集所有数据,而后才能显示一页。这导致处理时间显著增加。

312Crystal Reports 用户指南

19.2创建 OLAP 报表

OLAP 报表是使用“OLAP 报表创建向导”或者“OLAP 专家”创建的。在开始创建报表之前,请确保有以下信息:

?OLAP 类型

?服务器/数据库名

?用户 ID

?密码

?参数(仅对用于 OLAP 的 OLE DB 适用)

提示:通过选择“报表”菜单上的“OLAP 报表设置”选项可以返回到“OLAP 报表创建向导”。在需要更改页维度或更改参数值时才选择该选项。

X创建 OLAP 报表

?在“开始页”上,单击“OLAP 多维数据集报表向导”。

“OLAP 报表创建向导”即会出现,其“OLAP 数据”屏幕是活动的。

19.2.1指定数据源

使用“OLAP 数据”屏幕来定义 OLAP 数据源。

1单击“选择多维数据集”。

出现“OLAP 连接浏览器”。

浏览 OLAP 服务器以找到您希望连接到的多维数据集。

如果列表中没有列出您的服务器,请单击“添加服务器”。在“新服务器”对话框中,给出服务器信息,然后单击“确定”。

选择所需的多维数据集,并单击“打开”。

重新出现“数据”屏幕,其中显示所提供的数据源信息。

单击“下一步”。234

注意: 也可以单击“数据”屏幕上的“选择 CAR 文件”。选择此选项后,出现“打开”对话框。搜索在 OLAP Intelligence Professional中创建的文件。

19.2.2定义网格结构

使用“行/列”屏幕定义网格内的数据的结构。可将维度放置到“行”或“列”区域之内。

提示:还可以将维度拖放到“行”或“列”区域。

创建 OLAP 报表313

1

2

3选择要出现在报表中的维度。根据希望维度所在的位置,单击邻近“行”或者“列”区域的 > 箭头。继续添加维度到“行”和“列”区域。

4单击与

“行”和“列”区域相对应的“向上”和“向下”箭头按钮

以排列维度的顺序。

注意:如果误将维度添加到“行”或“列”区域,可单击 < 箭头,使其返回“维度”列表。

在“行”或“列”区域中选择一个维度,然后单击“选择行成员”指定要纳入报表的成员。

出现“成员选择器”对话框。

选择希望包含的成员。

单击“确定”。

在“行”或“列”区域中选择一个维度,然后单击“创建/编辑参数”创建一个用于维度的参数。

出现“创建参数字段”对话框。

单击“确定”。

注意:一旦创建了某个参数,在删除该参数之前,您将无法访问“成员选择器”对话框。56789

314Crystal Reports 用户指南

10如果要删除参数,请选择相应的维度并单击“删除”。

在“删除“链接到参数”字段”对话框中单击“确定”时,程序将从维度中删除参数说明。

单击“下一步”。

出现“切片/页”屏幕。11

19.2.3设置切片维度并指定网格数目

使用此屏幕可以设置切片维度,并指定需要的网格数目。

“切片”区域可以确定对报表设置的边界。例如,如果您的时间维度由财政季度成员构成,即可指定报表返回特定季度的结果。

注意: 如果已在“行/列”选项卡中选用了所有成员,则这里将不显示任何内容。

“页面”区域使您可以确定网格数和每个网格的主题。例如,如果有产品维度,可将它置于页面区域并指定两个不同的产品。这将导致两个网格有相同的行、列和格式,但每个网格基于不同的产品。

19.2.3.1 指定切片

1在“切片”列表中双击一个维度,确定准备用作切片的成员。

出现“成员选择器”对话框。

选择适当的成员,必要时可展开层次结构。

单击“确定”。

如果不希望添加页,请单击“下一步”。出现“样式”屏幕。234

19.2.3.2 添加页

1使用 > 箭头将维度添加到“页”列表中。

出现“成员选择器”对话框。

展开维度结构并选取适当的字段。

单击“确定”。

单击“下一步”。出现“样式”屏幕。234

创建 OLAP 报表315

19.2.3.3 添加参数

通过单击“创建/编辑”按钮,可以创建一个链接到任意维度的参数字段。向 OLAP 网格中的维度添加参数后,在刷新报表数据时将提示用户选择一个值。

注意:

?OLAP 数据源允许用户包括包含空值的字段。若要激活此选项,请在

“输入参数值”对话框中选择“将参数留空 (NULL)”。

?一旦创建了某个参数,在删除该参数之前,您将无法访问“成员选择

器”对话框。

19.2.4应用预定义样式

1从列表中选择网格的预定义样式。

提示:如果不希望使用预定义样式,请单击“下一步”。

所选择的配色方案预览出现在右边。注意:

若屏幕分辨率设置为 256 色,那么可能无法正确显示所选择的样式的颜色。增加分辨率以更正这种情况。

2单击“下一步”。

出现“图表”屏幕。

水晶报表Crystal Reports培训教程 35_水晶报表教程

316Crystal Reports 用户指南

19.2.5插入图表

1从“图表”屏幕所显示的选项中选择要添加到报表中的图表的类型。

提示:如果不想插入图表,请单击“完成”。

为图表添加标题。

在“依据”列表中,选择希望图表所基于的维度。

如有必要,在“细分依据”列表中,单击希望图表所基于的次要行或列。

注意:要确保在步骤 1 中所选的图表类型支持次要图表字段。

单击“其他维度”,为已在 OLAP 网格中使用但未在图表中使用的所有维度定义字段值。

有关更多信息,请参考 第248 页上的 “在 OLAP 多维数据集上绘制图表(OLAP 布局)”和 第244 页上的 “创建图表”。

若要完成报表,请单击“完成”。23456

19.3更新 OLAP 报表

?

?

?报表访问的 OLAP 数据的位置可更改。一些可能的情况包括:由于信息系统资源的重建,OLAP 服务器或数据库的位置可能更改。另一个多维数据集实例可能已成功处理,并反映了更多的当前信息。新报表可从代表主 OLAP 数据库的子集或产品版本的较小数据库生

成,然后转移到实际工作数据库以报告真实数据。

在更新报表前,重要的是要确保它与数据兼容。要查看的东西包括:将多维数据集内不包含的维度从报表中删除。

删除设计报表时显式引用的字段(如公式)。?

?

注意: 如果报表包含子报表或网格,并且更改了用于它们的数据库的名称或位置,则必须更新每个子报表或网格。

X在 OLAP 网格对象中更新多维数据集位置

1

2单击边框以选择网格。从“数据库”单击“设置 OLAP 多维数据集位置”。

提示:也可以右击网格,并选择“设置 OLAP 多维数据集位置”。出现“确认命令”对话框。

单击 “是” 。

出现“设置 OLAP 多维数据集位置”对话框。3

格式化 OLAP 网格中的数据317

4单击“选择”。

出现“OLAP 连接浏览器”。

浏览 OLAP 服务器以找到您希望连接到的多维数据集。

如果列表中没有列出您的服务器,请单击“添加服务器”。在“新服务器”对话框中,给出服务器信息,然后单击“确定”。

选择所需的多维数据集,并单击“打开”。

再次出现“设置 OLAP 多维数据集位置”对话框。

单击“确定”。

如果报表包含基于同一多维数据集的多个 OLAP 网格,程序将提示您将其余网格更新为新的位置。567

最后,如果报表的关系数据库的位置与多维数据集的位置相同,程序将提示您更改关系数据库的位置,以便与多维数据集的新位置匹配。确保关系数据库的位置和 OLAP 多维数据集匹配将保证数据保持同步。程序能够自动更改位置,或者,您也可以在“设置数据源位置”对话框中手动进行更改。有关使用“设置数据源位置”对话框的更多信息,请参阅下节。19.3.0.1 更新数据库位置

1

2在“设置数据源位置”对话框中,展开“替换为”区域中的“创建新连接”文件夹。展开“OLAP”文件夹并搜索新的多维数据集位置。

提示:可以通过双击“建立新连接”选项在“OLAP 连接浏览器”中搜索多维数据集。

选择数据源名称或某个表,然后单击“更新”。

在“当前数据源”区域中更改了数据源名称。

单击“关闭”。34

19.4格式化 OLAP 网格中的数据

为 OLAP 网格中的行和列添加格式设置的方法有若干种:

?使用“突出显示专家”可以将条件格式设置应用到所有类型的报表字

段,这些报表字段包括:数字、货币、字符串、布尔值、日期、时间和日期时间字段。

若要访问“突出显示专家”,可右击要格式化的字段,然后单击快捷菜单上的“突出显示专家”。有关详细信息,参见 第234 页上的“使用“突出显示专家””。

318Crystal Reports 用户指南

使用“格式化编辑器”可将绝对格式设置应用到网格中的字段。绝对格式设置可应用于任何条件下,而不论字段中的数据值是怎样的。 若要访问“格式化编辑器”,可右击要格式化的字段;然后单击快捷菜单上的“格式字段”。有关详细信息,参见 第220 页上的 “使用绝对格式化”。

?使用公式工作室可利用 Crystal 或 Basic 语法编写您自己的条件

格式化公式。公式工作室使您能够最大限度地控制 OLAP 网格的格式设置。

若要访问公式工作室,可打开“格式化编辑器”,再单击适当的“公式”按钮。有关详细信息,参见 第229 页上的 “使用条件格式化”。?使用“OLAP 专家”可重新格式化整个 OLAP 网格。此“专家”提供

在“OLAP 报表创建向导”中可用的所有格式设置选项。

若要访问“OLAP 专家”,可通过单击网格对象的一个边框来选中整个网格对象。右击选中的网格,然后在快捷菜单上单击“OLAP 专家”。“OLAP 专家”中有两个选项卡是“OLAP 报表创建向导”中所没有的。使用“自定义样式”和“标签”选项卡可设置 OLAP 网格的格式。?除了允许您设置 OLAP 网格中行和列的格式之外,Crystal Reports还允许您指定不水平扩展的报表对象(如文本对象、字段对象、OLE 对象、图表、地图、线条、框等)在 OLAP 网格所创建的每个附加水平页上重复。有关更多信息,请参阅 第227 页上的 “在横排页面上重复报表对象”。

19.4.1更改维度的背景颜色

1在“OLAP 专家”的

“自定义样式”选项卡上,选择一个维度。

格式化 OLAP 网格中的数据319

2

3从“组选项”区域的“背景颜色”列表中选择颜色。完成自定义网格后,单击“确定”。

19.4.2创建维度的别名

可以创建别名以缩短长维度名。当打算在条件格式化公式中引用维度时(通过使用 GridRowColumnValue 函数进行引用),这十分有用。1

2

3在“OLAP 专家”的“自定义样式”选项卡上,选择该维度。在“组选项”区域的“公式的别名”字段中输入一个别名。完成自定义网格后,单击“确定”。

19.4.3格式化网格线

在“格式化网格线”对话框中,可以定义是否显示网格线以及网格线的颜色、样式和宽度。

1在“OLAP 专家”的“自定义样式”选项卡上,单击“格式化网格线”。

出现“格式化网格线”对话框。

从列表中选择希望线显示的区域的说明,或单击“格式化网格线”关系图中的适当区域。

选择颜色、样式及宽度。

选择“绘图”复选框使网格线出现在报表中。

单击“确定”。

完成自定义网格后,单击“确定”。23456

19.4.4标注维度

在“标签”选项卡上可以定义哪些维度需要标注以及它们在网格中如何显示。可用的维度是指已指定为页或切片的维度。

1

2

3使用箭头按钮,根据需要将维度移动到“未标注”和“已标注”区域。使用“标签位置”和“标签间距”区域内可用的选项更改标签的外观。完成自定义网格后,单击“确定”。

320Crystal Reports 用户指南

19.5更改 OLAP 数据的视图

在分析报表中的 OLAP 数据时,有几种基本方法可用来更改数据在网格中的显示方式。

注意: 在此说明的方法可以使您直接从 Crystal Reports 的“预览”选项卡操作 OLAP 网格。还可以在“多维视图”选项卡上实现相同的功能以及更高级的其他功能。要了解有关“多维数据集视图”选项卡提供哪些功能的更多信息,请在联机帮助中搜索“使用 OLAP 工作表”。X显示或隐藏维度成员

1

2右击要显示或隐藏其成员的维度。在快捷菜单上,单击“展开成员”或“折叠成员”。

维度将展开以显示其成员,或者折叠起来将它们隐藏。

提示:还可以双击父维度,以深化显示在 OLAP 网格中的层次数据。X在 OLAP 网格中创建不对称性

使用不对称性,您可以为任意数量的外部维度显示不同的内部维度成员。

注意: 只能在堆积维度上创建不对称性。

1

2右击要删除的成员。在快捷菜单上,指向“隐藏”或“显示”,然后选择适当的选项。

有关如何使用这些选项的信息,请搜索联机帮助以查找“创建不对称性”和“恢复对称性”。

X向 OLAP 网格添加总计

1

2右击要查看其总计的维度。从快捷菜单中选择“自动总计”。

出现一个子菜单,其中显示您可以添加的总计类型。

选择所需选项。3

随即会有一个“总计”行和/或列添加到 OLAP 网格中。以后需要删除总计时,选择“无总计”即可。

X更改成员名称的显示格式

1右击维度名称。

水晶报表Crystal Reports培训教程 35_水晶报表教程

对 OLAP 网格数据进行排序和筛选321

2在快捷菜单上,指向“显示成员时使用”,然后单击以下显示选项

之一:

?标题

?名称

?标题:名称

?唯一名称

有关名称和标题的信息,请搜索联机帮助以查找“更改成员标题”。X改变显示在 OLAP 网格中的数据

1

2拖放行和列,以重排 OLAP 网格中的数据。使用拖放操作,将维度拖入或拖出“OLAP 标签”区域,可向网格中

添加数据或者从中删除数据。

X透视 OLAP 网格

?右击网格边框,然后从快捷菜单中选择“透视 OLAP 网格”。

通过切换行和列维度,这可以更改 OLAP 网格的方向。

X定义 OLAP 网格中字段的顺序

1

2展开要对其字段进行重新排序的行或列维度。右击该维度,在快捷菜单上,单击“将显示的成员重新排序”。

注意:不能将已创建行或列参数的维度的成员重新排序。

在“将显示的成员重新排序”对话框中,选择字段然后单击“向上”和“向下”箭头,以重排显示在网格中的成员。

单击“确定”,使更改生效且返回到 OLAP 网格。34

19.6对 OLAP 网格数据进行排序和筛选

OLAP 网格的排序功能使您能够按行和列的值对数据进行排序。如果希望根据特定的字段值限定数据,可向网格添加一个或多个筛选器。筛选器还使您能够执行最前或最后 N 项分析(按实际值和按百分比)。?对 OLAP 网格中的数据进行排序

?对 OLAP 网格中的数据进行筛选

322Crystal Reports 用户指南

19.6.1对 OLAP 网格中的数据进行排序

使用 OLAP 网格的排序功能可以快速地以某种实用的方式排列网格数据。通过右击相应的行或列成员并从快捷菜单上选择相应命令,可以添加、编辑和删除排序。数据可按升序或降序进行排序,而且可以指定是否要中断网格层次结构。

例如,在下面的网格中,“预算”列中添加了一个升序排序。

在此示例中,OLAP 网格遵从网格成员之间的父/子关系,并相应地对数据值进行排序。(冷冻食品排在烘烤食品之前,而点心排在冷冻食品之后。)

在下一个示例中,“预算”列依然按升序排序;不过在该例中不同的是选中了“中断层次结构”选项。

这时 Report Designer 不再考虑网格成员之间的父/子关系,而只根据数据值进行排序。(冷冻食品仍然排在烘烤食品之前,但是点心排在所有其他成员的前面。

对 OLAP 网格数据进行排序和筛选323

最多可向网格行和网格列分别添加三个排序。在每种情况下,第一个排序具有优先权,而每个次要排序都起着进一步区分网格数据的作用。如果给行或列添加第四个排序,则会从网格删除前三个排序,而新的排序成为唯一的主排序。

提示:若要找到已排序的行或列,可将鼠标指针移到 OLAP 网格的上方。当遇到已排序的成员时,鼠标指针将变为双箭头。

X对 OLAP 网格中的数据进行排序

1

2

3右击要依据其进行排序的行成员或列成员。在快捷菜单上,指向“添加第一个排序”。在子菜单上,从可用的排序选项中选择:

?升序

?降序

?升序,中断层次结构

?降序,中断层次结构

注意: 对网格行的升序排序按照从低到高、从左至右的顺序对数据值进行排序。对网格列的升序排序按照从低到高、从上至下的顺序对数据值进行排序。

要了解有关排序的更多信息,请在联机帮助的“使用 OLAP 工作表”部分中搜索“对数据排序”。

19.6.2对 OLAP 网格中的数据进行筛选

筛选器用于排除不重要的网格数据,或者只显示希望看到的数据。可以按实际值筛选网格数据,也可以选择排除或显示最前或最后 N 个,或者排除或显示最前或最后 N%。

?

?提示:若要找到已筛选的行或列,可将鼠标指针移到 OLAP 网格的上方。当遇到已筛选的行或列时,鼠标指针将变为 X。如果要将 OLAP 网格中的所有单元格筛选出来,右击空网格,然后从快捷菜单中选择“删除所有筛选器”。

X添加筛选器

1

2

3右击要对其值进行筛选的字段。在快捷菜单上,单击“添加筛选器”。在“定义筛选器”对话框中,使用“筛选器类型”列表指定希望如何

筛选数据。

324Crystal Reports 用户指南

可选择按“实际值”筛选数据,或者选择按“最前/最后 n 个”或“最前/最后 n%”筛选数据。

4

5使用“筛选器定义”选项指定希望排除或显示哪些行或列。 单击“确定”以添加该筛选器,并返回到 OLAP 网格。

要了解有关筛选的更多信息,请在联机帮助的“使用 OLAP 工作表”部分中搜索“筛选数据”。

19.7向 OLAP 网格添加计算

计算所得成员使您能够对 OLAP 数据执行特定的计算,并将结果显示在添加到 OLAP 网格的行或列中。可以创建一个快速计算,例如通过从Sales 中减去 Budget 计算出一个方差成员。也可以使用函数来执行复杂的“统计分析”或“时间系列”计算。

要了解有关计算所得成员的更多信息,请在联机帮助的“使用 OLAP工作表”部分中搜索“添加计算所得成员”。

第20章 打印、导出和查看报表20.1分发报表

?

?

?

?Crystal Reports 允许您用各种方法分发报表。本节涉及:打印报表传真报表导出报表使用 Enterprise 文件夹

20.1.1打印报表

X打印报表

1在“文件”菜单上,选择“打印”。

提示:另一种做法是单击“标准”工具栏上的“打印”按钮。即会出现“打印”对话框。

选择适当的设置,然后单击“确定”。

即会出现“正在打印报表”对话框,显示打印作业的进度。

有关打印机和打印机驱动程序的信息,请参阅以下主题:

第218 页上的 “默认打印机”

第219 页上的 “打印机驱动程序”2?

?

20.1.2传真报表

许多传真应用程序(例如 Microsoft Fax 和 Delrina WinFax)都允许您设置打印机驱动程序,通过调制解调器来发送文档的传真。使用以上其中一个应用程序时,可以通过 Crystal Reports 来传真报表。X传真报表

1在“文件”菜单上,单击“打印”。

即会出现“打印”对话框。

在“打印”对话框中,单击“查找打印机”。

即会出现

“查找打印机”对话框。使用此对话框选择传真驱动程序。2

水晶报表Crystal Reports培训教程 35_水晶报表教程

326Crystal Reports 用户指南

3单击“确定”。

您即返回到“打印”对话框。

选择适当的设置,然后单击“确定”。

出现传真应用程序,提示您选择一个封面页,并添入正确的传真信息。4

20.1.3导出报表

可以将完成的报表导出为各种常见格式,如电子表格、字处理器、HTML、ODBC 和公用数据交换格式。这方便了信息分发。例如,您可能想使用报表数据在电子报表包中表现趋势,或在桌面出版包中增加数据的表现力。

注意: Crystal Reports 允许您在报表页中的任意位置插入对象。不过,如果导出为诸如 Microsoft Word、Microsoft Excel 和 HTML 的格式,则在行之间放置的对象将在输出中被移到最近的一行。要缓解这种方式所引起的格式化问题,建议您在设计报表时使用“准线”。有关更多信息,请参阅 第208 页上的 “使用准线设计”。

导出过程要求指定格式和目标。格式确定文件类型,目标确定文件的放置位置。

20.1.3.1 导出格式类型

Crystal Reports 支持的导出格式可大致分为两类:基于页面的格式和基于记录的格式。

基于页面的格式往往能产生更准确的输出。这些格式的重点在于布局重现和格式设置。格式设置是指诸如字体样式、文本颜色、文本对齐、背景颜色等特性。布局是指对象位置、对象大小以及这些特性和其他对象之间的关系。取决于您选择的格式,程序可能无法完全保留所有布局和格式设置,但基于页面的格式通常会尽可能保留这些特性。

基于记录的格式的重点放在数据而不是布局和格式设置上。但是,在某些格式(如“Microsoft Excel - 仅限数据”)中,您将注意到会导出一些格式设置。一些基于记录的格式只是数据交换格式。

Adobe Acrobat (PDF)

Adobe Acrobat 格式是基于页面的格式。导出的文档用于打印和再次分发。Acrobat 格式将导出布局和格式设置,具体样式与在“预览”选项卡上看到的报表保持统一。Acrobat 格式会嵌入在文档中显示的 TrueType字体。(不支持非 TrueType 字体。)此导出格式不支持 Microsoft 字体链接技术(此技术用于为诸如中文 HKCS 的一些扩展字符集提供支持)。因此,在报表中使用的字体必须包含所有必需的标志符号。对于超级链接,支持这些 URI 类型:“http:”、“https:”和“mailto:”。

分发报表327

Crystal Reports (RPT)

导出为 Crystal Reports 格式与在选定“将数据与报表一起保存”选项的情况下使用“另存为”功能很相似。此格式将报表与当前数据一起导出(保存),而不会修改原始报表。

HTML 3.2 和 HTML 4.0

HTML 导出格式是基于页面的格式。HTML 4.0 格式会通过使用 DHTML保留报表的布局和格式设置。但是,HTML 3.2 格式无法准确保留所有布局。HTML 3.2 格式用于与不支持 HTML 4.0 的旧浏览器保持向后兼容性。报表中的所有图像均保存在外部,并会在导出的 HTML 结果中插入一个超级链接。因此,此导出格式会在输出中生成多于一个的文件。Microsoft Excel (XLS)

Microsoft Excel 格式是基于页面的格式。此格式将报表内容逐页转换为 Excel 单元格。多个页面中的内容会被导出到同一个 Excel 工作表中。如果工作表已满,但还有数据要导出,则导出程序会创建多个工作表来容纳这些数据。如果报表对象覆盖多于一个的单元格,则导出程序会通过合并单元格来呈现报表对象。Microsoft Excel 工作表中的列数限制为 256;因此,不会导出将添加到超过 256 列的单元格中的任何报表对象(或它的一部分)。此导出格式保留大部分格式设置,但它不会导出报表中的线和框对象。

Microsoft Excel - 仅限数据 (XLS)

顾名思义,“Microsoft Excel - 仅限数据”是一种侧重于数据的基于记录的格式。即使如此,此格式也会导出大部分格式设置。与Microsoft Excel 格式不同,“Microsoft Excel - 仅限数据”格式不会合并单元格 -- 每个对象只添加到一个单元格。此格式还可以将 CrystalReports 中某些类型的汇总导出为 Excel 函数。支持的汇总为 SUM、AVERAGE、COUNT、MIN 和 MAX。

要想从 Excel 导出格式中获得最佳输出结果,您应以一种有利于Excel 的方式设计报表。有关更多信息,请参考 Business Objects 支持站点上的技术摘要,名称为“Exporting to Microsoft Excel”(导出到 Microsoft Excel),网址为:

http://support.businessobjects.com/communityCS/TechnicalPapers/scr_exportexcel.pdf.asp

注意: Microsoft Excel 格式和“Microsoft Excel - 仅限数据”格式的输出均与 Microsoft Excel 97 及更高版本兼容。

328Crystal Reports 用户指南

Microsoft Word (RTF)

Microsoft Word (RTF) 是一种产生 RTF(丰富文本格式)文件的基于页面的精确格式。导出的文件包含代表报表对象的文本对象和绘图对象。各对象均放置于文本框中。此格式专用于如填充式表单之类的应用程序中,在此类程序中,供输入文本的空白作为空白文本对象被保留。

在此导出格式中,会保留几乎所有格式设置。但是,无法将文本对象放置在页面左边缘以外。因此,如果报表中有放置在可打印区域左边缘之前的文本对象,会将它们推向右边。(在包含宽页面的报表中最值得注意这一点。)

Microsoft Word - 可编辑 (RTF)

“Microsoft Word - 可编辑 (RTF)”格式与 Microsoft Word (RTF)格式不同;它是一种基于页面的格式,但并非所有布局和格式设置都会在输出中保留。此格式将所有报表对象内容转换为文本行。与 MicrosoftWord (RTF) 格式不同的是,此格式不使用文本框。文本格式设置会被保留,但可能不会保留诸如背景颜色、填充图案等特性。报表中的所有图像均嵌入到文本内容中,因此,当在 Microsoft Word 中编辑文档时,图像会自动转换以提供文本。此格式不会导出报表中的线和框对象。

“Microsoft Word - 可编辑 (RTF)”格式有一个选项,用于在每个报表页面的末尾插入分页符。此选项可能与 Microsoft Word 创建的分页符不一致;此选项主要用于分隔报表页面内容。

ODBC

ODBC 是一种基于记录的数据交换格式。使用此格式时,可以将报表数据导出到任何与 ODBC 兼容的数据库。

“记录样式 - 带空格的列 (REC)”和“记录样式 - 无空格的列 (REC)”

记录样式格式会将报表数据作为文本导出。这些格式只导出“组”和“详细资料”区域中的数据。在输出中,报表的数据库中的每个记录占一行。记录样式格式主要用于数据交换。

报表定义 (TXT)

“报表定义”格式将报表导出为文本文件,当中包含报表的设计视图的简短说明。只是为了与 Crystal Reports 5.0 兼容才保留此格式。RTF 格式 (RTF)

“RTF 格式 (RTF)”格式与 Microsoft Word (RTF) 格式类似。

分发报表329

分隔的值 (CSV)

“分隔的值”格式是一种基于记录的数据交换格式。它将报表对象内容导出为一组由您指定的分隔符和定界符分隔的值。(当使用逗点 (,)来分隔字段时,此格式称为“逗点分隔值 (CSV)”;此导出格式在Microsoft Excel 用户中很常用。)

像记录样式格式一样,“分隔的值”格式也为报表中的每个记录创建一行值。记录包含在“设计”视图中看到的每个报表节中的所有字段。也就是说,先导出“报表页眉”节中的字段,接着依次导出“页眉”节、“组页眉”节、“详细资料”节、“组页脚”节、“报表页脚”节,最后导出“页脚”节。

“分隔的值”格式无法用于导出带有交叉表或 OLAP 网格的报表;它也无法用于导出在“页眉”或“页脚”节中带有子报表的报表。制表位分隔的文本 (TTX)

“制表位分隔的文本”格式与“文本”格式类似。此格式保留报表的布局,但有一些不同之处。在“文本”格式中,多行文本对象被导出为多个行。而在此格式中,多行文本对象被导出到单行中;所有字符串值均由双引号 ("") 包围;值本身由制表位字符分隔。可以在 MicrosoftExcel 中打开 TTX 文件。

文本 (TXT)

“文本”格式是一种基于记录的格式。它的输出是纯文本,因此不会保留格式设置。但是,此格式可以保留报表的一些布局。“文本”格式假定在整个导出中使用恒定大小的字体。“每英寸字符数”(CPI) 选项指定了可以在横向空间的每线性英寸中放入的字符数,因此决定了字体的大小。

此格式还提供了一个用于分页的选项。如果选择此选项,则会在输出中每经过指定的行数就插入一个分页符。此格式中的分页符可能与报表的分页不一致。

XML

XML 主要用于数据交换。它是使用 Crystal XML 架构的基于记录的格式。可使用 Crystal Reports 中的“XML 专家”来自定义 XML 输出。20.1.3.2 目标

目标决定报表的导出位置。Crystal Report 允许从六种目标中进行选择。它们包括:

?应用程序

?磁盘文件

330Crystal Reports 用户指南

?

?

?

?Exchange 文件夹Lotus DominoLotus Domino 邮件MAPI

20.1.3.3 导出到应用程序

如果导出到一个应用程序,程序将以指定的格式将报表导出到一个临时文件,然后在相应的应用程序中打开该文件。

?

?

?

?注意: 导出到应用程序后,将使用与输出文件的文件扩展名关联的程序(在操作系统的“文件夹选项”的“文件类型”选项卡中指定)打开该文件。当以 ODBC 格式导出时,“应用程序”和“磁盘文件”相同。如果以 HTML 格式导出,则需要指定文件路径。报表的文件名和临时文件的文件名不得相同。

以下各部分说明了如何针对每种不同的目标类型将报表导出为Microsoft Excel (XLS) 格式。

X导出到应用程序

1

2打开要导出的报表。在“文件”菜单上,指向“导出”,然后单击“导出报表”。

提示:另一个实现此操作的方法是单击“标准”工具栏上的“导出”按钮。

即会出现“导出”对话框。

从“格式”下拉列表中选择导出格式类型。

在本例中,选择“Microsoft Excel (XLS)”。

从“目标”下拉列表中选择“应用程序”。

单击“确定”。

出现“Excel 格式选项”对话框。

注意:

?“列宽”区域中的选项允许您定义输出中 Excel 单元格的宽度 --

可以用磅为单位指定列宽(固定列宽),也可以由 Crystal 报表各节中的对象来决定列宽。

?选择“整个报表”不一定会模拟 Crystal 报表的布局。相反,Excel

单元格宽度取决于报表任意节中的对象。再如,选择“详细资料”后显示的单元格宽度只取决于报表的

“详细资料”节中的对象。345

水晶报表Crystal Reports培训教程 35_水晶报表教程

分发报表331

6

7按照需要更改格式选项。单击“确定”。

出现“导出记录”对话框。

提示:单击“取消导出”以取消导出过程。

程序导出该报表并在相应的应用程序中将其打开。在本示例中,将打开 Microsoft Excel,其中带有导出的数据。

20.1.3.4 导出到磁盘文件

如果导出到磁盘文件,程序将把报表保存到已经指定的磁盘或软盘。X导出到磁盘文件

1

2打开要导出的报表。在“文件”菜单上,指向“导出”,然后单击“导出报表”。

提示:另一个实现此操作的方法是单击“标准”工具栏上的“导出”按钮。

即会出现“导出”对话框。

从“格式”下拉列表中选择导出格式类型。

在本例中,选择“Microsoft Excel (XLS)”。

从“目标”下拉列表中选择“磁盘文件”。

单击“确定”。

出现“Excel 格式选项”对话框。有关该对话框的更多信息,请参阅第6 页上的 “导出到应用程序” 中的步骤 5。

按照需要更改格式选项。

单击“确定”。

即会出现“选择导出文件”对话框。

选择适当的目录。

输入“文件”名。

单击“保存”按钮。

提示:单击“取消导出”以取消导出过程。

程序导出该报表并将其保存在指定的目录中。345678910

332Crystal Reports 用户指南

20.1.3.5 导出到 Microsoft Exchange 文件夹

Crystal Reports 允许您将报表文件导出到 Microsoft Exchange 文件夹。您选择文件夹,然后以指定的格式在其中存储报表。MicrosoftExchange 文件夹可以包含具有 Microsoft Exchange 格式的标准便笺(电子邮件)、文件和实例。

X导出到 Microsoft Exchange 文件夹

1

2打开要导出的报表。在“文件”菜单上,指向“导出”,然后单击“导出报表”。

提示:另一个实现此操作的方法是单击“标准”工具栏上的“导出”按钮。

即会出现“导出”对话框。

从“格式”下拉列表中选择导出格式类型。

在本例中,选择“Microsoft Excel (XLS)”。

从“目标”下拉列表选择“Exchange 文件夹”。

单击“确定”。

出现“Excel 格式选项”对话框。有关该对话框的更多信息,请参阅第6 页上的 “导出到应用程序” 中的步骤 5。

按照需要更改格式选项。

单击“确定”。

出现“选择配置文件”对话框。

注意:如果您的计算机上未安装 Microsoft Exchange、MicrosoftMail 或 Internet E-mail,则 Microsoft Outlook 的“安装专家”将会给出提示。

从“配置文件名”下拉列表选择需要的配置文件。

如果未列出配置文件,单击“新建”进行创建。

完成时,单击“确定”。

出现“选择文件夹”对话框时,在配置文件中选择想让报表出现在其中的文件夹,然后单击“确定”。345678910

该报表将导出到您所选择的 Microsoft Exchange 文件夹。现在可以

通过 Microsoft Exchange 客户程序访问导出的报表。

分发报表333

20.1.3.6 导出到 Lotus Domino

必须具有 Lotus Domino 客户程序的 3.0 版或更高版本。您至少还需要具有寄存者访问权限。Crystal Reports 将不导出到 Lotus DominoOS/2 客户程序。

注意: 导出到 Lotus Domino 之前,必须创建一个名为“报表窗体”的窗体(其中包含一个可编辑的“备注”字段),以及一个两列视图(一列名为“#”(默认创建),另一列指向“备注”字段)。

X导出到 Lotus Domino

1

2打开要导出的报表。在“文件”菜单上,指向“导出”,然后单击“导出报表”。

提示:另一个实现此操作的方法是单击“标准”工具栏上的“导出”按钮。

即会出现“导出”对话框。

从“格式”下拉列表中选择导出格式类型。

在本例中,选择“Microsoft Excel (XLS)”。

从“目标”下拉列表选择“Lotus Domino”。

单击“确定”。

出现“Excel 格式选项”对话框。有关该对话框的更多信息,请参阅第6 页上的 “导出到应用程序” 中的步骤 5。

根据要求更改格式设置。

单击“确定”。

即会出现“选择数据库”对话框。

双击要将报表导出到的 Lotus Domino 服务器。

出现默认文件名。

选择要将报表导出到的数据库。

单击“确定”。

即会出现“备注”对话框。

键入任何备注信息,当其它用户从 Lotus Domino 桌面选择您的报表时,将会看到此备注。

单击“确定”。

导出过程开始进行。3456789101112

下次用户登录到所指定的 Lotus Domino 数据库时,他们将在桌面上看到该报表。用户可以双击报表文件名以显示您写下的备注,然后双击

报表图标以查看该报表。

334Crystal Reports 用户指南

20.1.3.7 导出到 MAPI (Microsoft Mail)

注意: 只有安装了邮件客户程序(Microsoft Outlook、MicrosoftMail 或 Exchange),此选项才适用。由于导出的报表附加在电子邮件中,您还必须妥善配置电子邮件帐户。

1

2打开要导出的报表。在“文件”菜单上,指向“导出”,然后单击“导出报表”。

提示:另一个实现此操作的方法是单击“标准”工具栏上的“导出”按钮。

即会出现“导出”对话框。

从“格式”下拉列表中选择导出格式类型。

在本例中,选择“Microsoft Excel (XLS)”。

从“目标”下拉列表选择 Microsoft Mail (MAPI) 。

单击“确定”。

出现“Excel 格式选项”对话框。有关该对话框的更多信息,请参阅第6 页上的 “导出到应用程序” 中的步骤 5。

按照需要更改格式选项。

单击“确定”。

即会出现“发送邮件”对话框。

输入地址详细信息,然后单击“发送”。

出现“导出记录”对话框。

提示:单击“取消导出”以取消导出过程。345678

20.1.4使用 Web 文件夹

您能够使用 Web 文件夹打开并保存报表,条件是:

?运行的是 Windows 2000(或更高版本),或者安装了 Office 2000

(或更高版本)。

?有权访问配置为支持 Web 文件夹的 Web 服务器。

?从此服务器将一个 Web 文件夹添加到“Web 文件夹”文件夹。X打开报表

1在“文件”菜单上,单击“打开”。

出现“打开”对话框。

单击“Web 文件夹”。

打开包含报表的文件夹。

双击打开报表。234

分发报表335

X保存报表

1在“文件”菜单上,单击“另存为”。

出现“另存为”对话框。

单击“Web 文件夹”。

查找想将报表保存到的文件夹。

输入文件名。

单击“保存”按钮。2345

注意: 在对 Web 文件夹中的报表进行更改之后,必须将更改保存到相同 Web 文件夹中的同一个文件。

20.1.5使用 Enterprise 文件夹

分发报表的另一种方式是通过 BusinessObjects Enterprise。将报表发布至 BusinessObjects Enterprise 时,您可以通过任何 Web 应用──内部网、外部网、Internet 或公司入口棗将报表提供给最终用户。

通过“打开”和“另存为”对话框中提供的 Enterprise 选项以及通过“工作台”,Crystal Reports 简化了报表的发布过程。有关通过“工作台”发布报表的更多信息,请参阅 第96 页上的 “工作台”。

在“打开”对话框中选择 Enterprise 选项时,您可以选择任何已发布的报表进行更改。“另存为”对话框中的这一选项使您能够将修改后的报表保存回原来的位置,或者使您能够将新报表保存至 Enterprise 文件夹,这实质上与将报表发布至 BusinessObjects Enterprise 相同。20.1.5.1 在 Enterprise 文件夹中打开报表

可以从 Crystal Reports 的 BusinessObjects Enterprise 文件夹中打开报表。Crystal Reports 将在“打开”对话框中显示相应的BusinessObjects Enterprise 文件夹。

X在 Enterprise 文件夹中打开报表

1

2在“文件”菜单上,单击“打开”。在“打开”对话框中单击“Enterprise”

水晶报表Crystal Reports培训教程 35_水晶报表教程

336Crystal Reports 用户指南

如果尚未登录到 BusinessObjects Enterprise,则会出现“登录到BusinessObjects Enterprise”对话框。

3

4

5在“系统”字段中,输入或选择想要连接的 Enterprise 系统的名称。输入您的用户名和密码。BusinessObjects单击身份验证列表以选择适当的身份验证类型。

Enterprise 身份验证需要能被 BusinessObjects Enterprise 识别的用户名和密码。

LDAP 身份验证需要能被 LDAP 目录服务器识别的用户名和密码。Windows 活动目录 (AD) 身份验证需要能被 Windows AD 识别的用户名和密码。

Windows NT 身份验证需要能被 Windows NT 识别的用户名和密码。单击“确定”。

出现 Enterprise 文件夹,您可以选择要在 Crystal Reports 中打开的报表。6

注意:

?要查找特定报表,请突出显示文件夹,并从其快捷菜单中选择“查找”。

然后,可以使用“查找”对话框输入报表的名称或名称的一部分。?为了避免展开包含数百个报表的文件夹,可使用文件夹快捷菜单上的

“批处理”选项:

?“第一批处理”显示选定文件夹中的前 100 个对象。

?“下一批处理”显示选定文件夹中的下 100 个对象。

?“上一批处理”显示选定文件夹中的上 100 个对象。

?“最后批处理”显示选定文件夹中的最后 100 个对象。

?选择“更新储备库对象”选项,以确保在将来打开报表时更新报表的

储备库对象。有关 BusinessObjects Enterprise 储备库的更多信息,请参阅 第100 页上的 “BusinessObjects Enterprise 储备库”

查看报表337

20.1.5.2 将报表保存至 Enterprise 文件夹

您可以将 Crystal 报表保存至 BusinessObjects Enterprise 文件夹。使用“另存为”对话框将修改后的报表保存回原始位置,或使用该对话框将新报表保存至 Enterprise 文件夹。将报表保存至 Enterprise 文件夹与将报表发布至 BusinessObjects Enterprise 相同。

X在 Enterprise 文件夹中打开报表

1

2

3在“文件”菜单上,单击“另存为”。在“另存为”对话框中单击 Enterprise。如果尚未登录到 BusinessObjects Enterprise,请立即登录。

有关如何登录到 BusinessObjects Enterprise 的信息,请参阅第11 页上的 “在 Enterprise 文件夹中打开报表”。

出现 Enterprise 文件夹时,选择要在其中保存报表的文件夹。输入报表的文件名。

如果需要在以下时候更新报表的储备库对象,请选择“启用储备库刷新”:在 Crystal Reports 中再次打开报表,或在 BusinessObjectsEnterprise 中计划报表。

有关 BusinessObjects Enterprise 储备库的更多信息,请参阅第100 页上的 “BusinessObjects Enterprise 储备库”。

单击保存将报表发布至 BusinessObjects Enterprise。4567

20.2查看报表

您可以使用多种报表查看器查看 Crystal 报表,这些报表查看器可以通过独立的报表应用程序服务器 (RAS) 或 BusinessObjectsEnterprise 以及 BusinessObjects Enterprise Software DevelopmentKit (SDK) 得到。有关 Crystal Report 查看器的信息,请参阅《报表应用程序服务器查看器帮助》或 BusinessObjects Enterprise SDK 文档中的查看器联机帮助。

一般情况下,Crystal Report Viewer 为页查看器,它使您可以看到Crystal 报表的完整页面。但是,其中一个查看器“报表部件查看器”可用于查看特定的报表对象,而不用显示整个页面。以这种方式显示的报表对象称为“报表部件”。

338Crystal Reports 用户指南

20.2.1什么是报表部件?

在查看器中单独显示的报表对象(没有报表页的其余内容)称为报表部件。而更为准确地说,报表部件是指使用从主报表对象指向目标对象的超级链接的对象。

报表部件与 Crystal Report 查看器的 DHTML 查看器子集一起工作,以扩展报表内部和报表之间的导航可能性。报表部件超级链接可以链接到当前报表中的其他对象或者其他任何报表中的对象。此链接使您可以在报表中创建一个引导路径,以便在该路径上的每一站仅显示特定的信息。

查看报表部件(而不是整页)是一个强大的功能,它使您得以将报表无缝集成到门户和无线应用程序。

20.2.1.1 报表部件 Viewer

报表部件查看器用于仅显示报表部件,而不显示报表页的其余内容。您可以将此查看器集成到 Web 应用程序中,使用户只看到特定的报表对象,而不必查看报表的其余内容。

一般而言,您需要在 Report Designer 中设置报表部件超级链接,但真正利用这一功能却是在报表查看器中。

20.2.2什么是导航?

通过 Crystal Reports 中的导航功能,您可以移至同一报表的其他报表对象,或通过指定的数据上下文移至另一个报表中的对象。在后面一种情况下,必须在 BusinessObjects Enterprise 中管理另一个报表,或者该报表必须是独立报表应用程序服务器环境的一部分。此导航功能仅在 DHTML Viewer(零客户端、服务器端查看器)中可用。它的优点是您可以直接从一个对象链接到另一个对象;查看器会传递所需的数据上下文,这样您就可以转到相关的对象和数据。

当在报表部件对象之间链接时,报表部件将使用这种导航功能。报表部件导航和常规(页面)导航之间的主要区别是:当对报表部件进行导航(使用报表部件 Viewer)时,您只看到标识为“报表部件”的对象。在常规导航(使用页面查看器或高级 DHTML 查看器)中,您将转到标识的对象,但会看到整个页面。

20.2.2.1 设置导航

导航(页面或报表部件)在“格式化编辑器”的“超级链接”选项卡上进行设置。

查看报表339

在“超级链接”选项卡的“仅 DHTML 查看器”区域中,您可以选择两个选项中的一个:

?“报表部件深化”

对于汇总字段、组图表和地图,以及报表的组页眉或组页脚中的字段来说,“报表部件深化”选项都是可用的。此选项仅与报表部件相关;默认情况下,常规导航(使用页面视图)进行深化。有关更多信息,请参阅 第16 页上的 “针对报表部件的导航”。

?“其他报表对象”

您可以将“其他报表对象”选项用于报表部件和页面导航。此选项用于指定要导航至并且要将数据上下文传递到的目标对象。

当您选择“报表部件深化”选项时,“超级链接信息”区域将包含以下选项:

?可用字段

“可用字段”区域以树视图形式列出报表中包含可用于报表部件深化的报表对象的所有节。您可以从此区域选择对象,然后将其添加到“要显示的字段”区域。

?要显示的字段

“要显示的字段”区域以树视图的形式列出您为深化选择的节和对象。有关如何使用这些选项的信息,请参阅 第17 页上的 ““报表部件深化”选项”。

当您选择“其他报表对象”选项时,“超级链接信息”区域将包含以下选项:

?粘贴报表部件链接

使用“粘贴链接”按钮可以添加有关您先前选择并复制的报表对象的详细信息。所粘贴的信息部分取决于您从与该按钮关联的列表中选择的选项。

?选自

粘贴链接信息后,“选自”字段包含您选择并从中进行复制的报表的路径和文件名(引用当前报表时为空白)。您需要通过粘贴报表部件链接向此字段中添加信息,否则它将不可访问。

?报表标题

“报表标题”字段默认显示“选自”字段中指定的报表的标题(在引用当前报表时,它包含文本 <当前报表>)。如果未在“文档属性”对话框中定义报表标题,该字段将默认显示报表的文件名。您需要通过粘贴报表部件链接向此字段中添加信息,否则它将不可访问。

340Crystal Reports 用户指南

?

?对象名称通过向此字段添加一个或多个对象,便可标识出导航的目标对象。在页面导航中,此信息将确定该页中您要移到的对象。对于报表部件导航,此信息确定查看器在导航时显示的对象(查看器仅显示已标识的对象)。您可以在“对象名称”字段中选择下列任何报表对象类型(您可以从同一报表节中选择一个或多个对象):?字段对象?图表或地图?位图?交叉表?文本对象您不能选择下列报表对象类型作为目标:?页眉或页脚内的对象。?线条或方框。?子报表或子报表内的任何对象。?整个节(必须逐个选择节内的对象)。可以用以下两种方式之一添加特定信息:?可以按照报表资源管理器中的显示键入对象名。?可以复制当前或其他报表中的报表对象,然后将其信息粘贴到该对象字段中。数据上下文

当您粘贴目标对象的信息时,程序通常会完成“数据上下文”字段。也可以使用“条件公式”按钮自定义该选项。有关更多信息,请参阅第23 页上的 “数据上下文格式”。

有关如何使用这些选项的信息,请参阅 第19 页上的 ““其他报表对象”选项”。

注意: 定义了超级链接的报表对象在“报表资源管理器”中显示为带实下划线的蓝色文本。具有“报表部件”超级链接的对象显示为带虚下划线的绿色文本。

20.2.2.2 针对报表部件的导航

报表部件使用 Crystal Reports 导航功能。但是,某些特殊情况仅适用于报表部件:

?查看器仅显示标识为目标对象的对象。

?您必须为作为报表部件导航路径上第一站的每个报表指定“初始报表

部件设置”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

查看报表341

20.2.3“报表部件深化”选项

“报表部件深化”选项用于定义一个超级链接,以便“报表部件查看器”能够模拟 Crystal Reports 的深化功能。报表部件 Viewer 仅显示目标对象;因此,若要使深化生效,您需要定义一个从主对象指向一个或多个目标对象的导航路径。当您有多个目标对象时,它们必须都驻留在同一报表节中。

“报表部件深化”选项不会影响 DHTML 页面查看器,因为该选项所模拟的 Crystal Reports 的默认深化行为是该页面查看器早已支持的行为。不过,页面查看器不会限制显示哪些对象,它们总是显示所有报表对象。

注意: “报表部件深化”选项仅用于在同一报表中的对象之间导航。由于报表部件 Viewer 仅显示目标对象,因此在“报表部件深化”超级链接生效之前,您必须为报表定义“初始报表部件设置”(即,一个默认主对象)。报表的“初始报表部件设置”定义最先出现在报表部件查看器中的对象。可以将该对象视作深化超级链接的路径的起点。X定义“初始报表部件设置”

1

2

3

4打开要定义其默认主对象的报表。右击要设为默认主对象的对象,然后从其快捷菜单中选择“复制”。在文件菜单上,单击报表选项。在“报表选项”对话框的“初始报表部件设置”区域中,单击“粘贴

链接”。

程序会将您选择作为主对象的报表对象的名称和数据上下文粘贴到适当的字段中。

提示:有关数据上下文的更多信息,请参阅 第23 页上的 “数据上下文格式”。

通过输入分号 (;) 并键入对象的名称来包含报表同一节中的其他对象。单击“确定”。5

X创建报表部件深化超级链接

注意: 开始该过程之前,务必通读 第14 页上的 “设置导航”,以便熟悉创建这种超级链接时的一些限制。

1打开一个报表,并选择期望的目标对象;然后单击“专家工具”工具

栏上的“格式”按钮。

提示:选择“格式”菜单上的“格式化字段”也可完成该操作。在“格式化编辑器”中,单击

“超级链接”选项卡。2

3423

4

5Crystal Reports 用户指南在“仅限 DHTML 查看器”区域中,选择“报表部件深化”。“超级链接信息”区域将更改,以显示可用于此类超级链接的字段。“可用字段”区域仅显示可以为深化选择的节和报表对象。通常,这些对象包括下一节中的字段对象、图表、地图、位图、交叉表和文本对象(例如,当您选择的对象属于第一组时,则包括第二组中的对象)。注意:“可用字段”区域不显示已取消的报表对象。在“可用字段”区域中,选择要用作深化目标的节或报表对象。提示:使用报表资源管理器快速找到为每个报表对象指定的默认名称。若要打开报表资源管理器,请单击“标准”工具栏上对应的按钮。您可以通过选择节节点来添加该节中的所有对象。如果展开节节点,则可以选择它所包含的一个或多个对象。使用箭头按钮将选定的节或对象移动到“要显示的字段”区域。

为了便于识别,程序将在“要显示的字段”区域中创建一个节节点。此节点包含您在

“可用字段”区域中选择的对象。

查看报表343

6如果要将其他对象添加到“要显示的字段”区域中,请在“可用字段”

列表中选择它,并将其拖动到适当的位置。

注意:

?对象在“要显示的字段”区域中的位置取决于它在报表部件查看

器中显示的方式;在“要显示的字段”区域中从上向下显示相当于在查看器中从左向右显示。使用“要显示的字段”区域上方的箭头更改对象的顺序。(请注意,程序设计师可以通过报表部件查看器的 PreserveLayout 属性变更此默认行为。)

?“要显示的字段”区域一次只能包含一个节。如果您试图添加另一

个节或另一个节中的对象,则将替换“要显示的字段”区域中的现有节。

单击“确定”。7

您已经建立从报表的主对象到一个或多个目标对象的超级链接。在报表部件 Viewer 中,您将首先看到主对象,然后,当您单击该对象以深化时,您会看到目标对象。

20.2.4“其他报表对象”选项

“其他报表对象”选项用于定义超级链接路径,以便链接相同或不同报表中的各个对象。如果您定义指向不同报表的超级链接路径,则必须在 BusinessObjects Enterprise 中管理该报表,或者它必须是独立报表应用程序服务器环境的一部分。报表部件 Viewer 仅显示您指定的对象。与“报表部件深化”选项类似,所有目标对象都必须来自同一报表节。?

?

?注意: 当使用独立 Report Application Server 环境时,使用“其他报表对象”选项进行的导航的所有源报表和目标报表应该位于默认的Report Application Server 报表目录。将报表放在该目录中可以确保链接的报表能方便地迁移到 BusinessObjects Enterprise 环境。DHTML 页面查看器也使用“其他报表对象”选项进行导航。不能为整个交叉表或 OLAP 网格对象使用“其他报表对象”选项;但

是,可以为交叉表或 OLAP 网格中的任何单独单元格使用该选项。工作流程

由于“其他报表对象”选项允许您在 BusinessObjects Enterprise 管理的不同报表的对象之间创建超级链接,因此它要求在“超级链接”选项卡中设置更多选项。以下是成功设置超级链接所必须完成的步骤的概述。?打开包含要成为目标对象的对象的报表,然后复制该对象。?打开包含主对象的报表,选择该对象,然后打开格式化编辑器。?在“超级链接”选项卡上,将目标对象中的信息粘贴到适当字段中。

以下过程向您说明如何执行所有这些步骤。

344Crystal Reports 用户指南

X创建“其他报表对象”超级链接

注意: 开始该过程之前,务必通读 第14 页上的 “设置导航”,以便熟悉创建这种超级链接时的一些限制。

1

2

3

4

5打开源报表和目标报表。源报表是从其中复制对象的报表;目标报表是将超级链接信息复制到的报表。在报表部件查看器中查看目标报表时,您首先会看到它的主对象。当您深化该对象时,将转到在源报表中选择的目标对象。在源报表中,右击所需的目标对象,然后从快捷菜单中选择“复制”。在目标对象中,选择所需的主对象,然后单击“专家工具”工具栏上的“格式”按钮。提示:选择“格式”菜单上的“格式化字段”也可完成该操作。在“格式编辑器”中,单击“超级链接”选项卡,然后选择“其他报表对象”选项。在“超级链接信息”区域中单击“粘贴链接”。

注意:如果您没有按第 2 步所示复制目标对象,则“粘贴链接”按钮将不可用。

程序将您在源报表上选择的目标对象中的标识信息复制到相应的字段。

查看报表345

将链接粘贴到目标对象时,“粘贴链接”按钮包含一个选项列表。根据您创建的链接的类型(例如,指向特定数据上下文的链接而不是指向一般数据上下文的链接),您可能会看到以下选项:

?上下文报表部件

这是默认选项,当您单击“粘贴链接”而没有查看其他列表选项时,将选择此选项。使用此选项可以粘贴内含程序可确定的、最完整的数据上下文的链接。有关更多信息,请参阅 第22 页上的““上下文报表部件”选项方案”。

?设计视图报表部件

使用此选项可以粘贴内含一般数据上下文(即不针对于特定记录的数据上下文)的链接。当您需要宽泛的数据上下文或者数据尚不存在于源报表时,请使用此选项。

?预览报表部件

使用此选项可以粘贴内含特定数据上下文(即针对于特定记录的数据上下文)的链接。当您需要特定的数据上下文或者数据已存在于源报表时,请使用此选项。

注意:如果选择“设计视图报表部件”选项(或者,如果为从报表的“设计”视图中复制的对象选择“上下文报表部件”选项),并且源报表和目标报表的数据结构不同,您将看到“报表部件映射字段”对话框。“取消映射的字段”区域中的每个字段都代表源报表中的一个组。使用此对话框可以将这些组映射到目标报表中的字段。当您映射完所有组后,可以单击“确定”按钮并继续。

6如果要从源报表的同一节中添加其他字段,则单击“对象名称”字

段,然后将光标移至现有文本的末尾。输入一个分号 (;),然后输入字段的名称。

注意:对象在“对象名称”字段中的顺序将确定它们如何在报表部件查看器中出现;在“对象名称”字段中从左向右显示相当于在查看器中从左向右显示。

可以通过用星号 (*) 表示组中的所有记录来扩大“数据上下文”的范围。

例如,如果数据上下文是 /USA/CA/Changing Gears(将只显示这个特定的明细记录),那么您可以将其更改为 /USA/CA/*,以显示该组中的所有明细记录。

提示:

?从“设计”视图中复制超级链接信息可能会更有帮助,因为数据上

下文涉及的内容更全面一些(即:您不会象在“预览”视图中那样只复制一条特定的记录)。7

水晶报表Crystal Reports培训教程 35_水晶报表教程

346Crystal Reports 用户指南

如果您的报表具有组选择公式,则应检查目标对象的数据上下文,确保其中包含正确的子索引。

?有关更多信息,请参阅 第23 页上的 “数据上下文格式”。?8单击“确定”。

您已经建立一个从主对象指向一个或多个目标对象的超级链接。在报表部件查看器中,您将首先看到主对象,然后,当您单击该对象以深化时,您会看到目标对象。

20.2.4.1 “上下文报表部件”选项方案

当粘贴报表部件的链接信息时,“上下文报表部件”选项主要影响链接的数据上下文;对于“粘贴链接”列表中的任何可用选项,“选自”字段(报表 URI)和“对象名称”字段始终是相同的。本节提供各种方案,并介绍程序如何为每种方案创建数据上下文。

方案 1

如果源报表包含数据(即,如果报表处于“预览”视图中),则对于选定字段的所有子项,“上下文报表部件”数据上下文(在目标报表中)为源报表的“预览”数据上下文。例如,您可能会在“数据上下文”字段中看到以下内容:/Country[USA]/Region[*]。否则,程序会使用源报表的“设计”视图数据上下文作为目标报表中的“上下文报表部件”数据上下文。

方案 2

如果源报表和目标报表是同一个报表,并且选作源的对象来自“预览”视图,那么当您选择链接到的目标对象处于高于源对象的级别时,数据上下文将被留为空白。例如,当源数据上下文为 /Country[Australia]/ChildIndex[5] 且目标数据上下文为 /Country[Australia] 时,“上下文报表部件”数据上下文将被留为空白。

方案 3

如果源报表和目标报表是同一个报表,并且选作源的对象来自“预览”视图,那么当您选择链接到的目标对象处于低于源对象的级别时,所粘贴的数据上下文为“设计”视图数据上下文(以公式的形式)。例如,当源数据上下文为 /Country[Australia] 且目标数据上下文为 /Country[Australia]/ChildIndex[5] 时,“上下文报表部件”数据上下文为 "/"+{客户.国家或地区}。

查看报表347

交叉表

如果在源报表中复制的对象是交叉表的部件,则“上下文报表部件”数据上下文基于交叉表中嵌入的选定对象。Crystal Reports 通过跟踪交叉表中的选定对象是行、列还是单元格来创建数据上下文。接着,程序将检索行名和列名。然后,它将分析“设计”视图报表上下文。最后,如果数据上下文公式中的组出现在先前检索到的行名或列名中,程序将通过添加 GridRowColumnValue 函数来生成“上下文报表部件”数据上下文。例如,您可能会看到如下数据上下文:

"/"+GridRowColumnValue("客户.国家和地区")+

"/"+GridRowColumnValue("客户.地区")

20.2.4.2 数据上下文格式

?

?通常情况下,数据上下文公式类似于下列格式:"/" + {Table.Field} + "/" + {Table.Field}您还可以使用下列格式:

?类似于 XPath 的格式:

/USA/Bicycle

?强类型格式:

/Country[USA]/Product Class[Bicycle]

注意:

?可以以基于 0 的格式添加明细级别的信息:

/USA/Bicycle/ChildIndex[4]

?

?还可以使用通配符标识所有实例:/USA/*对于交叉表对象,可以在单元格、列或行上使用导航。要定义数据上下文,请使用 GridRowColumnValue 格式化函数。例如:

"/" + GridRowColumnValue ("Supplier.Country") + "/" +

GridRowColumnValue ("Product.Product Class")。

20.2.5查看器中显示的超级链接

本节概述了有关超级链接选项的信息,以及这些选项如何在页面查看器和报表部件查看器中工作的信息。

348Crystal Reports 用户指南

各超级链接选项之间的不同点

“报表部件深化”

此选项允许选择一个或多个报表对此选项允许选择一个或多个报表象。对象。

目标对象必须来源于同一报表节。目标对象必须来源于同一报表节。包含目标对象的节的位置不受限制。包含目标对象的节的位置必须紧?该节可位于报表中的任意位置。邻源对象的较低组级别中。?该节可位于比源对象高或低的组

级别中。

对象可以位于另一报表中,该报表 对象必须位于同一报表中。是在 BusinessObjects Enterprise

中管理的,或者是独立报表应用程

序服务器 (RAS) 的一部分。

查看器显示超级链接的方式之间的不同点页面查看器

其他报表对象:

?定位到目标对象并显示整页的

内容。

报表部件深化:

?定位(深化)到组并显示完整的

组内容。

默认深化(无超级链接):

?从组页眉或页脚、图表或者地图

进行的组深化显示组视图。

?子报表深化显示子报表视图。报表部件 Viewer其他报表对象:?定位到目标对象并仅显示目标对象。报表部件深化:?定位到目标对象并仅显示目标对象。默认深化(无超级链接):?不可用。

使用智能标记349

20.3使用智能标记

Crystal Reports 允许您运用 Office XP 中的智能标记。将图表、文本对象或字段对象粘贴到 Office XP 应用程序中后,通过选择智能标记选项可以从宿主报表中查看数据。下表总结了可用的所有选项。Office XP 应用程序智能标记选项

Word查看

刷新Crystal Reports 对象类型

Excel

Outlook文本对象字段对象图表查看文本对象刷新字段对象查看文本对象

刷新(仅在创建消字段对象

息时)图表

使用智能标记之前,必须在“选项”对话框的“智能标记”选项卡上配置 Web 服务器选项。此外,还必须创建 .asp 或 .jsp 页,以便查看报表详细资料。通常,这些任务应该由系统管理员来完成。

注意: 要使用智能标记的报表必须位于“选项”对话框中指定的 Web服务器上,并且其所在目录必须是实际位置的镜像;或者指定的 Web 服务器必须配置为可接受 UNC 路径。

20.3.0.1 对 Crystal Reports 对象应用智能标记

1

2打开要复制到 Office XP 应用程序中的对象所在的 Crystal 报表。在“文件”菜单上,单击“选项”,确保已配置了“智能标记和 HTML

预览”选项卡上“智能标记 Web 服务器选项”区域中的选项:?必须指定 Web 服务器。

?必须指定虚拟目录(提供有默认目录)。

?必须指定查看页面(提供有默认页面)。

在 Crystal Reports 的“预览”选项卡上,右击要复制的文本对象、字段对象或图表,然后从其快捷菜单上选择“复制智能标记”。3

350Crystal Reports 用户指南

4打开相应的 Office XP 应用程序,将上述报表对象粘贴到文档、工

作表或电子邮件消息中。

注意:参见本节中的表格,查看对于可粘贴到每种 Office XP 应用程序中的报表对象的限制。

在 Office XP 应用程序中,从粘贴的报表对象的选项中选择对应的智能标记。

注意:参见本节中的表格,查看每种 Office XP 应用程序中对于可用智能标记的限制。

“选项”对话框中指定的 .asp 或 .jsp 页将出现,其中显示宿主Crystal 报表中的相应信息。5

水晶报表Crystal Reports培训教程 35_水晶报表教程

第21章 报表警报

21.1关于报表警报

报表警报是在 Crystal Reports 中创建的、当报表数据遇到特定条件时出现的自定义消息。报表警报可以指示用户将采取的操作或有关报表数据的信息。

报表警报是用对指定条件进行计算的公式创建的。如果条件为真,则触发警报并显示出警报消息。消息可以是文本字符串或者是兼有文本和报表字段的公式。

一旦触发报表警报,则直到您刷新报表数据时才会再次对该警报进行计算。

报表警报是针对每个报表的,因此您需要决定何时使用它们,何时不使用它们。报表警报对于指出重要信息(如高于或低于某一界限的销售额)很有用。而且由于警报消息是由您创建的,因此也可针对您的数据。21.2使用报表警报

?

?

?

?

?本指南的这一节着重介绍为使用报表警报而需执行的任务: 第1 页上的 “创建报表警报” 第3 页上的 “编辑报表警报” 第3 页上的 “删除报表警报” 第4 页上的 “查看报表警报” 第5 页上的 “在公式中引用报表警报”

21.2.1创建报表警报

?

?

?创建报表警报时,必须完成下列三个步骤:命名警报。定义触发警报的条件。创建希望在触发警报时显示的消息(此步骤是可选的)。X创建报表警报

1在“报表”菜单上,指向“警报”,然后单击“创建或修改警报”。

出现“创建警报”对话框。

3522

3

4

5

6

7

8

9Crystal Reports 用户指南单击“新建”。出现“创建警报”对话框。在“名称”框中输入新警报的名称。在“消息”框中输入警报消息。“消息”框使您可以输入用作默认值的消息。如果希望每次触发警报时显示相同的消息,请在“消息”框中输入该消息。然而,如果希望使用公式以便用数据元素自定义消息,请参阅下一个步骤。如果希望使用公式创建警报消息,请单击“消息”框右侧的公式按钮。公式工作室出现。有关如何使用编辑器的信息,请参阅 第362 页上的 “使用公式编辑器”。输入警报消息公式。例如,如果希望看到消息“Country is a star performer”(其中Country 是某个具体国家/地区的名称),可以创建下列公式:({客户.国家或地区}) + " is a star performer"注意:?警报消息公式的结果必须是一个字符串。?DefaultAttribute 函数可用于引用添加到“消息”框中的消息。例如,如果“消息”框中的消息是“is a star performer”,则警报消息公式可以是:({客户.国家或地区}) + DefaultAttribute该公式依赖于您在“消息”框中输入的文本,那些文本成为DefaultAttribute。?消息条件公式可以使用 Crystal 语法或 Basic 语法来创建。单击“保存并关闭”以返回“创建警报”对话框。在“创建警报”对话框,单击“条件”.公式工作室出现。输入警报条件公式。

警报公式可以基于重复性记录或基于汇总字段,但不能基于打印时间字段(如运行总计或打印时间公式)。警报公式不能有共享变量。如果警报公式基于汇总字段,那么所使用的任何重复性字段必须在汇总字段中保持不变。例如,如果按照“国家/地区”分组,可以创建如下警报:

Sum ({客户.去年销售额}, {客户.国家或地区}) > 10000

在本例中,您的公式可以引用“国家/地区”或“地区”,但不能引用“城市”或“客户姓名”,因为它们是变化的。

注意:

警报条件公式可以使用 Crystal 语法或 Basic 语法来创建。

使用报表警报353

10如果不希望计算警报,请清除“启用”复选框。

否则,保留它的选中状态。

单击“确定”保存警报。

随即返回到“创建警报”对话框,并且列出了您的新警报。您可以看到它的名称和状态(“启用”或“禁用”)。11

在“创建警报”对话框中仅显示已启用和已禁用的警报。如果触发警报,则可以在“报表警报”对话框中看到它。

21.2.2编辑报表警报

1

2在“报表”菜单上,指向“警报”,然后单击“创建或修改警报”。在“创建警报”对话框中,选择要编辑的警报,然后单击“编辑”编辑。

提示:双击警报也可以对它进行编辑。

在“编辑警报”对话框中进行所需的更改。

单击“确定”保存更改。34

注意: 如果已经触发警报,编辑它时会将其从“报表警报”对话框中删除。

21.2.3删除报表警报

1

2在“报表”菜单上,指向“警报”,然后单击“创建或修改警报”。在“创建警报”对话框中,选择要删除的警报,然后单击“删除”编辑。

所选警报随即从“创建警报”对话框中删除。

注意: 如果已经触发警报,删除它时还会将其从“报表警报”对话框

中删除。

354Crystal Reports 用户指南

21.2.4查看报表警报

?

?可以通过下列方式查看触发的报表警报:刷新报表的数据。从“报表”菜单的“警报”子菜单中选择“已触发的警报”。

注意: 如果希望在报表数据刷新时查看警报,必须在“选项”对话框的“建立报表”选项卡上选择“刷新时显示警报”(该选项在“报表选项”对话框中也可用)。

X查看报表警报

1在“报表”菜单上,指向“警报”,然后单击“已触发的警报”。

出现“报表警报”对话框。

2

3选择要查看其记录的警报。单击“查看记录”。

一个新报表选项卡打开,显示出触发警报的报表记录。如果记录是隐藏的,则记录组会显示出来,但不进行深化。

注意:如果单击“查看记录”按钮之前选择的已触发警报不止一个,则结果是通过对所选警报执行 AND 布尔运算来生成的。

若要返回到“报表警报”对话框,请单击“预览”选项卡。

单击“关闭”关闭

“报表警报”对话框。45

使用报表警报355

21.2.5在公式中引用报表警报

可以在公式中引用警报。引用警报的任何公式都将成为打印时间公式。?

?

?有下列函数可用:IsAlertEnabled( )IsAlertTriggered( )AlertMessage( )

这些函数的行为与在“创建警报”对话框中创建的警报相同:

IsAlertTriggered("AlertName") 仅对于触发警报的记录为真。AlertMessage("AlertName") 在警报为真时显示记录的消息。?

?

因为警报不是字段对象(不能把它们放到报表中),所以它们的表示形式与公式工作室中的报表字段不同。在“函数”树中,可以看到函数本身所在的“警报”标题。可用警报按名称列在此标题下方。

水晶报表Crystal Reports培训教程 35_水晶报表教程

第22章 使用公式

22.1公式概述

在很多情况下,报表所需的数据已存在于数据库表字段中。例如,若要准备一份订单列表,应将适当的字段放置在报表内。

但是,有时需要在报表中放置不存在于任何数据字段中的数据。在这种情况下,便需要创建公式。例如,要计算处理每个订单所需的天数,需要一个公式来确定订购日期和发货日期之间的天数。Crystal Reports可以使您方便地创建这样一个公式。

22.1.1公式的典型用途

公式有多种用途。如果需要特殊的数据操作,可以使用公式来完成。创建计算字段添加到报表

计算打折 15% 后的价格:

Crystal 语法示例:

{订单细节.单价}*.85

Basic 语法示例:

formula = {订单细节.单价}*.85

格式化报表上的文本

将“客户名称”字段中的所有值更改为大写字母:

Crystal 语法示例:

UpperCase ({客户.客户姓名})

Basic 语法示例:

formula = UCase ({客户.客户姓名})

357Crystal Reports 用户指南

提取文本字符串的一个部分或多个部分

提取客户名称的第一个字母:

Crystal 语法示例:

{客户.客户姓名}[1]

Basic 语法示例:

formula = {客户.客户姓名} (1)

提取日期中的部分:

确定发出订单的月份:

Crystal 语法示例:

Month ({订单.订单日期})

Basic 语法示例:

formula = Month ({订单.订单日期})

使用自定义函数

将 $500 从美国货币转换为加拿大货币:

Crystal 语法示例:

cdConvertUSToCanadian (500)

Basic 语法示例:

formula = cdConvertUSToCanadian (500)

22.2公式组件和语法

公式包含两个关键部分:组件和语法。组件是创建公式所添加的部分,而语法是组织组件所遵循的规则。

22.2.1公式组件

在 Crystal Reports 中创建公式与在任何电子表格应用程序中创建公式类似。可以在公式中使用下列组件:

字段

示例:{客户.客户姓}、{客户.去年销售额}

数字

示例:1、2、3.1416

公式组件和语法358

文本

示例:“数量”、“:”、“您的文本”

运算符

示例:+(加)、/(除)、-x(求反)

运算符是可以在公式中使用的操作。

函数

示例:Round (x)、Trim (x)

函数执行求平均值、求和与计数之类的计算。列出所有可用的函数,其参数一并列出,并根据用途排列。

自定义函数

示例:cdFirstDayofMonth、cdStatutoryHolidays

自定义函数提供了一种共享和重复使用公式逻辑的途径。它们可存储在 BusinessObjects Enterprise 储备库中,而后可将其添加到报表中。一旦自定义函数添加到报表后,当创建公式时,用户就可在“公式专家”中使用自定义函数。

控制结构

示例:“If”和“Select”、“For”循环

组字段值

示例:Average (fld, condFld)、Sum (fld, condFld, "条件")

组字段值对组进行汇总。例如,可以使用组字段值来得出各个组在总计中所占百分比。

其它公式

示例:{@GrossProfit}、{@QUOTA}

22.2.2公式语法

?

?

?语法规则用于创建正确的公式。一些基本规则有:将文本字符串括在引号内。将参数括在括号内(在合适的位置)。引用的公式使用前导 @ 符号标识。

359Crystal Reports 用户指南

22.2.2.1 Crystal 语法和 Basic 语法

创建公式时,可以选择使用 Crystal 语法或 Basic 语法。几乎任何使用某种语法编写的公式都可以使用另一种语法来编写。报表可以包含使用 Crystal 语法的公式,也可以包含使用 Basic 语法的公式。

Crystal 语法是包括在 Crystal Reports 的所有版本中的公式语言。如果熟悉 Microsoft Visual Basic 或 Basic 的其他版本,则您可能更熟悉 Basic 语法。总而言之,除了有特定扩展以处理报表外,Basic语法以 Visual Basic 为模型。

如果您已经习惯了 Crystal 语法,则可以继续使用它,并且可受益于由 Visual Basic 所产生的新函数、运算符和控制结构。

?

?

?注意: 记录选定和组选定公式不能用 Basic 语法编写。使用 Basic 语法不会减慢报表的处理过程。使用 Basic 语法公式的报表可以在运行 Crystal Reports 的任何机器上运行。使用 Basic 语法公式无需同报表一起分发任何附加文件。

相关主题

?

?若要了解 Basic 语法,请参阅联机帮助中的“使用 Basic 语法创建公式”。若要了解 Crystal 语法,请参阅联机帮助中的“使用 Crystal 语法

创建公式”。

22.3公式中的用户函数库

Crystal Reports 使开发人员可以创建能由公式编辑器识别的用户函数库 (UFL)。UFL 是由开发人员创建以满足特定需要的函数库。UFL 可在COM 或 Java 环境中编程。

Crystal Reports 使您可以在公式编辑器中查看 COM UFL 或 JavaUFL,但不能同时查看两者。(您也可以选择不查看 UFL。)

注意: Java UFL 在报表应用程序服务器 (RAS) 和 Crystal 页面服务器中不受支持,因此,如果报表中有公式并且该公式使用 Java UFL,则由于公式未能编译而使报表不能在 BusinessObjects Enterprise 中运行。

有关开发 Java UFL 和配置 Crystal Reports 以使用 UFL 的详细信息,请参阅《Java 报表生成组件开发人员指南》。

注意: 完成该开发人员指南中所述的配置后,必须返回 CrystalReports,指向“文件”菜单,然后选择“选项”。在“公式编辑器”选项卡中,转到“UFL 支持”并选择“仅限于 Java UFL”。

指定公式360

22.4指定公式

在 Crystal Reports 中有几种不同种类的公式:报表、格式化、选定、搜索、运行总计条件和警报公式。报表中的多数公式为报表公式和条件格式化公式。

报表公式

报表公式是在报表中创建的单独公式。例如,计算订购日期与发货日期之间天数的公式即为报表公式。

条件格式化公式

格式化公式更改报表的布局和设计,以及文本、数据库字段、对象或整个报表节的外观。通过“格式编辑器”来设置文本的格式。如果需要创建格式化公式,请从“格式编辑器”访问公式工作室。请参阅 第229 页上的 “使用条件格式化”。

注意: 如果从“格式设置编辑器”中打开“公式工作室”,则既无法创建不同类型的公式,也无法修改或删除现有的公式。但是,您不能查看任何用于参考的任何公式。

选定公式

选定公式指定并限制在报表中出现的记录和组。可以直接输入这些公式,也可以使用“选择专家”指定您的选择。Crystal Reports 然后会生成记录选择并将选定公式分组。可以选择手动编辑这些公式,但必须使用 Crystal 语法。请参阅 第131 页上的 “选择记录”。

搜索公式

搜索公式帮助您在报表中定位数据。与选定公式一样,一般不直接输入这些公式,而是使用“搜索专家”来指定搜索条件。Crystal Reports便会生成公式。可以选择手动编辑这些公式,但必须使用 Crystal 语法。

注意: 如果您已经了解 Basic 语法,则只需要了解少量的 Crystal语法便可以修改大多数选定公式和搜索公式。

运行总计条件公式

运行总计条件公式使您能够定义运行总计求值或重置所依据的条件。请参阅 第175 页上的 “创建条件运行总计”。

警报公式

警报公式帮助您定义报表警报的条件和消息。请参阅 第351 页上的“关于报表警报”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

361Crystal Reports 用户指南

22.4.1使用 公式工作室

可在公式工作室中创建多种不同的公式。该工作室由一个工具栏、一个列出可创建或修改公式的类型的树和一个定义公式本身的区域组成。

注意: 搜索公式和运行总计条件公式通过“搜索专家”和“创建运行总计字段”(或“编辑运行总计字段”)对话框来创建和维护。这些功能会打开公式工作室,使您可以使用您熟悉的用户界面,但不能直接从主公式工作室中添加或维护这些种类的公式。

22.4.1.1 访问 公式工作室

有许多途径可访问公式工作室。当您添加新“公式字段”、定义选定公式、使用自定义函数时,都会看到它。

可在开始添加特定种类的公式之前单独打开公式工作室。

X若要访问公式工作室

1在“报表”菜单上,单击公式工作室。

提示:另一种途径是单击“专家工具”工具栏上的公式工作室按钮。公式工作室出现。

单击“新建”,然后从出现的列表中选择所要创建的公式种类。

提示:也可在“工作室树”中选择适当的文件夹,然后单击“新建”按钮。

出现相应的编辑器或对话框。2

22.4.1.2 工作室树

“工作室树”包含在 Crystal Reports 中可创建的每种类型公式的文件夹。它也包含用于自定义函数和 SQL 表达式的文件夹。如果工作室的出现是使用特定命令的结果(例如,选择了“选择公式”子菜单上的“记录”命令),则树中适当的文件夹将被选中,并且适当版本的“公式编辑器”将会出现。

展开树中的任何文件夹均可查看已存在的公式。可以添加新公式,并且可按需要编辑或删除现有公式。

提示:可以停靠“工作室树”。默认情况下,它停靠在公式工作室的左侧,不过您可手动将其停靠在右侧。自由浮动模式下,在工作室中可将

“工作室树”拖动到任何位置。

指定公式362

22.4.2使用公式编辑器

“公式编辑器”是公式工作室的一个组件。使用“公式编辑器”可创建和修改公式的内容。

22.4.2.1 了解“公式编辑器”的组成部分

“公式编辑器”包含四个主要窗口。

窗口

报表字段

函数内容说明报表字段包含报表可以访问的所有数据库字段。它们还包括已经为报表创建的任何公式或组。函数是返回值的预建过程。它们执行各种计算,

例如求平均值、求和、计数、正弦、剪裁和大写。

自定义函数也列于此窗口中

运算符是在公式中使用的“操作谓词”。它们描

述在两个或多个值之间发生的操作或动作。

运算符示例:加、减、小于和大于。

在其内创建公式的区域。运算符公式文本窗口

22.4.2.2 选择语法

公式工作室的“表达式编辑器”工具栏包含一个下拉列表,用于为所创建的公式选择 Crystal 或 Basic 语法。

注意: 将 Crystal 语法更改为 Basic 语法会更改“函数”窗口中的函数列表以及“运算符”窗口中的运算符列表,反之亦然。函数和运算符因语法不同而不同。

可用的报表字段不变,因为报表字段对每种语法均可用。

设置默认语法

当打开“公式编辑器”时,Crystal 语法作为默认语法出现。若要更改默认语法,请从“文件”菜单选择“选项”,然后单击“建立报表”选项卡。从“公式语言”下拉列表中选择首选语法,然后单击“确定”。当访问“公式编辑器”时,所选语法便作为默认语法出现。

22.4.2.3 输入公式组件

“公式编辑器”顶部的“报表字段”、“函数”和“运算符”树包含主要公式组件。双击这些树中的任意一个组件将该组件添加到公式中。

363Crystal Reports 用户指南

例如,如果将语法设置为 Basic 语法,并双击“运算符”树中的“运算符”>“控制结构”>“多行 If”,则下列文本将传入公式文本窗口,其中光标位于 If 和 Then 之间:

If | Then

ElseIf Then

Else

End If

以上文本帮助您组织编写公式所需的部分。

22.5创建与修改公式

22.5.1创建公式并将其插入到报表中

1

2

3在“视图”菜单上单击“字段资源管理器”。在“字段资源管理器”对话框中,选择“公式字段”,然后单击“新建”。在“公式名称”对话框中,输入想标识公式的名称,例如“第一个字

母”,然后单击“确定”。

公式工作室将出现,“公式编辑器”处于活动状态。

在“表达式编辑器”工具栏上选择 Crystal 或 Basic 语法。

如果不确定要选择哪种语法则请参阅 第3 页上的 “公式语法”

。4

创建与修改公式364

5在组件中键入或从组件树中选择它们以输入公式。

提示:Ctrl + 空格键 可调出可用函数的列表。如果已经开始键入,将弹出一个关键字列表,其中包含可能与您刚键入的内容相匹配的关键字。

单击“检查”识别出公式中的任何错误。

修复“公式检查器”识别出的任何语法错误。

当公式具有正确的语法后,单击公式工作室工具栏上的“保存并关闭”。

在“字段资源管理器”对话框中选择该新公式,然后将其拖动到希望其在报表中出现的位置。6789

注意: 放置在报表中的公式在“设计”选项卡上以 @ 指示(例如,@ProcessTime)。

22.5.2在“公式专家”中创建公式

“公式专家”是公式工作室的一个组件。使用“公式专家”可创建和修改基于自定义函数的公式。

注意: 若要了解“公式专家”的用户界面,请参阅联机帮助中的“公式专家”。

X若要在“公式专家”中创建公式

注意: 在开始此过程之前,请确保在报表中或在您具备访问权的BusinessObjects Enterprise 储备库中具有自定义函数。

1在“报表”菜单上,单击公式工作室。

提示:另一种途径是单击“专家工具”工具栏上的公式工作室按钮。在“工作室树”中选择“公式字段”,然后单击“新建”。

在“公式名称”对话框中,输入想标识公式的名称,例如“第一个字母”,然后单击“确定”。

“公式专家”将出现,“公式编辑器”处于活动状态。

单击工具栏上的“使用专家/编辑器”

。234

365Crystal Reports 用户指南

“公式专家”将出现。

5在“提供逻辑的自定义函数”区域,选择希望公式所基于的自定义函数。

您可选择“报表自定义函数”(存在于当前报表中的自定义函数)或“储备库自定义函数”(存储在储备库中的自定义函数)。

注意:如果选择某“储备库自定义函数”,则该自定义函数将添加到当前报表中。如果该自定义函数需要储备库中的其他自定义函数,则它们也将添加到报表中。

在“函数参数”区域,在适当的“值”字段中为每个参数指定值。您可直接输入常量值,或者可从关联列表中选择预定义的值或报表字段。

单击“保存”将公式保存到公式工作室的“公式字段”文件夹中。67

现在,您可在报表中使用此公式,就像使用在“公式编辑器”中创建的公式一样。

22.5.3编辑公式

1在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”对话框。

右击希望编辑的公式并选择“编辑”。

公式工作室将出现,

“公式编辑器”处于活动状态。2

水晶报表Crystal Reports培训教程 35_水晶报表教程

创建与修改公式366

3

4

5

6在“公式编辑器”中编辑该公式。 单击“检查”识别出公式中的任何错误。修复“公式检查器”识别出的任何语法错误。当公式具有正确的语法后,单击公式工作室工具栏上的“保存并关闭”。

22.5.4搜索和替换文本

1在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”对话框。

右击希望编辑的公式并选择“编辑”。

公式工作室将出现,“公式编辑器”处于活动状态。

在“表达式编辑器”工具栏上,单击“查找或替换”以打开“查找”对话框。

从该对话框,可以在“公式”文本框内搜索和替换文本。

提示:请确保从“搜索”列表中选择希望搜索的区域。

单击“标记全部”按钮,以标记出现搜索文本的全部位置。

单击“全部替换”按钮以使用“替换为”文本框的内容替换出现的所有搜索文本。2345

还可以在任一“公式编辑器”树内进行查找(但不替换)(使用“搜索”选项来指定搜索哪个列表框)。当指定在列表框内搜索时,“标记全部”、“替换”和“全部替换”按钮变为非活动按钮。

22.5.5从联机帮助复制公式

由于使用“公式编辑器”开发的公式为文本,所以可以将有用的联机公式直接复制到“公式编辑器”中,然后根据需要对其进行修改。X从联机帮助复制公式

1在“帮助”菜单上,单击“Crystal Reports 帮助”。

Crystal Reports 联机帮助将出现。

单击“索引”选项卡。

在关键字字段中输入“公式”,然后单击“显示”。

在公式主题中滚动,直到定位到希望复制的公式为止。

将公式突出显示,右击鼠标,从菜单中选择“复制”。

Windows 在

“剪贴板”上放置所选文本的副本。2345

367Crystal Reports 用户指南

6返回到 Crystal Reports,从主菜单中选择“视图”,然后选择“字

段资源管理器”。

出现“字段资源管理器”对话框。

选择“公式字段”,然后单击“新建”按钮。

出现“公式名称”对话框。

输入用来标识公式的名称,然后单击“确定”。

公式工作室将出现,“公式编辑器”处于活动状态。

将插入点放置在“公式编辑器”的“公式”文本框中希望文本出现的位置,然后按 Ctrl+V 从“剪贴板”粘贴文本。

通过更改字段、公式、组字段、条件语句和文本字符串来根据需要修改公式,以用于新报表中的数据。

当公式具有正确的语法后,单击公式工作室工具栏上的“保存并关闭”。7891011

22.5.6将公式从一个报表复制到另一个报表

可能想将在一个报表中创建的公式复制到另一个报表中使用。通过“剪贴板”将文本公式从一个报表复制到另一个报表。

X将公式从一个报表复制到另一个报表

1

2

3

4

5

6在报表中选择要复制的公式字段。在“编辑”菜单上,单击“复制”。打开要将公式复制到其中的报表。从“编辑”菜单选择“粘贴”。当程序显示对象框架时,将公式拖动到新位置。若要对公式进行更改,请右击该公式,然后从快捷菜单选择“编辑公

式”命令。

公式工作室将出现,“公式编辑器”处于活动状态。

删除原值并键入新值,或从“字段”、“函数”和/或“运算符”树选择新值。

完成后,单击公式工作室工具栏上的“保存并关闭”

。78

删除公式368

22.5.6.1 编辑公式副本的要点

?

?

?

?

If {file.FIELD} = "text string"当进行更改时,请以下列各点为指南:公式副本中所引用的所有字段、公式和组字段必须实际存在于新报表中。这意味着原公式中所引用的任何数据库(或具有相同结构、字段名和别名的数据库)在新报表中必须是活动的。如果有不活动的此类数据库,则必须更改公式副本中的字段、公式和组字段引用,以对应于新报表中的元素。如果公式包含条件元素,则须确定条件适用于新报表中的数据。例如,如果原报表中的公式当数量大于 100 时执行某项操作,则须确定大于 100 的条件在新报表中也有意义。当修改公式时,可能会发现大于 10 或大于 2000 对新数据更有意义。如果对新数据使用该公式,且报表包含与以下语句类似的语句:

确保公式中所使用的文本字符串与新数据中实际存在的值相匹配。

22.6删除公式

?

?当创建公式并将其添加到报表后,Report Designer:使用指定给公式的名称存储创建公式的规范。在报表中的指定位置放置该公式的工作副本。工作副本是出现在报表

中任意处的该公式。

要完全删除公式,必须删除该公式的规范和所有工作副本。

注意: 不能删除规范而不删除公式的所有工作副本。

22.6.1从报表删除工作公式

1

2右击要从报表删除的公式。选择“删除”。

注意: 即使公式的工作副本已从报表删除,公式规范仍保持不变。规范在“字段资源管理器”对话框中列出。如果要在报表中重新输入公式,则可以用它。

22.6.2删除公式规范

1从主菜单中选择“视图”,然后选择“字段资源管理器”。

出现“字段资源管理器”对话框。

右击要删除的公式,然后选择“删除”。2

注意: 如果该公式在报表中正在使用,则出现一个对话框。如果删除该公式,则将删除报表中对它的所有引用。单击“是”以删除。

369Crystal Reports 用户指南

22.7调试公式

有关调试保存公式时出现的错误的帮助,请参阅 第14 页上的 “调试教程”。

有关调试求值时间错误(发生这类错误时,程序将调出公式编辑器堆栈列表并帮助您进行调试)的帮助,请参阅调试求值时间错误。

22.7.1调试求值时间错误

如果在发生求值时间错误后出现公式工作室,“工作室树”中将包含一个调用堆栈。树的根节点提供所发生的错误的说明。树中的节点提供发生错误时正在计算的自定义函数和/或公式的名称。调用堆栈顶端的自定义函数/公式就是检测到该错误的位置。堆栈中下方的自定义函数/公式调用其上方相邻的自定义函数/公式。如果在树中选择一个自定义函数/公式节点,该自定义函数/公式的文本将显示在编辑器窗口中,而且发生错误时正在计算的表达式将突出显示。如果展开树中的一个自定义函数/公式节点,将显示该自定义函数/公式中使用的变量,以及这些变量在错误发生时的值。

22.7.1.1 求值时间错误示例

使用示例报表“Custom Functions.rpt”创建一个新公式,用 @CalendarDays Between 函数的结果除 1。如果使用 Basic 语法编写,该函数应如下所示:

formula = 1/{@Calendar Days Between}

如果使用 Crystal 语法编写,该函数应如下所示:

1/{@Calendar Days Between}

将此公式插入到报表的详细资料部分,然后预览报表。将发生“被零除”错误。程序将调出公式编辑器,并在左侧显示调用堆栈。

22.7.2调试教程

跟随下面的示例来学习调试公式所需步骤。完成本练习后,请使用同样的准则来调试您自己的公式。

22.7.2.1 关于本教程

?

?本教程使用 Xtreme.mdb 示例数据库。本教程使用 Crystal 语法。

调试公式370

?下列公式是将要测试是否有错误的公式:

If ({customer.CUSTOMER NAME} [1 to 2 = "Bi" and

ToText({customer,CUSTOMER ID}) [1] = "6") Or

({customer.CUSTOMER NAME} [1] = 'Ro" and

ToText({customer.CUSTOMER ID}) [1] = "5")

“首选客户”

Else

“不符合条件”

该公式如果正确,应挑选所有名称以“Bi”开始和客户 ID 以“6”开始的客户,以及那些名称以“Ro”开始和客户 ID 以“5”开始的公司。当输出该字段时,那些选定内容将显示为“首选客户”,而其余的将显示为“不符合条件”。

现在要将公式分解以检查和查看公式的每个条件单独工作的情况。22.7.2.2 Formula1

1若要开始,请使用 xtreme.mdb 中的 Customer 表创建一个报表,并

将下列字段从左到右放置在“详细资料”节中:

{客户.客户 ID}

{客户.客户姓名}

为了测试公式的每个部分,请将一个新的公式字段放置在报表中这两个字段旁边。

2

3创建一个名为 Formula1 的新公式。将以下内容键入“公式编辑器”中的“公式文本”框内:

If {customer.CUSTOMER NAME} [1 to 2 = "Bi" Then

"TRUE"

Else

"FALSE"

4

5

6

7

8

9单击“检查”以测试是否有错误。您将收到以下错误消息:] 丢失。通过在 2 后插入缺少的“]”更正公式。再次单击“检查”。您将收到以下消息:未找到错误。单击公式工作室工具栏上的“保存并关闭”。在报表“详细资料”节中两个数据字段的右边插入更正了的公式字段。单击“标准”工具栏上的“打印预览”检查报表中的值,并比较各个

字段以查看 @Formula1 所返回的字段值是否正确。

水晶报表Crystal Reports培训教程 35_水晶报表教程

371Crystal Reports 用户指南

您将发现以“Bi”开始的客户名称旁所列的为“TRUE”,而所有其他客户名称旁所列的为“FALSE”。现在检查公式的其它部分。遵照步骤 1 -9,使用下面所指定的公式,分别创建 Formula2、Formula3 和 Formula4。

在“详细资料”节的同一行插入每个公式字段,以便于比较。检查每个公式是否有错误,按需要进行修复,在确保所返回的值正确后开始对Formula2 进行操作。

22.7.2.3 Formula2

1

2创建名为 Formula2 的新公式。将以下内容键入“公式编辑器”中的“公式文本”框内:

If ToText({customer,CUSTOMER ID}) [1] = "6" Then

"TRUE"

Else

"FALSE"

3

4

5

6

7单击“检查”以测试是否有错误。您将收到以下错误消息:该字段名未知。通过用句号 (.) 替换字段名中的逗号 (,) 来更正公式。再次单击“检查”。现在公式应没有错误。将该公式放置在 @Formula1 字段的右边。单击“标准”工具栏上的“打印预览”检查报表中的值,并比较各个

字段以查看 @Formula2 所返回的字段值是否正确。

您将看到以 6 开始的所有客户编号旁所列的为“TRUE”,而所有不以 6 开始的客户编号旁所列的为“FALSE”。

22.7.2.4 Formula3

1

2创建名为 Formula3 的新公式。将以下内容键入“公式编辑器”中的“公式文本”框内:

If {customer.CUSTOMER NAME} [1 to 2] = 'Ro" Then

"TRUE"

Else

"FALSE"

3

4

5

6

单击“检查”以测试是否有错误。您将收到以下错误消息:该字符串的匹配字符 ' 丢失。通过将 Ro 之前的单引号 (') 更改为双引号 (") 来更正公式。再次单击“检查”。现在公式应没有错误。将该公式放置在 @Formula2 字段的右边。

调试公式372

7单击“标准”工具栏上的“打印预览”查看报表中的值,并比较各个

字段以检查 @Formula3 所返回的字段值是否正确。

您将看到以“Ro”开始的所有客户名称旁所列的为“TRUE”,而所有不以“Ro”开始的客户名称旁所列的为“FALSE”。

22.7.2.5 Formula4

1

2创建名为 Formula4 的新公式。将以下内容键入“公式编辑器”中的“公式文本”框内:

If ToText({customer.CUSTOMER ID}) [1] = "5"

"TRUE"

Else

"FALSE"

3

4

5

6

7单击“检查”以测试是否有错误。您将收到以下错误消息:单词“then”丢失。通过在第一行末尾“5”之后键入单词“Then”来更正公式。再次单击“检查”。现在公式应没有错误。将该公式放置在 @Formula3 字段右边。单击“标准”工具栏上的“打印预览”查看报表中的值,并比较各个

字段以检查 @Formula4 所返回的字段值是否正确。

您将看到以 5 开始的所有客户 ID 旁所列的为“TRUE”,而所有不以 5 开始的客户 ID 旁所列的为“FALSE”。

既然这些公式已无错误并且所返回的字段值正确,便可创建一个公式将各个单独的组件链接起来。首先链接前两个公式(@Formula1 和@Formula2),然后添加 @Formula3 和 @Formula4 以创建最终的公式@FinalFormula。

22.7.2.6 Formula1+2

1

2创建名为 Formula1+2 的新公式。将以下内容键入“公式编辑器”中的“公式”文本框内:

If {customer.CUSTOMER NAME} [1 to 2] = "Bi" and

ToText({customer.CUSTOMER ID}) [1] = "6" Then

"TRUE"

Else

"FALSE"

3

将该公式放置在 @Formula4 字段右边。

373Crystal Reports 用户指南

您将看到每个名称以 Bi 开始并且 ID 以 6 开始的客户旁所列的为“TRUE”,而所有不满足该条件的客户 ID 旁所列的为“FALSE”。

如果该公式工作正确,则可以通过从 @Formula3 和 @Formula4 添加代码创建最终的公式。

22.7.2.7 FinalFormula

1

2创建名为 FinalFormula 的新公式。在“公式编辑器”的“公式”文本框中键入以下内容:

If ({customer.CUSTOMER NAME} [1 to 2] = "Bi" and

ToText({customer.CUSTOMER ID}) [1] = "6") or

({customer.CUSTOMER NAME} [1 to 2] = "Ro" and

ToText({customer.CUSTOMER ID}) [1] = "5") Then

“首选客户”

Else

“不符合条件”;

3将该公式放置在报表“详细资料”节中所需位置。现在可以从报表中

删除所有其它公式字段。请参阅 第13 页上的 “删除公式”。

可以使用这种一个条件一个条件测试的相同过程,作为系统地检查公式的方法来测试任何公式。

第23章 参数字段和提示

23.1参数和提示概述

参数是您可以在 Crystal Reports 公式中使用的 Crystal Reports字段。作为公式的组成部分,参数必须具有值,然后程序才能处理报表。通过在公式、选定公式和报表本身中使用参数,您可以创建一个根据用户输入的值改变其行为的报表。参数字段也可用于子报表。

提示是帮助用户为报表参数设置值的元素。提示在以下几方面不同于参数:

?Crystal Reports 公式不会直接使用提示。

?提示包含用户界面设置,可帮助您确定用户看到的提示对话框的外观。?提示包含用户可以从中选择的可选值列表。此值列表可以是存储在每

个报表中的静态列表,也可以是通过数据库检索的动态列表(此类型的提示包含也通过数据库检索的多级级联列表)。

当用户在提示对话框中选择值时,他们为提示设置值。CrystalReports 提示引擎随后将该值分配给对应的参数,而报表最终将使用此参数。

当您创建和编辑参数字段时,您处理一个参数和一个或更多个提示。

23.1.1参数字段注意事项

?使用参数字段时,需要注意下列事项:参数字段支持下列数据类型:

?布尔值:要求回答是/否或真/假。

示例:在摘要中包括计划预算数吗?

?货币:要求一个美元金额。

示例:显示购买金额超过 XXXXX 的客户。

?日期:要求采用日期格式回答。

示例:输入季度的开始和结束日期。

?日期时间:要求日期和时间。

示例:显示 07/04/1999 1:00pm-2:00pm 之间的统计。

375Crystal Reports 用户指南

?

?

?数字:要求一个数值。示例:输入客户标识号。?字符串:要求回答文本。示例:输入地区。?时间:要求使用时间格式回答示例:显示 1:00pm-2:00pm 之间的呼叫总数。参数字段提示文本可长达四行,每行大约 60-70 个字符(取决于字符宽度,最多可以有 254 个字符)。文本长度超过一行将自动换行。可以创建用户可从中选择参数值的值列表,而不是让用户手动输入参数值。值列表可以是静态列表(嵌入到每个报表中)、动态列表(按需要通过数据库刷新)、计划列表(按照重复性计划通过数据库刷新),或者是部分计划列表(可以计划值列表的某些部分,而其他部分保持按需检索状态)。计划和部分计划的值列表通过业务视图管理器进行管理。有关更多信息,请参阅《业务视图管理员指南》。参数字段不必放入报表中即可在记录或组选定公式中使用。创建参数

字段,然后像插入其他字段那样将其输入到公式中。?

23.1.2提示考虑因素

?

?

?

?使用提示时,需要注意下列事项:提示可以是静态或动态的。动态提示还可以具有级联的值列表。有关各个选项的说明,请参阅以下主题:? 第8 页上的 “创建带有静态提示的参数”.? 第11 页上的 “创建带有动态提示的参数”.? 第13 页上的 “创建带级联值列表的参数”.动态提示包含可用于特定报表或许多报表的值列表。通过将值列表添加到 BusinessObjects Enterprise 储备库 可共享值列表。可以通过业务视图管理器将值列表计划为自动更新。有关计划值列表的更多信息,请参阅《业务视图管理员指南》。值列表可以形成一个级联提示;也就是说,您可以创建最终值是通过

一系列选项确定的提示。例如,在区域选项出现之前,可以先提示用户选择一个国家/地区。然后,在城市选项出现之前,用户可能需要选择一个地区,诸如此类。

23.2了解动态提示

Crystal Reports 中提供了动态提示和级联值列表。利用这些功能,您可以通过报表外的数据源填充与提示关联的值列表。(CrystalReports 中也提供了存储在报表中的静态值列表。)

水晶报表Crystal Reports培训教程 35_水晶报表教程

了解动态提示376

此动态功能可供所有 Crystal Reports 用户使用,而不管他们是否拥有附加的 BusinessObjects Enterprise 功能。当 Crystal 报表文件存储在 BusinessObjects Enterprise 中时,可使用其他动态提示功能。下表说明了在各个产品中可用的功能。

注意: 在此表中以及在本节的其余部分中,术语受控报表用于描述存储在 BusinessObjects Enterprise 环境中的报表,而不受控报表用于描述存储在此类环境外面的报表。

当 Crystal 报表存储在 当 Crystal 报表发布到 BusinessObjects BusinessObjects Enterprise 之外时是否可

Enterprise 时是否可用?用?是是

是是

功能

创建动态提示和级联值

列表。

在设计时在单个报表中重复使用值列表定义。

在设计时在多个报表中重复使用值列表定义。

计划值列表。

通过命令对象填充值列表。

否是

否是

通过报表字段填充是值列表。

通过业务视图填充否值列表。

是否

由受控报表使用的所有值列表均基于业务视图;但是,业务视图本身可以基于命令对象。因此,值列表可以间接基于命令对象。否是

377Crystal Reports 用户指南

功能

当 Crystal 报表存储在 当 Crystal 报表发布到 BusinessObjects BusinessObjects Enterprise 之外时是否可

Enterprise 时是否可用?用?

在报表运行时高速否

缓存值列表,并在多个执行的报表中共享该列表。

计划值列表以定期否对它们进行更新。

计划值列表的某些否部分以定期对它们进行更新,而其余部分按需要通过数据库检索它们的值。

是是

Crystal Reports 中的一些组件和 BusinessObjects Enterprise 产品支持带有动态提示和级联值列表的报表的执行:?除 Java Applet 查看器外的所有查看器。

注意:使用动态提示和级联值列表的报表在 Java Applet 查看器中运行;但是,它们将不会有应显示动态值列表的选取列表。以下为支持的查看器:?ActiveX

?.NET Winform?.NET Webform

?Java、COM 和 JSF DHTML 页面查看器?Java 和 COM 高级 DHTML 查看器

?InfoView 和 BusinessObjects Enterprise 中的中央管理控制台计

划界面。

?报表设计器组件 (RDC)。

?Crystal Reports 11 的所有版本。

???

这些组件支持设计带有动态提示和级联值列表的报表。

除 Standard Edition 外的所有 Crystal Reports 11 版本。集成的 Visual Studio .NET 设计器。业务视图管理器。

注意: 虽然动态功能在 Business Objects Web Intelligence 或完整客户端产品中不可用,但基于 Universe 的 Crystal 报表可以使用本节中说明的动态提示功能。

了解值列表378

23.3了解值列表

???

值列表对象描述如何从数据源中返回一组值:它们为提示对话框中的提示提供值。

它们可以是静态(值存储在报表中)或动态(值存储在报表之外的数据库中)对象。

它们用于单级动态提示和多级级联提示。例如,国家/地区的列表可以是动态提示,而国家或地区、地区及城市的分级列表可以是带有级联值列表的动态提示。对于值列表对象,Crystal Reports 支持三种数据源:报表字段(只用于不受控报表)。命令对象(只用于不受控报表)。业务视图(只用于受控报表)。

???

值列表可以有一个或更多个级别。如果值列表中有多个级别,则每个级别都包含下一个级别。 可以将值列表视为数据(指填充级联列表的所有级别所需的数据)的定义。在 Crystal Reports 中,级联关系由单个值列表对象定义,而不是由通过一个公共关键字链接在一起的多个查询定义的。虽然值列表被定义为单个实体,但不一定会在单个查询中从数据源提取数据。注意: 值列表对象不受报表记录选定或组选定公式的影响。这些公式影响报表数据,而不影响用于提示时值列表的数据。

23.3.1值列表类型

?

?

有两种不同的值列表对象类型:

存储在每个报表文件中的不受控值列表。

如果没有 BusinessObjects Enterprise,或者如果从不将报表发布到 BusinessObjects Enterprise,则使用不受控的值列表。不受控的值列表对象可以使用报表字段或命令对象作为数据源。存储在 BusinessObjects Enterprise 中的受控值列表。

存储在 BusinessObjects Enterprise 中的每个报表都使用受控的值列表对象。所有受控的值列表对象均基于业务视图,即使报表本身未

379Crystal Reports 用户指南

使用业务视图也是如此。受控的值列表对象拥有一些对于不受控值列表对象不可用的功能。

功能

按值列表级别进行的数据库查询。

不受控的值列表报表字段

当用户在提示对话框中选择值时,为每个级别查询数据库。

命令对象

受控的值列表业务视图

否是同时为列表的所有级当用户在提示对话别中的所有值查询数框中选择值时,为每个据库。级别查询数据库(如果

业务视图未基于命令对象)。

是是

可以使用任何可用 业务视图支持筛选器。SQL 表示的筛选器。是

如果命令对象包含参数,则会在查看报表时提示输入值。否

如果业务视图包含参数,则会在查看报表时提示输入值。是

由于受控的值列表基于业务视图,因此,它们继承了业务视图的查看时安全功能。是

计划功能来自于业务视图管理器,而不是在其中计划报表的中央管理控制台 (CMC)。是

在设计时,为值列表指定筛选器。

使用也在值列表定义中的报表字段内的所有值。

在查看报表时,否提示输入值列表所需的额外信息。

为不同的用户否显示不同的值。

计划值列表以按照重复性计划进行更新。

否否

部分计划值列表以按照重复性计划只更新列表的某些部分。

否否

了解值列表380

23.3.2确定要使用的值列表类型

不同的报表制作问题需要不同的提示解决方案,具体取决于值列表中的数据量。下表提供了应使用哪种值列表设计方案的简要指南。

说明

单级代码表。有数以百计的半静态值的表。)

不受控的值列表报表字段

命令对象

受控的值列表业务视图

非常合适。非常合适。不太合适。

由于无法筛选报表可以在命令对象中定您可以在源业务视图

(命令对象中定义筛选。字段,因此,必须义筛选。

在 Crystal Reports 为列表中的所有级别之外的数据库视图返回数据对于单级列

中进行任何您需要表并不是一个问题。

的列表筛选。

非常合适。非常合适。多级级联代码非常合适。

表。(在多个级如果数据筛选在 条件是列表中所有级基于业务视图的值别中有数以百Crystal Reports 之别的总数据量并非太

列表可以支持筛选和

计的半静态值外进行,则报表字大。如果数据太多,

逐个级别的数据检索。

的表。)段非常适合于多级则可能会遇到性能问

级联代码表,这是题,这是因为,基于因为它们一次检索命令对象的值列表在一个级别的数据。单次访问数据库的过

程中会为所有的级别检索数据。

非常合适。事实表。(这些非常合适。不太合适。

表往往是非常条件是在 Crystal 由于命令对象在单

部分计划的值列表

大的动态表,Reports 之外的数据次访问数据库的过

在这种情况下表现出

包含多个级别库视图中进行筛选,程中会检索它们的

色,在这种情况下,可

中的数以百万以及数据有一个多数据,因此,在您

以计划数据的半静态

计的值)。级的层次结构。依据非常大的表使部分,并按需要检索最

用这些对象时可能动态的部分。会遇到性能问题。

水晶报表Crystal Reports培训教程 35_水晶报表教程

381Crystal Reports 用户指南

23.3.3值列表和提示组的对比

值列表是提示的数据部分;它们是用户将看到并从中选择的数据值。另一方面,提示组是提示的表现部分。Crystal Reports 对作为单独对象的提示组进行处理,这样您就可以用不同的表现形式共享同一个值列表。例如,您可以有一个“发货城市”提示和一个“客户城市”提示。您可能会考虑到报表中有多个客户城市,但只有一个发货城市。您可以设计这一报表,使其使用一个城市值列表,但带有两个不同的提示组(或表现形式)。

有关使用提示组的更多信息,请参阅 第15 页上的 “在报表中共享公共值列表”。

23.4创建带有静态提示的参数

静态提示是一种始终包含相同的值的提示。例如,如果参数提示输入国家/地区值,则可以创建一个静态提示,因为国家/地区列表代表着一组不会经常更改的值。

使用以下步骤来创建带有静态提示的参数,以使用户看到可以从中选择特定国家/地区的客户列表。

该过程由两组步骤组成。第一步是创建参数,第二步是使用“选择专家”包含参数。

X创建带有静态提示的参数

1打开名为 Group.rpt 的示例报表。

示例报表位于 Crystal Reports 目录中的 \Samples\Chs\Reports之下。

在“视图”菜单上单击“字段资源管理器”。

提示:执行此任务的另一种方法是单击“标准”工具栏上的“字段资源管理器”按钮。

出现“字段资源管理器”对话框。

选择“参数字段”并单击“新建”。

将出现“创建新参数”对话框。

在“名称” 字段中输入参数的名称(最多 255 个字母数字字符)。本例使用“国家或地区”

。234

创建带有静态提示的参数382

5从列表中选择适当的“类型”。

本示例使用“字符串”。

注意:如果创建“类型”为“日期”或“日期时间”的参数,则可以更改日期格式以适合您的需要。有关详细信息,请参阅 第222 页上的 “更改默认字段格式”。

从“值字段”列表中选择“国家或地区”。

单击“操作”,然后选择“附加所有数据库值”,以便将示例数据库中的所有国家/地区移到“值”区域。

本例使用户能够从任何国家或地区中进行选择。如果您想限制选择范围,则仅手动输入希望用户从中选择的国家/地区。

在“选项”区域中,在“提示文本”字段中输入想要的提示文本(最多 255 个字母数字字符)。

这是在刷新报表后,出现在“输入提示值”对话框中的文本。本示例使用默认值。678

910单击

“确定”。返回到“字段资源管理器”对话框,将“国家或地区”参数拖到报表中。

注意:如果不希望看到拖放到报表中的参数字段,可以将其放在可取消的节中,如报表页眉或页脚。

383Crystal Reports 用户指南

X将参数包含在记录选定范围内

1在“报表”菜单上,单击“选择专家”。

提示:完成此项任务的另一种方法是单击“专家工具”工具栏上的“选择专家”按钮。

出现“选择字段”对话框。

在“客户”表中选择“国家或地区”,然后单击“确定”。

出现“选择专家”。

从下拉列表中选择“等于”。

从邻近的下拉列表中选择参数。

本例使用 {?Country}。234

5单击“确定”。

出现“输入提示值”对话框。

选择报表所基于的国家或地区。

本例使用“巴西”。6

7单击“确定”。

出现含有“巴西”的信息的报表。

通过使用参数字段,可创建单个报表并根据各种需要对其进行快速自

定义。

创建带有动态提示的参数384

23.5创建带有动态提示的参数

动态提示是一种在定期或不定期的计划上更改的提示。例如,如果您提示的是客户名称,则可以创建一个动态提示,因为客户数据库中的名称可能经常更改。利用动态提示,可以创建或指定值列表,而您可以通过业务视图管理器计划该列表,以便按照您喜欢的频率更新它。有关计划值列表的更多信息,请参阅《业务视图管理员指南》。

使用以下步骤来创建使用动态提示的参数。作为此过程的一部分,您将会创建一个值列表。

X创建带有动态提示的参数

1打开名为 Group.rpt 的示例报表。

示例报表位于 Crystal Reports 目录中的 \Samples\Chs\Reports之下。

在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”对话框。

选择“参数字段”并单击“新建”。

将出现“创建新参数”对话框。

在“名称” 字段中输入参数的名称(最多 255 个字母数字字符)。本例使用“地区”。

在“值列表”区域中,单击“动态”。

确保在“选择数据源”区域中选择了“新建”。

注意:如果报表已包含值列表,或者如果您想从储备库中选取一个值列表,则可以选择“现有”,然后从树结构中选择一个现有的值列表。单击“插入”,然后从“值”列表中选择“地区”。

在“选项”区域中,在“提示文本”字段中输入想要的提示文本(最多 255 个字母数字字符)

。2345678

385Crystal Reports 用户指南

这是在刷新报表后,出现在“输入提示值”对话框中的文本。本示例使用“选择地区”。

9

10单击“确定”。返回到“字段资源管理器”对话框,将“地区”参数拖到报表中。

注意:如果不希望看到拖放到报表中的参数字段,可以将其放在可取消的节中,如报表页眉或页脚。

在 Crystal Reports 中查看动态提示时,它看起来与静态提示并无太大差别。但是,在后台中,Crystal Reports 存储有关您为此提示创建的值列表的信息。将报表发布到 BusinessObjects Enterprise 后,值列表变为一个独立实体,您可以在业务视图管理器中计划它,以确保按照您选择的计划对值进行更新。例如,如果您得知销售队伍正快速拓展公司产品销往的地区,则可以将地区值列表计划为在每晚更新。您无需手动更新列表(在使用静态提示时必须手动更新列表),运行包含地区值

列表的用户就将看到新的值。

水晶报表Crystal Reports培训教程 35_水晶报表教程

创建带级联值列表的参数386

23.6创建带级联值列表的参数

动态提示可以包含级联值列表,这为用户另外增加了选择的级别。例如,如果您提示的是城市值,但还需要知道该城市来自于哪个国家或地区,则可以创建一个动态且级联的提示。在这种情况下,您先提示选择国家/地区,而在选择了该值后,程序会通过只显示适合于该选定国家的地区来提示选择地区。最后,在选择了地区值后,程序会通过只显示适合于该选定地区的城市来提示选择城市。通过这种方式,您可以确保用户选择了正确的城市(例如,温哥华 - 华盛顿州 - 美国,而不是温哥华 -不列颠哥伦比亚省 - 加拿大)。

如同只有一个值的动态提示一样,可以创建或指定级联值列表,而您可以通过业务视图管理器计划该列表,以便按照您喜欢的频率更新它。有关计划值列表的更多信息,请参阅《业务视图管理员指南》。

使用以下步骤来创建使用动态提示和级联值列表的参数。

X创建带级联值列表的参数

1打开名为 Group.rpt 的示例报表。

示例报表位于 Crystal Reports 目录中的 \Samples\Chs\Reports之下。

在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”对话框。

选择“参数字段”并单击“新建”。

将出现“创建新参数”对话框。

在“名称” 字段中输入参数的名称(最多 255 个字母数字字符)。本示例使用“供应商城市”。

在“值列表”区域中,单击“动态”。

在“提示组文本”字段中输入提示组的提示文本。

本示例使用“请选择您的供应商所在的城市”。

注意:提示组可让您使用级联值列表进行其他的级联提示。例如,如果您建立了这样一个值列表,用于提示地址,则您可能想使用此列表提示发货和开票地址。在这种情况下,您可以为同一个值列表创建两个提示组;可以将其中一个提示组称为“发货地址”,而将另一个称为“开票地址”。

确保在“选择数据源”区域中选择了“新建”。

注意:如果报表已包含值列表,或者如果您想从储备库中选取一个值列表,则可以选择“现有”,

然后从树结构中选择一个现有的值列表。234567

387Crystal Reports 用户指南

8单击“插入”。

程序会自动展开“值”列表。使用此区域来定义组成级联值列表的字段。本示例使用“国家或地区-地区-城市”这一级联。

从“值”列表中选择“国家或地区”。

单击“国家或地区”下的空白字段,然后选择“地区”。

单击“地区”下的空白字段,然后选择“城市”。

在“参数绑定”区域中,单击“国家或地区”和“地区”以清除绑定(只应绑定与“城市”值关联的字段)。

在这一步中,您选择的是级联层次结构中应绑定到所创建的参数字段的字段。由于这一特定参数旨在为 Crystal Reports 提供城市值,因此,您将此参数绑定到“城市”。

在“提示文本”字段中(位于“选项”区域内),为级联值列表中的每个字段输入其他提示文本。

这是在刷新报表后,出现在“输入提示值”对话框中的文本。910111213

1415单击

“确定”。返回到“字段资源管理器”对话框,将“供应商城市”参数拖到报表中。

注意:如果不希望看到拖放到报表中的参数字段,可以将其放在可取消的节中,如报表页眉或页脚。

使用值列表388

23.7使用值列表

动态提示使用值列表。可以在 Crystal Reports 或业务视图管理器中创建值列表。当您打开包含动态提示的报表时,Crystal Reports 会刷新值列表中的数据;但是,您也可以通过在业务视图管理器中计划值列表来刷新其数据。有关更多信息,请参阅《业务视图管理员指南》。?

?

?

?可以使用几种方法将值列表添加到 BusinessObjects Enterprise:可以在设计报表时创建值列表,然后可以将报表保存到一个Enterprise 文件夹中。有关更多信息,请参阅 第337 页上的 “将报表保存至 Enterprise 文件夹”。可以在业务视图管理器中创建值列表。有关更多信息,请参阅《业务视图管理员指南》。可以在设计报表时创建值列表,然后可以通过中央管理控制台 (CMC)或发布向导将其添加到 BusinessObjects Enterprise。有关更多信息,请参阅《BusinessObjects Enterprise 管理员指南》。可以通过使用导入向导将值列表从一个环境迁移到另一个环境。有关

更多信息,请参阅《BusinessObjects Enterprise 管理员指南》。

23.7.1在报表中共享公共值列表

可以在一个报表中将单个值列表对象用于许多个不相关的提示。例如,在显示供应商发给客户的货物的报表中,货物可以从一个城市中的供应商发给另一个城市中的客户。您将希望报表提示用户选择供应商城市和客户城市;这两者都具有相同的值集。由于在数据库中有成千上万个城市,因此,您可以将这个很长的值列表分解为国家或地区、地区以及城市。这样一来,用户可以通过从三个较短的列表中进行选择来浏览几百个值。

X在报表中共享公共值列表

1

2创建一个报表,以包含“国家或地区”、“地区”和“城市”的字段。在字段资源管理器中,选择“参数字段”,然后单击“新建”。

将出现“创建新参数”对话框。

在“名称”字段中输入参数的名称。

本示例使用“供应商城市”。

在“值列表”区域中,单击“动态”。

在“提示组文本”字段中输入提示组的提示文本。

本示例使用“请选择您的供应商所在的城市”。

单击“插入”,然后从“值”列表中选择“国家或地区”

。3456

389Crystal Reports 用户指南

7

8

9

10

11单击“国家或地区”下的空白字段,选择“地区”,然后单击“地区”下的空白字段,选择“城市”。在“参数绑定”区域中,确保只绑定了“城市”值。单击“确定”。返回到“字段资源管理器”对话框,选择“参数字段”,然后单击“新建”。在“名称”字段中输入第二个参数的名称。

本示例使用“客户城市”。

在“值列表”区域中,单击“动态”。

在“提示组文本”字段中输入新提示组的提示文本。

本示例使用“请选择您的客户所在的城市”。

选择“现有”,然后选择您在步骤 6 至 9 中创建的值列表。

单击“确定”。12131415

您已创建了两个提示:一个用于 {?供应商城市} 参数的“国家或地区-地区-城市”层次结构,以及另一个用于 {?客户城市} 参数的“国家或地区-地区-城市”层次结构。通过重复使用值列表对象,您节省了时间并缩短了 Crystal Reports 中的执行时间。

注意: 如果有另一个应拥有国家或地区值的参数字段,则也可以使用现有的值列表。例如,如果您添加了一个 {?DivisionCountry} 参数,以指明您想报告的分公司,则可以在报表中使用同一个值列表对象。将此参数绑定到层次结构中的顶层值,也即“国家或地区-地区-城市”层次结构的“国家或地区”级别。

23.7.2使用不同的值字段和说明字段

在关系数据库中,通常会使用代表值的代码字段。这些代码通常是用户无法阅读的数字字符串或文本字符串。在此类情况下,可以在值列表定义中创建不同的值和说明字段。将值字段设置为参数;说明字段将显示在提示对话框中。说明字段如何在提示对话框中显示由提示选项“仅以说明提示”控制。当此选项设置为 True 时,用户只能看到说明;当设置为 False 时,用户可以看到值和说明。

X设置不同的值字段和说明字段

1打开名为 Group.rpt 的示例报表。

示例报表位于 Crystal Reports 目录中的 \Samples\Chs\Reports之下。

使用值列表390

2在字段资源管理器中,选择“参数字段”,然后单击“新建”。

将出现“创建新参数”对话框。

在“名称”字段中输入参数的名称。

本示例使用“客户名称”。

在“值列表”区域中,单击“动态”。

单击“插入”,然后在“值”字段中选择“客户 ID”。

在“说明”字段中,选择“客户名称”。

在“选项”区域中,将“仅以说明提示”选项设为“True”。单击“确定”。345678

当用户在提示对话框中看到此提示时,他们不会看到“客户 ID”字段(参数所基于的字段)中的值,而是看到客户名称的列表。

23.7.3将命令对象用作值列表的数据源

Crystal Reports 支持将命令对象用作不受控的值列表的数据源。要使用此功能,首先要使用“数据库专家”创建一个命令对象,以返回您想在值列表对象中包含的值。有关更多信息,请参阅本联机帮助中的“定义SQL 命令”。

您创建的查询应为新的值列表对象中的每个级别返回至少一个数据库字段。例如,如果您想构建一个“国家或地区-地区-城市”值列表对象,则查询应从数据库中返回至少三列:国家或地区、地区、城市。必须在一个 SELECT 语句中返回所有三个值。无需使用 ORDER BY 子句,因为提示引擎会按照您的说明对值进行排序。

注意: 无需将命令对象链接到报表字段。通常,无需将您只用于填充值列表的命令对象链接到报表。但是,如果想在报表中使用此命令对象的某列,则需要将此命令对象链接到报表。

对于在报表中定义的所有命令对象,它们均显示在“创建新参数”对话框中的值字段下拉列表以及说明字段下拉列表中。然后,您可以将值列表与命令对象关联。

23.7.4空值处理

值列表返回的数据中的空值在该提示的下拉列表中显示为“空”。用户可以选择这些值,而与该提示关联的任何参数均将收到空值。可以在Crystal Reports 公式语言中使用 IsNull 函数对此功能进行测试。有关更多信息,请参阅本联机帮助中的“IsNull (fld)”

水晶报表Crystal Reports培训教程 35_水晶报表教程

391Crystal Reports 用户指南

23.8有关提示的最佳做法

23.8.1不受控报表

不受控报表是指您存储在 BusinessObjects Enterprise 之外的报表。这些报表可以使用您在报表中定义的值列表,或使用您已存储在BusinessObjects Enterprise 储备库中的值列表。(当您使用“创建新参数”对话框时,在 Crystal Reports 中创建报表值列表。您在业务视图管理器中创建储备库值列表。)

?

?

?在报表中定义的值列表具有以下特性:它们可以基于命令对象或报表字段。它们始终存储在 .rpt 文件中。无法在报表之间共享它们。

如果不受控报表还使用基于储备库的值列表,则每次打开报表时,它都将提示您登录到储备库。必须执行此过程,以便 Crystal Reports 能找到值列表对象。

为了最大程度地发挥不受控报表的性能和可伸缩性,您应在单个报表中尽可能重复使用值列表对象。有关如何做到这一点的信息,请参阅第15 页上的 “在报表中共享公共值列表”。

23.8.2受控报表

受控报表是指您存储在 BusinessObjects Enterprise 中的报表。?

?

?受控报表中使用的值列表具有以下特性:它们始终存储在储备库中。可以在报表之间共享它们。它们基于业务视图。

为了最大程度地发挥受控提示的性能和可管理性,建议采用以下做法:在业务视图管理器而不是 Crystal Reports 中定义值列表对象。构建独立的业务视图,以便为所有报表提供值列表。在此业务视图中所需的字段就是那些您用于提示的字段。有关如何创建业务视图的信息,请参阅《业务视图管理员指南》。

为您想在报表中使用的每个动态提示创建受控值列表对象。当Crystal Reports 用户设计参数和提示时,他们可以看到这些对象。如果需要值列表来表示“国家或地区 > 地区 > 城市”层次结构,并需要一个“国家或地区”选取列表,则可以使用一个值列表对象来满足这两个需求。???

有关提示的最佳做法392

?

?

?

?在业务视图管理器中定义值列表对象有以下好处:您可以控制用于定义提示值列表的元数据。可以向用于提示的业务视图应用行级安全性(如果需要)。可以将元数据设计与报表设计分开。元数据设计者可以负责创制值列表的定义,而报表设计者可以负责创制报表。此方法将为了支持提示而需创建的元数据对象的数量减到最小。

23.8.3将不受控报表转换为受控报表

?

?

?

?可以使用以下方法将不受控报表转换为受控报表:使用发布向导发布一个或更多个报表。使用 Crystal Reports 的“另存为”命令将报表保存到BusinessObjects Enterprise。从 InfoView 门户中创建一个新的报表对象。从中央管理控制台门户中创建一个新的报表对象。

在以上所有情况中,会在不受控报表中的提示对象上执行以下操作:在报表中定义的值列表对象被转换为储备库值列表。会创建业务视图、业务元素、数据基础和数据连接对象。

如果储备库中已存在相同的值列表对象,则不会创建重复的对象。相反,报表会引用现有的值列表对象。

基于储备库的值列表对象将保持不变。

在报表中定义的提示组被转换为储备库提示组。

基于储备库的提示组将保持不变。

会在名为“动态级联提示”的储备库文件夹中创建所有基于储备库的新业务视图对象、值列表对象和提示组对象。??????

23.8.4部署带有动态提示的受控报表

基于储备库的值列表和提示组是与任何其他储备库对象类似的储备库对象。当使用导入向导将受控报表从一个储备库迁移到另一个储备库时,也会导入值列表和提示组对象。此功能使用户能轻松在系统之间迁移报表。BusinessObjects Enterprise 会跟踪报表所依赖的对象,并根据需要将这些对象导入到目标系统中。

业务视图管理器已经加以改进,可支持导入和导出值列表及提示组。有关更多信息,请参阅《业务视图管理员指南》。

393Crystal Reports 用户指南

23.9删除参数字段

删除报表中的参数有几种方法。要删除的参数类型决定可使用的方法。X删除不在公式中使用的参数

1在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”。

展开“参数字段”文件夹并单击要删除的参数。

单击“删除”。

如果在报表中使用了此参数,则会出现一个 Crystal Reports 对话框,以确认您是否想删除此参数。

单击 “是” 。

此参数被从“参数字段”文件夹和报表中删除。234

X删除用于选择专家的参数

1在“报表”菜单上单击“选择专家”。

提示:完成此项任务的另一种方法是单击“专家工具”工具栏上的“选择专家”按钮。

出现“选择专家”对话框。

选择其选择条件使用要删除的参数的选项卡。

单击“删除”。

单击“确定”关闭“选择专家”。

在“视图”菜单上单击“字段资源管理器”。

展开“参数字段”文件夹并单击要删除的参数。

单击“删除”。234567

X删除在公式中使用的参数

1在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”。

在“公式字段”文件夹中,选择包含要删除的参数的公式。单击“编辑”,从该公式中删除此参数字段。

注意:如果该参数用于多个公式中,则必须从每个公式中删除它。关闭公式工作室。

展开“参数字段”文件夹并单击要删除的参数。

单击“删除”

。23456

响应参数字段提示394

23.10响应参数字段提示

23.10.1第一次预览报表

?

?在第一次预览报表时,出现“输入提示值”对话框,提示您输入值。如果在创建参数字段时指定了默认值,除非指定新默认值,否则程序将使用该值。如果没有指定默认值,则程序将在提供新值后才刷新数据。

注意: 如果参数是字符串值类型、没有默认值且“允许离散值”字段为 True,则出现空字符串。

23.10.2刷新报表数据

当从“预览”选项卡刷新数据时,将出现“刷新报表数据”对话框。选择“使用当前参数值”选项以使用当前参数值。

选择“提示新参数值”选项以输入新参数值。当选择该选项并单击“确定”后,将出现“输入提示值”对话框。

?完全按字符串值将出现在字段中的样子输入。如果参数字段允许多个值,可使用“添加”按钮输入附加参数值。

?使用此格式输入布尔值:TRUE 或 FALSE。

?完全按数值将出现在字段中的样子输入。

?完全按货币值将出现在字段中的样子输入。

?输入与屏幕上所用格式匹配的“日期”值。如果未指定格式,则输入:日期 (年, 月, 日)。例如,日期 (1997, 5, 21)。若要访问日历,请

单击日期旁边的下拉箭头。

?输入与屏幕上所用格式匹配的“时间”值。如果未指定格式,则输入:时间 (小时, 分钟, 秒 AM/PM)。例如,时间 (4:32:12 PM)。也可选

择时间单位,然后使用向上和向下箭头在数字间滚动。

?使用此格式输入“日期时间”值:日期 (年, 月, 日),时间 (小时, 分钟, 秒 AM/PM)。例如,日期 (1997, 5, 21),时间 (4:32:12

PM)。也可通过使用相关联的下拉箭头访问日历,并用向上或向下箭头在时间值间滚动来输入“日期时间”值。

注意:仅当使用 comctl32.dll 的适当版本(4.70 或更高版本)时,

用于访问日历中日期的下拉箭头和用于滚动时间的上下箭头才可用。

395Crystal Reports 用户指南

要使用当前显示的值,请单击“确定”;或者,要使用与显示的值不同的值,请在文本框中键入新值,然后单击“确定”。

?如果参数字段有范围限制,则只能输入特定范围内的值。当创建或编

辑参数时,在“设置默认值”对话框中指定范围限制。

?如果参数是字符串值类型,可使用长度限制选项或使用编辑掩码限制

格式来限制用户能够输入的值。

程序现在使用指定的新值运行报表。

23.11高级参数功能

?

?

?

?

?

?

?在报表内使用参数的方法有很多种。本节介绍一些使用参数的高级方法: 第22 页上的 “创建具有多个提示值的参数”. 第23 页上的 “使用参数字段应用条件格式设置”. 第23 页上的 “使用参数字段创建报表标题”. 第24 页上的 “指定单个值或范围值”. 第25 页上的 “将参数包含在公式中”. 第26 页上的 “使用参数字段定义排序顺序”. 第27 页上的 “使用编辑掩码定义输入类型和格式”.

23.11.1创建具有多个提示值的参数

1

2

3

4

5

6在“视图”菜单上单击“字段资源管理器”。选择“参数字段”并单击“新建”。输入参数的名称。从“类型”列表中选择值类型。从“值字段”列表中,选择您想用于获取提示值的表和字段。单击“选项”,然后选择“附加所有数据库值”,以添加所选的字段

中的值。

也可以导入值,或者可以在“选项”按钮下的“值”区域中创建自己的值。

在“选项”区域中,选择“允许多个值”选项,然后将其值设为“True”,以使用户能够为此参数输入多于一个的提示值。允许单独使用或组合使用离散类型的值和范围类型的值。

注意:有关单个值或范围值的详细信息,请参阅 第24 页上的 “指定单个值或范围值”。

单击“确定”

。78

水晶报表Crystal Reports培训教程 35_水晶报表教程

高级参数功能396

23.11.2使用参数字段应用条件格式设置

参数字段可用于创建条件格式设置公式。每当刷新报表数据时,都可以自定义这些公式。条件格式设置公式可用于对满足特定条件的数据做颜色标记。例如:

?销售额超过 10% 限额的销售代表。

?在上一季度没有定货的客户。

?上个月没有任何周转的存货。

如果标记这些项所基于的条件永不更改,则不需使用参数字段。可只使用公式(对于文本标记)或条件格式设置(对于边框标记)。但是,若要更改报表间的条件,则需要在公式和条件格式设置公式中使用参数字段。X使用参数字段应用条件格式设置

1

2创建公式所需数据类型的参数字段。创建公式并使用参数字段代替通常使用的固定值。

例如,若要让程序提示去年购买金额超过特定值的所有客户并将他们的姓名打印成红色,请选择“去年销售额”字段并单击“专家工具”工具栏上的“格式”。

出现“格式编辑器”。

单击“字体”选项卡上“颜色”属性旁边的“条件公式”按钮,并使用条件格式设置公式将字段进行格式设置,如下所示:

If {客户.去年销售额} > {?SalesTarget} Then

Red

Else

Black3

现在,当刷新数据时,程序将提示您输入触发颜色标记的值(称为阈值),然后运行报表并标记所有去年销售额在阈值数字之上的客户。可在每次运行报表时更改该数字,程序将标记不同的“客户名称”组。

有关更多信息,请参阅本联机帮助的“条件格式设置函数”。

23.11.3使用参数字段创建报表标题

Crystal Reports使您得以使用参数字段创建在每次刷新报表时都可更改的报表标题。

X使用参数字段创建报表标题

1

2在“视图”菜单上单击“字段资源管理器”。出现“字段资源管理器”。选择“参数字段”并单击“新建”。

将出现

“创建新参数”对话框。

397Crystal Reports 用户指南

3

4

5在“名称”字段中键入参数字段的名称。从“类型”列表中选择“字符串”。要指定默认标题,请单击“值”区域中的“单击此处添加项目”,然

后键入所要的文本。

根据需要继续添加标题。

单击“确定”。

返回到字段资源管理器,然后将参数字段放在报表的“页眉”节中,以使标题在每页中都出现;或者如果想让标题只在报表的第一页出现,则将其放在“报表标题”节中。67

现在,当刷新数据时,程序将提示您输入报表标题。如果需要,可在每次运行报表时更改标题。

23.11.4指定单个值或范围值

既可以创建要求用户输入单个(离散)值的参数,也可以创建要求用户输入范围值的参数。如果随后将这些参数包括在报表的记录选定区域中,则可帮助用户找到特定信息。例如,在记录选定参数使用离散值的情况下,用户可以输入单个的国家/地区名称,以便只查看该国家/地区的销售额。在记录选定参数使用范围值的情况下,用户可以输入国家/地区的范围(例如,Canada 和 France),以查看在此范围中的所有国家/地区(在此条件下包括 Chili、China、Denmark、England 等等)的销售额。X指定单个值或范围值

1选择“允许离散值”选项,或选择“允许区域值”选项,以指定参数

字段是否将接受区域值。

?如果选择“允许离散值”,则参数字段将接受单个值(而不是区

域值)。

?如果选择“允许区域值”,则当提示您输入参数值时,可以输入

起始值和结束值。例如,如果输入值“5”和“10”,则范围为 5-10,将此参数用于记录选定区域的报表会显示介于值 5 和 10 之间的所有记录。这也适用于字符串参数字段。对于起始值“A”和结束值“E”,将此参数用于记录选定区域的报表会显示字母范围A-E 内的所有记录。

注意:如果选中“允许多个值”和“允许离散值”选项,则该参数字段将接受多个单个值。在这种情况下,可输入多个值,但是这些值将被分别求值并且不会被解释为范围。如果选中的是“允许多个值”和“允许区域值”选项,则参数字段将接受多个范围。

高级参数功能398

2如果适用,则选择“最小长度”和/或“最大长度”选项,以指定字

段的长度。

?对于“货币”或“数字”参数字段,出现用于输入“最小值”和“最大值”的选项。

?对于“日期”、“日期时间”或“时间”参数字段,将出现用于

输入“开始”和“结束”值的选项。

23.11.5将参数包含在公式中

1在“视图”菜单上单击“字段资源管理器”。

出现“字段资源管理器”。

选择“参数字段”并单击“新建”。

将出现“创建新参数”对话框。

创建参数字段并保存它。

选择“公式字段”,并单击“新建”。

出现“公式名称”对话框。

输入公式的名称,然后单击“确定”。

像使用常量值那样使用参数字段创建公式。例如,与其创建国家或地区名称硬编码的公式:

{客户.国家或地区} = "USA"23456

使用参数字段代替“USA”。

{客户.国家或地区} = {?Country}

为此,请双击数据库字段,按 = 键,然后双击参数。

提示:通过查找 (?) 可以很容易识别参数字段。

7单击公式工作室上的“关闭”。

出现“字段资源管理器”对话框。刚才创建的公式名称突出显示在“公式”列表框中。

将该公式拖放到报表中。

单击“刷新”生成报表。

出现对话框,提示您输入值。89

399Crystal Reports 用户指南

23.11.6使用参数字段定义排序顺序

若要使用参数字段设置排序顺序,首先需要创建包含参数字段的公式,然后基于该公式进行排序。例如,假设您有一个基于“客户”表的客户列表报表。对于每个客户,显示“客户名称”、“城市”、“地区”、“国家或地区”和“电话”。您想根据当时的需要,能够按“国家或地区”、按“地区”或按“城市”排序。

1

2创建参数字段并称之为“排序字段”。从“类型”列表中选择“字符串”。

您或许想将用户可键入的字符数限制为 1 个。

为此,在“最小长度”和“最大长度”文本框中键入数字 1,然后单击“确定”。

现在,参数字段将只接受单个字符值。该字段将接受“C”作为值,而不接受“City”。

在“提示文本”字段中输入类似下面的提示:

键入 R 按“地区”排序,或键入 C 按“城市”排序;否则,数据将按“国家或地

区”排序。34

5创建类似于下面这样的公式并称之为“排序”:

If {?SortField} = "C" Then {客户.城市}

Else

If {?SortField} = "R" Then {客户.地区}

Else

{客户.国家或地区}

该公式提示您输入参数字段 {?SortField} 的值。如果输入“C”,则该公式将按“城市”字段排序。如果输入“R”,则按“地区”字段排序。如果输入别的内容,或根本不输入任何内容,该公式将按“国家或地区”字段排序。

有关更多信息,请参阅本联机帮助中的“If 语句”。

6

7

8

9将公式放置在报表的“报表页眉”节中,然后选择“节专家”中的“取消(无深化)”,以便不输出该公式。单击“对记录排序”。选择公式,然后单击“添加”。单击“确定”。

现在,当运行报表时,程序将提示您输入排序字段,公式将根据选定

内容返回值,而排序工具将使用该值作为排序字段。

高级参数功能400

23.11.7使用编辑掩码定义输入类型和格式

1

2

3

4在“视图”菜单上单击“字段资源管理器”。选择“参数字段”并单击“新建”。将出现“创建新参数”对话框。输入名称和值类型。对于字符串参数字段,可选择在“编辑掩码”字段中输入一个编辑掩

码,而不是指定范围。

编辑掩码可以是任何一组屏蔽字符,用于限制可作为参数值输入的值(编辑掩码还限制可作为默认提示值输入的值)。

可输入下列任意屏蔽字符,或这些字符的任意组合:

?“A”(允许字母数字字符并要求在参数值中输入字符)。?“a”(允许字母数字字符,不要求在参数值中输入字符)。?“0”(允许数字 [0 到 9] 并要求在参数值中输入字符)。?“9”(允许数字或空格,不要求在参数值中输入字符)。?“#”(允许数字、空格或加/减号,不要求在参数值中输入字符)。?“L”(允许字母 [A 到 Z] 并要求在参数值中输入字符)。?“?”(允许字母,不要求在参数值中输入字符)。

?“&”(允许任何字符或空格并要求在参数值中输入字符)。?“C”(允许任何字符或空格,不要求在参数值中输入字符)。?“. , : ; - /”(分隔字符)。在编辑掩码中插入分隔字符有点像对参数字段进行硬编码格式设置。将字段放到报表上后,

分隔字符将出现在字段对象框架中,就像这样:LLLL/0000。本例描述要求 4 个字母后跟 4 个数字的编辑掩码。

?“<”(使随后的字符转换为小写字符)。

?“>”(使随后的字符转换为大写字符)。

?“\”(使随后的字符显示为字面值)。例如,编辑掩码“\A”将显示参数值“A”。如果编辑掩码为“00\A00”,则有效的参数值

将依次包含两个数字、字母“A”以及另外两个数字。

?“密码”。允许将编辑掩码设置成“密码”,可创建条件公式指定报表的某些部分只有在输入特定的用户密码后才可见。

注意:一些编辑掩码字符要求在它们的位置输入字符(当输入参数值时),而另一些允许在需要时保留空格。例如,如果编辑掩码是000099,由于编辑掩码字符“9”不要求输入字符,因此可输入 4 个数字、5 个数字或 6 个数字的参数值。但是,由于“0”要求输入字符,因此输入的参数值不能少于 4 个数字。

单击“确定”。

返回到字段资源管理器,然后将参数拖到报表中。56

水晶报表Crystal Reports培训教程 35_水晶报表教程

第24章 子报表

24.1什么是子报表?

子报表是报表中的报表。创建子报表的过程与创建常规报表的过程相似。子报表有报表的大多数特性,包括它自己的记录选择条件。子报表与主报表之间的唯一区别是子报表:

?是作为对象插入到主报表中;它不能独立存在(但可以将子报表另存为主报表)。

?可以放置在报表的任意一节内,整个子报表将在该节中打印。?不能包含另一个子报表。

?不要包含页眉或页脚节。

?

?

?

?有四种情况通常要使用子报表:将不相关的报表组合到单个报表中。请参阅 第7 页上的 “通过使用子报表组合不相关的报表”。协调本无法链接的数据。请参阅 第8 页上的 “对无法链接的数据使用子报表”。在单个报表中显示相同数据的不同视图。请参阅 第11 页上的 “在单个报表中显示相同数据的不同视图”。从在查阅字段上没有索引的字段中执行一对多查阅。有关更多信息,请参阅联机帮助中的“一对多链接”。

注意: 使用按需要显示子报表而不使用常规的现场子报表可以提高包含子报表的报表的性能。

24.1.1未链接的子报表与链接的子报表

24.1.1.1 未链接的

未链接的子报表是独立的;它们的数据不以任何方式与主报表的数据相协调。

在未链接的子报表中,不试图将一个报表中的记录与另一个报表中的记录进行匹配。未链接的子报表不必使用与主报表相同的数据;它可以使用相同的数据源,也可以使用完全不同的数据源。此外,子报表并不仅限于在单个表上建立报表。未链接的子报表可以基于单个表也可以基于多个表。无论基础数据源是什么,报表都被视为不相关。

402Crystal Reports 用户指南

24.1.1.2 链接的

链接子报表与未链接子报表正好相反;其数据是相协调的。程序将子报表中的记录与主报表的记录进行匹配。如果用客户信息创建主报表,用订单信息创建子报表并链接它们,则程序将为每个客户都创建一个子报表,并在子报表中包括该客户的所有订单。

24.1.2子报表链接如何工作

将子报表链接到主报表时,程序通过使用参数字段创建链接。

?

?

?选定子报表链接字段后,程序创建:子报表中的参数字段,该字段随后用于检索主报表传递给它的值。使用参数字段的子报表的记录选定公式。选定公式将子报表限制在链接字段值与参数字段值相等的记录上。

当报表运行时,程序查找它所需的第一个主字段记录,然后将链接字段中的值传递到子报表中的参数字段。然后,程序用基于参数字段值选定的记录来创建子报表。下面是一个示例:

?创建显示客户数据的报表和显示订单数据的子报表,然后使用“客户

ID”字段链接两个报表。

?当运行该报表时,程序查找它所需的第一个客户记录,然后将该记录

中的“客户 ID”值传递到子报表参数字段。

?程序运行“订单”子报表。因为子报表选定公式只选择那些“客户

ID”值等于参数字段值的记录,且因为参数字段值等于主报表第一个记录中的“客户 ID”,所以子报表只包含那些具有相同“客户 ID”的记录。也就是第一个客户的订单的记录。

?完成子报表后,程序在主报表中定位它所需的第二个记录,打印客户

数据,然后将该客户 ID 传递到参数字段。

?然后程序运行只包括第二个客户订单记录的子报表。

?此过程一直持续到报表完成。

?该参数字段的所有操作都在后台发生。您只需选择用来链接主报表和

子报表的字段,程序将完成其余的所有工作。这些值将在参数字段不提示您输入值的情况下传递。

注意: 如果已链接了子报表并(从“子报表设计”选项卡中)单击“标准”工具栏上的“打印预览”按钮,程序将独自运行子报表,而不等待从主报表中接收参数字段值,也不对选项卡文本公式求值。在这种情况下,程序显示

“输入参数值”对话框并提示您输入值。

插入子报表403

在该框中输入的值就是程序用于运行子报表的值。

24.1.3数据库链接与一对多情况下的子报表

当同一报表中的两个表有一对多关系时,程序检索数据的不同方式取决于:

?数据源。

?索引情况。

?记录选定条件。

?是创建基于链接表的单个报表还是使用包含子报表的主报表。

当考虑是使用子报表还是链接的表时,需要了解每种情况的结果。在第418 页上的 “一对多链接中的性能考虑”中充分讨论了这些问题。

按照常规,如果有索引表、链接的索引字段,或基于索引字段限制记录选定条件的范围,那么无论您是在单个报表中链接表还是使用子报表,程序都需要读取相同数量的记录。因为每个子报表都是作为单独的报表运行,链接的表可能有性能优势。请参阅 第415 页上的 “索引表”。

24.2插入子报表

1在“插入”菜单上,单击“子报表”。

提示:完成此项任务的另一方法是单击“插入工具”工具栏上的“插入子报表”按钮。

出现“插入子报表”对话框。

若要选择现有子报表,请单击“选择现有报表”,然后键入名称。如果不知道报表名称,单击“浏览”

按钮并在出现的对话框中定位该报表。2

404Crystal Reports 用户指南

若要创建新的子报表,请单击“使用“报表向导”创建子报表”,键入名称,然后单击“报表向导”按钮。有关使用向导创建报表的信息,请参阅 第81 页上的 “创建新报表”。

3

4选择“按需要显示子报表(与超级链接类似)”以便能够在需要时检索子报表上的数据。否则,所有子报表数据将与报表一起出现。单击“确定”。

程序显示出一个对象框架。

将该框架移到希望其在报表中出现的位置,然后单击一下将它放置。程序创建“子报表设计”选项卡,该选项卡标记有子报表的名称。若要编辑报表,请单击该设计选项卡并进行修改。5

6

7单击“预览”选项卡查看报表。如果选择了“按需要显示子报表(与超级链接类似)”选项,请单击

“子报表预览”选项卡查看子报表。

该选项卡标有子报表名。

注意: 使用按需要显示子报表将提高包含子报表的报表的性能。 有关创建“子报表预览选项卡”自定义标题的信息,请参阅 第10 页上的 “向按需要显示子报表中添加标题”。

24.2.1预览子报表

有时可能希望单独预览子报表,而不是作为主报表的一部分来预览它。例如,可能希望预览子报表以查看并分析一组特定参数值的数据。X预览子报表

1单击子报表的“设计”选项卡。

该选项卡标有子报表名。

在“标准”工具栏上单击“打印预览”。

程序显示选定子报表的预览。2

插入子报表405

24.2.2将子报表另存为主报表

为了将信息发布给不同的观众,可能会发现将子报表另存为主报表很有利。例如,包含子报表的主报表可能与财政年度末的股东会议有关;而子报表中包含的数据可能与经理的日常使用有关。在这些情况下,很容易将子报表另存为主报表。

X将子报表另存为主报表

1

2

3

4在“设计”选项卡中,右击子报表并从快捷菜单中单击“将子报表另存为”。出现“另存为”对话框。在“另存为”对话框中搜索相应的目录。键入子报表的新名称。单击“保存”按钮。

程序将子报表另存为主报表,以便需要时可以单独打开它。

24.2.3更新子报表

为了使子报表保持最新,可能需要在打开主报表时自动重新导入子报表。

注意: 重新导入仅适用于从报表文件中创建的子报表。

如果做了更改,则重新导入不但更新数据,而且更新子报表的格式、分组及结构。如果更改了子报表当初所基于的报表,则可以将这些更改反映到包含该子报表的报表中。

可以全局指定重新导入所有子报表,或为个别的子报表设置自动重新导入。

X打开主报表时全局更新子报表

1

2

3

4在“文件”菜单上,单击“选项”。在“选项”对话框中,单击“建立报表”选项卡。单击打开时重新导入子报表。单击“确定”。

打开并刷新子报表的主报表时,所有子报表都将更新。

X打开主报表时更新特定的子报表

1

2

3在“格式”菜单上单击“设置子报表格式”。在“格式编辑器”对话框中,单击“子报表”选项卡。单击“打开时重新导入”。

打开并刷新主报表时,将更新当前的子报表。

水晶报表Crystal Reports培训教程 35_水晶报表教程

406Crystal Reports 用户指南

24.3将子报表链接到主报表内的数据

子报表中的数据经常补充主报表中的数据。例如,可能在主报表中包含客户数据,然后使用子报表显示每个客户的订单。

在这些情况下,需要协调主报表中的数据与子报表中的数据,使每个子报表中的订单与正确的客户相匹配。

为此,需要指定子报表和主报表的公用字段。使用“子报表链接”对话框创建两个公用字段间的链接。Crystal Reports 用该链接将主报表中的记录与子报表中的记录进行匹配。该链接确保子报表中的“订单”数据与主报表中对应的“客户”数据在同一行上。

24.3.0.1 将子报表链接到主报表中的数据

1如果要创建新的子报表或将现有报表作为子报表导入,从“插入”菜

单中单击“子报表”。选择或创建报表,然后单击“链接”选项卡。- 或 -

如果已将子报表放在主报表中,但没有在设置时创建链接,则从“编辑”菜单中选择“子报表链接” 以浏览到“子报表链接”对话框。出现“子报表链接”对话框。

从“用于子报表”列表中选择要链接的子报表(若尚未选定该子报表)。从“可用字段”列表中选择要在主(包含)报表中用作链接字段的字段。单击 > 箭头。

该字段即被添加到“字段链接到”列表框中,并且立即被选定为链接字段。

根据需要,对每个其它链接重复步骤 3 和 4。

使用“字段链接”节(只有在选定了链接字段后才会出现)为每个链接字段设置链接:

?从“使用的子报表参数字段”中选择要链接到主报表的字段。?选择“基于字段选择子报表中的数据”复选框,并从相邻的下拉列

表中选择字段,以便基于特定的字段组织子报表数据(这相当于快速使用“选择专家”)。如果没有在这里指定字段,子报表将采用主报表的结构。

单击“确定”。

运行报表时,程序将协调主报表中的数据与子报表中的数据。234567

注意: “包含报表”字段的字段类型决定可以看见哪些子报表字段。因为 Report Designer 将日期读为字符串、日期或日期/时间字段,所以必须确保子报表参数字段类型与主报表中的“报表选项”为要链接的字段设置的字段类型相匹配。

通过使用子报表组合不相关的报表407

24.3.1在不修改选定公式的情况下将子报表链接到主报表

Crystal Reports 使用参数字段机制将子报表链接到主报表。

?

?当将不是参数字段的主报表字段链接到子报表字段时,程序:自动创建完成链接的参数字段。修改子报表记录选定公式,使得只选择那些子报表字段值等于参数字

段值的记录。

对参数字段的需要是隐含的;这称为“隐式链接”情况。

有时,可能希望在子报表中使用链接的参数字段,但不将其作为子报表选定公式的一部分。例如,可能希望主报表传递的汇总值可供子报表在计算中使用,或希望主报表传递子报表的标题。

?

?

?当将主报表中的字段链接到在子报表中创建的参数字段时,程序:检查指定的链接。不创建附加的参数字段。不修改子报表记录选定公式。

指定链接称为“显式链接”情况。

X在不修改选定公式的情况下将子报表链接到主报表

1

2在子报表中创建参数字段。将主报表中的字段链接到该参数字段。

24.4通过使用子报表组合不相关的报表

有时,可能希望将不相关的报表组合到单个报表中。例如,可能希望创建单个报表来表示:

?按销售代表分组的销售额。

?按项目分组的销售额。

虽然两个报表都处理销售数据,但两个报表之间没有真正的线性关系。可以使用子报表将不相关的报表组合到像这样的单个报表中。虽然报表可以基于相同的数据集,但不必非这样。它们可以分别基于完全不同的数据集。

这些报表中的每一个都是独立的;任何报表中的数据不以任何方式链接到另一个报表中的数据。这是最容易使用的子报表选项。

408Crystal Reports 用户指南

24.4.1组合两个或更多不相关的报表

X组合两个不相关的报表

1

2

3将最先要打印的报表创建为主报表。将现有报表作为子报表导入或创建新的子报表。将子报表放置在“报表页脚”中,它将紧接在主报表之后打印。X组合三个或更多不相关的报表

1

2

3将最先要打印的报表创建为主报表。导入或创建其它每一个要作为子报表使用的报表。使用“节专家”插入足够多的“报表页脚”节,与要使用的子报表数

相匹配。

例如,如果要使用三个子报表,则插入两个新“报表页脚”节,这样一共有三个“报表页脚”节。

在“报表页脚 A”中,放置要紧接在主报表之后打印的子报表。在“报表页脚 B”中,放置下一个要打印的子报表,依此类推。

首先打印主报表,然后按子报表放置在报表中的顺序打印它们。

注意:可以在同一个“报表页脚”节中并排放置子报表。它们将在报表的最后一个接一个地打印。

将子报表放置在“报表页脚”节中,它们将在主报表后按顺序打印。45

相关主题

? 第180 页上的 “使用节”

24.5对无法链接的数据使用子报表

?

?

?

?只要满足下列条件,就可以在报表中链接表:链接字段都是数据库字段。链接字段包含相似数据。链接字段的长度相同。与(查阅)表链接的链接字段有索引(仅对于 PC 数据库)。

链接表很少有问题。但是,有些情况下不能协调不同表中的数据,因为数据不满足链接条件。

例如,不能在单个报表中与公式字段进行相互链接,也不能链接两个没有索引的表。这时必须使用子报表。

对无法链接的数据使用子报表409

24.5.1与公式字段进行相互链接

有些情况下,可能需要与公式(计算)字段进行相互链接。例如,雇员 ID 可以是 11 个字符值,该值由两个字符的部门代码后跟雇员的九个字符的社会安全号组成(如 HR555347487)。

公式语言使从该字段中析取社会安全号很容易:

{雇员.雇员 ID} [-9 to -1]

- 或 -

{雇员.雇员 ID} [3 to 12]

对于值 HR555347487,每个公式都返回值 555347487。

虽然返回值是有效的社会安全号,但是它来自公式,这使您不能使用该字段链接到另一个表中的“社会安全号”字段。不过,可以使用子报表报告和协调两个报表中的值。

X与公式字段进行相互链接

1

2用包括“社会安全号”字段的表创建主报表。用从“雇员 ID”字段中析取社会安全号的公式(如 {@EXTRACT})创

建(或导入)子报表。

请参阅 第3 页上的 “插入子报表”。

将子报表放置在希望它在主报表中出现的位置。

将主报表中的“社会安全号”字段 ({file.SSN}) 链接到析取子报表中的社会安全号的公式 ({@EXTRACT}),以便将子报表链接到主报表。请参阅 第7 页上的 “在不修改选定公式的情况下将子报表链接到主报表”。34

24.5.2链接没有索引的表

使用 PC(不是 SQL 或 ODBC)数据库时,查阅数据库中的链接字段需要建立索引以便创建有效的链接。当两个表包含相关的数据,但两个表在要作为链接字段使用的字段上都没有索引时,或当主表有索引但查阅表没有索引时,不能在单个报表中链接表。如果要协调两个表中的数据,必须使用子报表。

注意: 注意这一点很重要,即链接没有索引的表或从有索引的主表链接到没有索引的查阅表可能会导致报告的效率降低。如果数据集很大,运行此种报表将需要相当长的时间。仅在没有其它选择时才使用此技术。

410Crystal Reports 用户指南

X链接没有索引的表

1

2创建主报表。创建(或导入)子报表并将其插入到主报表中。

请参阅 第3 页上的 “插入子报表”。

使用没有索引的字段(或主报表中的索引字段和查阅表中的没有索引的字段)将子报表链接到主报表。请参阅 第6 页上的 “将子报表链接到主报表内的数据”。3

24.6创建按需要显示子报表

当想创建包含多个子报表的报表时,按需要显示子报表尤其有用。在这种情况下,可以选择使这些子报表只作为超链接出现。

实际数据直到用户在超级链接上深化时才从数据库中读取。这样便只从数据库中检索实际查看的按需要显示子报表的数据。这使子报表管理起来容易得多。

注意: 不保存按需要显示子报表的数据,除非子报表已在预览窗口中打开。

X创建按需要显示子报表

1

2在主报表中放置一个普通的子报表。在“专家工具”工具栏上单击“格式”按钮。

出现“格式编辑器”对话框。

单击“子报表”选项卡并选中“按需要显示子报表”复选框。单击“确定”。34

24.6.1向按需要显示子报表中添加标题

若要进一步组织报表,可以为“子报表预览”选项卡和按需要显示子报表的占位符框架创建标题。

标题是用公式写的。占位符框架标题和“子报表预览”选项卡标题都可以包括主报表中的字段名称。

在“子报表预览”选项卡上,选项卡文本标题替换子报表文件名标题。注意: 占位符框架标题仅应用于按需要显示子报表,而选项卡文本标题既可应用于按需要显示子报表,也可应用于常规子报表。因为在“预览”选项卡上可以看见常规子报表中的数据,所以设置常规子报表格式

时不需要框架标题。

水晶报表Crystal Reports培训教程 35_水晶报表教程

在单个报表中显示相同数据的不同视图411

X添加标题

1选择子报表,然后在“专家工具”工具栏上单击“格式”按钮。

出现“格式编辑器”对话框。

单击“子报表”选项卡。

通过单击适当的“公式”按钮并打开公式工作室,可以输入按需要显示子报表的标题或预览选项卡标题。

在“公式文本”框中输入公式。

Crystal 语法公式示例:

"More Information About " + {客户.客户姓名}234

Basic 语法公式示例:

formula = "More Information About" + {客户.客户姓名}

使用 Xtreme.mdb 示例数据库时,这些公式会给出如“MoreInformation About Pathfinders”或“More Information AboutRockshocks for Jocks”之类的标题。

5

6

7单击“检查”检查公式是否有错误。如果程序找到错误,将用详述错误特点的消息框提示您。修改错误后,单击“保存并关闭”。单击“确定”按钮返回报表。

注意: 在子报表上深化时,只对选项卡文本公式求值。如果同主报表分开预览子报表,则不对公式求值。

24.7在单个报表中显示相同数据的不同视图

子报表可用于在主报表中提供数据的不同视图。例如,可能需要在报表上部显示汇总值,在下部显示详细信息。

?

?这可以通过多种不同的方法完成。两种最容易的方法是:将汇总报表创建成主报表,将详细信息报表创建成子报表。在此方法中,详细信息子报表放置在“报表页脚”节中。将详细信息报表创建成主报表,将汇总报表创建成子报表。在此方法

中,汇总报表放置在“报表页眉”节中。

使用适当的链接字段链接报表和协调数据。

第25章 了解数据库

25.1数据库概述

虽然有上百个数据库管理系统 (DBMS) 可用,但是 Crystal Reports一旦连接到实际的数据库文件,就会消除许多差异。对数据库文件、表、字段和记录的处理基本上是一样的,与所访问数据的实际类型无关。

本章讨论处理数据库文件方面的几个常见概念和任务。对于在Crystal Reports 中设计报表的人,使用数据库别名、定位已移动或重命名的数据库文件、处理索引表以及链接表是很常见的任务。对于访问 SQL数据库中数据的人和访问通过 ODBC 访问的其它数据库格式中数据的人, 第25 页上的 “使用 SQL 和 SQL 数据库” 尤其重要。25.1.1关系数据库基础知识

在公司领域内,最常用的数据库文件构架是基于关系模型。因此,允许用关系模型创建数据库的应用程序常被作为关系数据库管理系统(RDBMS)。

在关系数据库中,数据被组织在由行和列组成的系统中。这些行称为记录,列称为字段。每个记录包含相关数据的集合,例如与特定客户相关的所有信息。每个字段引用存在于所有记录中的公用数据类型,如客户的名称。记录和字段存储在数据库表中。下图显示基本的关系数据库模型:

两个不同的表中的数据常可以通过一个公用字段相关联。例如,“客户”表包含每个客户的客户 ID,而“订单”表包含每个下订单的客户的客户 ID,这说明了两个表之间的关系。这两个表可以通过一个公用字段链接,请参阅 第6 页上的 “链接表”

413Crystal Reports 用户指南

下图显示两个表可以如何相关:

25.1.2别名

由于多种原因,需要更改数据库的名称和位置。如果创建报表,然后更改表或文件的名称或位置,则 Report Designer 必须能找到新的名称或位置。这在报表中创建访问已重命名或移动的表的公式时尤其重要。解决单个字段的引用问题并不困难,但要找到使用该字段的每个公式则是一项困难且耗时的任务。

为了解决该问题,Report Designer 使用别名来引用数据库表和文件。别名是指针,是告诉程序应在哪里查找数据库字段的内部设备。现在,如果更改数据库的名称或位置,则只需重置指针即可。请参阅 第3页上的 “定位文件”。别名不会更改,因此公式不会受到影响。ReportDesigner 通过别名查找位置和名称,然后转到数据库字段的新位置,再

执行公式,这样就不会出现问题。

数据库概述414

当您第一次选择表或文件时,Report Designer 将自动为数据库表分配默认别名。默认情况下,别名与表的原始名称匹配。在数据库表作为单独文件存在的数据库(如 dBASE)内,使用数据库文件名时不带文件扩展名。例如,如果使用的是 dBASE 数据库文件 Company.dbf,则程序将为该文件分配 Company 这个默认别名。可以接受默认别名或为数据库表分配一个新的别名。

可以随时使用“数据库专家”更改别名。但是,如果已使用原始别名在报表中创建了公式,则需要对公式进行编辑以使用新的别名。

25.1.3定位文件

如果移动或重命名了数据库文件,下次打印报表时 Crystal Reports将无法找到数据。在其它情况下,可能在一台机器(在该机器上,所有的数据库数据都存储在某个目录中)上创建报表,然后将报表复制或移动到另一台机器(该机器将这些相同数据存储在不同的目录中)上。在这些事件的任意一个中,需要验证由报表访问的数据库文件的位置,并将别

名指针重置为新的数据库位置或名称。

415Crystal Reports 用户指南

“数据库”菜单中的“验证数据库”命令检查存储在报表文件中的别名指针,以验证所需的数据库文件是否位于指定的目录中。如果在指定的位置找不到数据库,程序将通知您这种不一致。

使用“数据库”菜单中的“设置数据源位置”命令来更改 CrystalReports 存储的别名指针。“设置数据源位置”命令提供了一种简单方法,可以指出数据库文件的新名称或位置。此外,“设置数据源位置”命令还自动将数据库驱动程序转换为您选定的数据源。例如,可以使用“设置数据源位置”命令自动将某个直接访问数据源转换为 ODBC 数据源。相关主题

请参阅联机帮助中的“更改报表所访问的数据源”。

25.1.4索引表

为数据库表创建索引可以加快数据访问速度并减少程序求值数据所需的时间。有些 DBMS 应用程序自动为数据库表创建索引,而有些则要求您自己创建索引。为获得最佳的报表生成性能,请确保每个数据库表都有一个相应的索引。

注意: 有些 DBMS 应用程序不支持索引表。请参阅 DBMS 文档,了解其是否支持索引以及如何创建索引。如果 DBMS 文档中没有提到索引表,说明它可能不支持索引,这种情况下应基于公用字段链接表。“数据库专家”的“链接”选项卡也可以帮助您确定表是否包含索引。

水晶报表Crystal Reports培训教程 35_水晶报表教程

数据库概述416

索引组织关系数据库表中的记录,因此可以更容易地定位数据。例如,假设有一个包含下列数据的表:

订单号10444104701048510488104951050110511105441056810579

客户

Allez

Distribution

BG Mountain Inc.Sierra MountainMountain ToadSFB Inc.

La Bomba de Bicicleta

BG Mountain Inc.Sierra Bicycle Group

Mountain Tops Inc.

Sierra Bicycle Group

金额25141.5019164.308233.5024580.507911.801956.201683.6019766.2029759.5512763.95

该表中的信息是按照“订单号”字段组织的。这在每当想要基于订单号查找表中的信息时都很有效。但是,要查找某个客户特有的信息时该怎么办呢?

假设想要查找由 Sierra Bicycle Group 下的所有订单。数据库引擎必须从列表中的第一个订单号开始查找,以检查客户姓名是否与请求匹配。如果不匹配,便转到第二个订单号并检查客户姓名。当到达包含正确客户姓名的订单号时,数据库引擎检索信息,然后继续进行到下一个订单号。使用该技术时,必须为表中的每个记录读取“订单号”字段和“客户”字段。这将花费很长的时间和大量的计算机处理工作,以检查大量包含上千条甚至上百万条记录的数据库表。

417Crystal Reports 用户指南

相反,可以基于“客户”字段为表创建索引。这类索引可能类似于下面这样:客户

Allez DistributionBG Mountain Inc.BG Mountain Inc.

La Bomba de BicicletaMountain Toad

Mountain Tops Inc.SFB Inc.

Sierra Bicycle GroupSierra Bicycle GroupSierra Mountain

指向订单号的指针10444104701051110501104881056810495105441057910485

在该索引中,信息是按客户,而不是按订单号组织的。还请注意:第二列实际上包含指向原始表中的特定订单号的指针。通过使用该索引,数据库引擎可以只搜索“客户”列中的信息,直到找到您感兴趣的客户Sierra Bicycle Group 为止。

对于在索引中找到的每个正确的客户条目,数据库引擎按照索引第二列中的指针查找表中的匹配订单。只读取正确客户的订单。最后,由于索引中的信息是按照客户姓名组织的,所以数据库引擎一找到与请求的客户不匹配的条目,就不再需要在索引或表中继续搜索下去。

这种高度有组织的搜索按照索引在数据库表中进行搜索,其优势就是速度快。使用索引加快数据检索以及报表生成的速度,当在大数据库文件上创建报表时,这是非常重要的因素。

25.2链接表

通过链接表,使一个表中的记录与另一个表中的相关记录匹配。例如,如果激活“订单”表和“客户”表并将这两个表链接,使(“订单”表中的)每个订单可与(“客户”表中的)下订单的客户进行匹配。链接时使用的是两个表共用的字段。Crystal Reports 使用链接将一个表中的记录与另一个表中的记录进行匹配。在本例中,链接确保报表每一行中的数据引用同一个订单。

链接表418

25.2.1链接自和链接到

当链接两个表时,从一个表链接到另一个表。自表用作主表,而至表充当查找表,主表查找查找表中的记录。在简单链接中,ReportDesigner 检查主表中的第一个记录并在查找表中查找所有匹配的记录。在查找表中找到了与主表的第一个记录匹配的所有记录后,便在查找表中查找与主表的下一个记录匹配的所有记录。

25.2.2链接关系

当将一个表的记录链接到另一个表时,记录通常归入下列两种关系类型之一:?一对一?一对多

25.2.2.1 一对一关系

在两个链接表的记录之间的一对一关系中,对于主表中的每个记录,在查阅表中只有一个匹配记录(基于链接字段)。例如,在 Xtreme.mdb数据库中,可以基于每个表中的“雇员 ID”字段将“雇员”表链接到“雇员地址”表。“雇员”表包含公司雇员的信息,包括他们的职位、薪金、雇用信息等。“雇员地址”表包含每个雇员的家庭住址。在这些表中,每个雇员只有一个记录。因此,如果将“雇员”表链接到“雇员地址”表,则对于“雇员”表中的每个记录,在“雇员地址”表中只能找到一个记录。这就是一对一关系。

25.2.2.2 一对多关系

在两个链接表的记录之间的一对多关系中,对于主表中的每个记录,在查找表中可能有多个匹配记录(基于链接字段)。在 Xtreme.mdb 数据库中,可以基于每个表中的“客户 ID”字段将“客户”表链接到“订单”表。“客户”表包含向该公司下过订单的每个客户的信息。“订单”表包含有关客户所下订单的信息。由于客户可以下一个以上的订单,所以对于“客户”表中的每个客户记录,在“订单”中可能会有一个以上的记录。这就是一对多关系。

25.2.3一对多链接中的性能考虑

本节中提供的信息旨在帮助您在运行报表时优化处理速度并使网络流量减到最少。您将了解在一对多情况下,使用选定公式和索引更有效地创建报表的最佳方法。如果不使用本节中的信息,报表最后可能要多处理几十甚至数千个不必要的记录。

419Crystal Reports 用户指南

当在两个数据库表之间存在一对多的情况且程序匹配表中的记录时,有许多因素决定程序读取和求值的记录数。

以下各表显示不同的因素对程序最终要读取的记录数的影响。该图表基于下列假定:

?表 A 包含 26 个记录(字母表中的每个字母各有一个记录)。

?表 B 包含 2600 个记录(表 A 中的每个记录各有 100 个匹配记

录)。

?该情形将产生这样一个报表:此报表查找表 A 中的两个特定记录,以

及表 B 中与表 A 中的这两个记录相匹配的 200 (100+100) 个记录。在最好的情形中,程序只需读取约 200 个记录即可完成该任务。在最糟的情形中,程序必须读取约 67,600 个记录才能完成同一任务。注意: 对数据文件的性能考虑与对 SQL 数据库的考虑是不同的。数据文件是任何直接从 Crystal Reports 访问的非 SQL 数据库。对于此处的讨论而言,SQL 数据库是指任何能够接受 SQL 命令、可以直接从Crystal Reports 访问或通过 ODBC 访问的数据库,以及任何可以通过ODBC 访问的其他类型的数据库。要进一步了解直接访问数据库与 ODBC数据源之间的区别,请参阅联机帮助中的“访问数据源”。

25.2.3.1 扩展的图表列说明

?

?

????

性能图表使用以下各列:

链接或子报表

您是从已链接的数据库创建报表,还是插入子报表并将其绑定到主报表中的数据上?选定公式

主报表中是否包括记录选定公式以便在表 A 的键(索引)字段上设置范围限制?索引 A

将要使用的字段上的表 A 是否有索引以匹配记录?索引 B

将要使用的字段上的表 B 是否有索引以匹配记录?A 中的读取数

为找到所要查找的两个记录,程序必须读取表 A 中的多少个记录?对于每个 A 在 B 中的读取数为找到所要查找的 200 个记录,程序必须读取表 B 中的多少个记录?

链接表420

?

总共读取的记录数

为完成该任务,程序必须总共处理多少个记录?

PC 数据

链接/子报表选定公式

索引 A

索引 B

A 中的读取数26262262262262

对于每个 A 在 B 中的读取数100

(26*100)100

(26*100)100 (2*100)2600 (26*2600)2600

(26*2600)100

(26*100)2600 (2*2600)100

(26*100)100 (2*100)

总共读取的记录数2600260020067,60067,600260052002600200

链接链接链接子报表子报表子报表子报表子报表子报表SQL 数据链接/子报表链接链接子报表子报表

否是是否否否是是是

是或否否是否是是否否是

是是是否否是否是是

选定公式否是否是

A 中的读取数262262对于每个 A 在 B 中的读取数100 (26*100)100 (2*100)100 (26*100)100 (2*100)总共读取的记录数26002002600200

水晶报表Crystal Reports培训教程 35_水晶报表教程

421Crystal Reports 用户指南

25.2.4数据文件考虑

当处理数据文件时,在一个报表中链接表或将子报表添加到报表时,可以发生一对多链接。

25.2.4.1 链接数据文件

当在一对多情况下从已链接的数据库文件中检索数据时,程序使用下列进程:

?如果有选定公式,程序将对该选定公式进行语法分析,并将其能传递

的内容传递到数据库 DLL。通常是范围限制信息。考察下列记录选定公式:

{客户.地区} in "CA" to "IL" AND

Remainder ({客户.客户 ID},2)=0

?在该公式中,“and”运算符前面的部分包含“地区”字段的范围选择条件。地区必须按字母顺序归入到“CA”和“IL”之间。程序将这种条件传递到数据库 DLL(对于 PC 数据)或服务器(对于 SQL 数据)。请参阅 第131 页上的 “记录选定”。但是,选定公式的另一部分必须在“报表引擎”中进行处理。它使用一个内置函数操作和求值字段值,但这不能在数据库 DLL 或服务器中进行。程序不将该条件传递到数据库 DLL。如果表 A 有索引,而且范围限制选择条件基于索引字段(在本例中

是 {客户.地区}),则程序直接转到在表 A 中搜索的记录(第一个CA 记录)并读取该记录。

?对于那个记录,程序使用表 B 索引定位表 B 中的第一个匹配记

录。

?程序将合并的记录 (A+B) 传递回 Report Designer,后者根据整

个选定公式对该记录进行测试。

?然后程序读取第二个匹配记录并继续传递合并的记录,然后读取

第三个匹配记录,依此类推,直到读取完全部的匹配记录。

?然后程序返回到表 A 读取下一个记录。无需测试记录以查看它是

否满足 CA 条件;字段有索引,记录则按字母顺序排列。但是程序将测试记录以查看它是否超出“IL”条件(例如,下一个记录能否来自 Mississippi 或 Tennessee?)。如果记录仍在指定范围内,程序将为该记录再次开始匹配过程。

?程序继续该过程直到找到了所有的目标表 A 记录和匹配的表 B

记录。

为查找表 A 中的两个记录以及每个表 A 记录在表 B 中的 100个匹配记录,程序需读取 200 个记录。

链接表422

?如果表 A 没有索引,或者如果有索引但范围限制选择条件不是基于

索引字段,则程序将读取所找到的第一个记录。

?对于那个记录,程序使用表 B 索引定位表 B 中的第一个匹配记录。?程序将合并的记录 (A+B) 传递回报表引擎,报表引擎根据整个选

定公式对该记录进行测试。

?然后程序定位表 B 中的第二个匹配记录并传递回合并的记录,然

后是第三个记录,依此类推,直到传递回表 B 中与表 A 中的记录相匹配的所有记录。

?然后程序移到表 A 中的下一个记录,再次开始匹配和合并过程。

为查找表 A 中的两个记录以及每个表 A 记录在表 B 中的 100个匹配记录,程序需读取 2600 个记录。

25.2.4.2 子报表和数据文件

如果主报表基于表 A,子报表基于表 B,而且记录是链接的,则主要的考虑事项如下:

?程序所运行的子报表数取决于主报表中的索引和选定公式情况:

?如果表 A 有索引,而且如果主报表有一个传递索引字段的范围限

制条件的选定公式,则程序运行两个子报表。

?如果表 A 没有索引,或者表 A 有索引,但选定公式不传递索引字

段的范围限制条件,则程序运行 26 个子报表。

?为每个子报表读取的记录数取决于表 B 上的索引情况:

?如果表 B 有索引,当程序运行子报表时,将只读取匹配的记录

(100)。

?如果表 B 没有索引,当程序运行子报表时,将始终读取表 B 中的

每个记录 (2600)。

25.2.5SQL 数据库考虑

由于索引对 SQL 数据不重要,所以对于两个链接的表和子报表,主要考虑的是在为表 A 设置范围限制的主报表中是否有选定公式。请参阅第10 页上的 “链接数据文件”。

25.2.5.1 链接的 SQL 表

?如果在选定公式中有范围限制条件,则程序将那些条件传递到服务器。如果有为表 A 设置范围限制的选定公式,服务器将定位表 A 中满足

选择条件的记录 (2),将它们与表 B 中的相应记录 (100) 进行匹配,并向报表引擎返回 200 个合并的记录。

423Crystal Reports 用户指南

?如果没有选定公式,或者如果选定公式不为表 A 设置范围限制,则

服务器将表 A 中的每个记录 (26) 与表 B 中的相应记录 (100) 进行匹配,并向报表引擎返回 2600 个合并的记录。

在这两种情况的任意一种中,报表引擎将整个选定公式应用到合并的记录上。

25.2.5.2 子报表和 SQL 数据库

?

?如果基于表 A 创建主报表,基于表 B 创建子报表:运行的子报表数取决于主报表中的选定公式情况:?如果有选定公式,而且选定公式传递表 A 的范围限制,则程序只为满足范围限制条件的记录 (2) 运行子报表。?如果没有选定公式,或者如果选定公式不传递表 A 的范围限制,则程序为表 A 中的每个记录 (26) 各运行一次子报表。不管表 A 是否有范围限制选定,每个子报表所读取的记录数都是一

样的。每个子报表只读取表 B 中与在表 A 中读取的每个记录相匹配的记录 (100)。

25.2.6对所有报表的性能考虑

25.2.6.1 考虑 1

对于数据文件和 SQL 数据库,不论程序能够转换(传递)条件的哪些部分,也不论这些部分可能物理地出现在公式中的什么位置,程序都会对整个选定公式进行语法分析并传递。因此,如果公式先找到了它能传递的条件,又找到了它不能传递的条件,然后又找到了它能传递的条件,它将传递第一个部分,跳过第二个部分,然后传递第三个部分。?如果是数据文件,程序将所能传递的条件传递到数据库转换层。?如果是 SQL 数据库,程序将所能传递的条件以 WHERE 子句的形式传

递到服务器。

虽然也有例外的情况,但一般的规则是,程序可以传递比较字段与常量的记录选定公式的任意部分。通常这意味着它能传递可在选择专家中设置的任意种类的记录选择条件(等于、之一、小于、大于、小于或等于、大于或等于、之间、始自、或类似常量)。

有两种需要考虑的特殊选定公式情况。在这些情况下,记录选定公式包括多个条件,其中的一些条件可以被传递,而另一些则不能。?AND 情况

{客户.地区} = "CA" and

{客户.客户 ID}[3 to 5] = "777")

链接表424

?在该情况下,程序明白可以传递 And 运算符之前的条件,而不是之后的条件。由于唯一一个满足第二个条件的记录还必须满足第一个条件,因此程序传递第一个条件,检索符合该条件的数据集,再将第二个条件只应用于检索出的数据。AND 情况的规则是,程序传递任何它可以传递的条件。注意:如果在服务器上或在数据库 DLL 中可以满足 AND 情况中的所有条件,则程序传递所有条件。OR 情况

{客户.地区} = "CA" or

{客户.客户 ID}[3 to 5] = "777")

在该情况下,程序也明白可以传递 Or 运算符之前的条件,而不是之后的条件。由于某些记录可以在无需满足第一个条件的情况下满足第二个条件,因此传送第一个条件毫无意义,因为这样做会检索一个不完整的数据集。换言之,即使程序检索了满足第一个条件的所有数据,在它可以将第二个条件应用到 Report Designer 之前,仍必须检索表中的所有数据。因而,程序并不复制检索的部分数据,而是什么也不传递。它检索所有数据,然后在 Report Designer 中运行两个测试。OR 情况的规则是,程序要么传递所有测试,要么一个都不传递。注意:如果可以在服务器上或在数据库 DLL 中执行 OR 条件中的所有测试,则程序传递所有测试。

25.2.6.2 考虑 2

?

?

?若要确保程序可以利用表 A 的索引提高性能,请确定:有选定公式。在表 A 的键(索引)字段上的选定公式中有范围限制。使用在“选项”对话框中选定的“索引”。

25.2.6.3 考虑 3

如果使用的表 A 中的字段没有索引,但是有可以在记录选定请求中使用的索引字段,则使用该字段。例如,假设有三种产品(产品 1、产品2 和产品 3),想要确定产品 2 在美国的总销售额。“产品”字段没有索引,但是“订单日期”字段有索引。因为知道产品 2 要到 1995 年 7月才发货,所以可以使用选定公式,将报表限制到在 1995 年 7 月及此后所下的订单来提高速度。在这种情况下,程序使用“订单日期”索引只检索自 1995 年 7 月及此后所下的订单(整个数据库的一个小子集),然后在该子集中,而不是在整个数据库中搜索产品 2 的事件。

425Crystal Reports 用户指南

25.2.7“数据库专家”的“链接”选项卡

“数据库专家”的“链接”选项卡使您得以轻松链接两个或更多的表。从“数据库”菜单中选择“数据库专家”,将显示所有当前表;然后选择“链接”选项卡,将显示所有当前链接。

要链接数据库表,最简单的方法是在“数据库专家”的“链接”选项卡上选择“自动链接”。“自动链接”基于表或索引字段(如果数据库支持索引字段)中的公用字段自动为表选择链接。

25.2.8链接索引表

当链接直接访问数据库表时,必须从主表链接到查阅表中的字段。主表中的链接字段可以有索引,但不是必须有索引。查阅表中的链接字段也不必有索引,除非您的连接使用的不是 本机驱动程序。

此外,用于链接两个表的字段必须属于相同的数据类型。例如,可以将一个表中的字符串字段链接到另一个表中的字符串字段,或者将一个表中的数值字段链接到另一个表中的数值字段,但是不能将一个表中的数值字段链接到另一个表中的字符串字段。

?

?

?注意: 有些 DBMS 应用程序允许将字段值转换为索引中的另一种数据类型。例如,表中的字段可以是数值,而索引将该字段值转换为字符串。但是,如果选择使用该字段链接到另一个表,则必须链接到原始数据类型的字段。不能将字符串值链接到已转换为索引中的字符串的数值字段。若要链接来自两个不同的 ODBC 数据源(如 MS SQL Server 和Oracle)的表,可以只使用字符串字段链接表。字符串字段以相同的方式存储在数据库中,与数据源无关。但是其他类型的值可能不是以相同的方法存储在不同的数据源中,因此不能使用字符串值以外的其他类型的值在 Crystal Reports 中链接不同的数据源。当使用本机驱动程序(非 SQL)链接直接访问数据库表时,唯一可用的联接类型是左外部联接。

25.2.8.1 更改链接中使用的索引

当使用“智能链接”功能链接多个表,而这些表使用的某个字段是由多个索引(两个或更多)组成的时,Crystal Reports 选择其中的一个索引用于链接。该索引可能是或者不是您想要使用的索引。删除“智能链接”功能所创建的链接,然后手动链接这些表。有关更多信息,请参阅第82 页上的 “链接多个表”。

注意: 并非所有的 DBMS 应用程序都支持索引表。在尝试选择用于链接的索引之前,请验证您的数据库是否使用索引。请参阅 DBMS 文档,了解您的 DBMS 是否可以使用索引,并学习如何创建索引。

水晶报表Crystal Reports培训教程 35_水晶报表教程

链接表426

25.2.9链接处理顺序

如果有多个链接,Crystal Reports 需要知道应以什么顺序处理这些链接。默认情况下,处理顺序与链接显示在“链接”选项卡中的顺序相匹配。使用“链接顺序”对话框中的箭头按钮可以更改这种默认顺序。例如,如果从 Xtreme 示例数据库中选择了信用、客户、订单和订单细节表,则“链接”选项卡会按照以下顺序显示这些链接表。

此时,首先会处理信用/客户表之间的链接,然后是客户/订单表之间的链接,最后才是订单/订单细节表之间的链接。“链接顺序”对话框将显示该默认顺序,但您可以根据需要更改链接在处理顺序中的位置。注意: 不同的链接顺序可能产生不同的返回数据集供报表使用。链接顺序对性能的影响也很大。

25.2.10链接选项

在 Crystal Reports 中,您可以指定希望在链接表时使用的联接类型和链接类型。您也可以在联接中强制使用表。联接和链接表明当读取记录时如何比较两个表中的联接字段。可以在“链接选项”对话框中指定联接、强制和链接选项。使用不同的联接强制选项可确保在 SQL 查询中包括链接的表(即使报表中未使用表中的任何字段)。

注意: 当使用联接链接字段时,不需要索引字段。

??

联接类型为:

内部联接左外部联接

427Crystal Reports 用户指南

??

右外部联接完全外部联接强制联接选项为:未强制强制自强制至强制两者

链接类型为:等于 [=] 链接大于 [>] 链接

大于或等于 [>=] 链接小于 [<] 链接

小于或等于 [<=] 链接不等于 [!=] 链接

????

??????

25.2.10.1 内部联接

内部联接是联接的标准类型。内部联接的结果集中包含两个表中的链接字段值完全匹配的所有记录。例如,可以使用内部联接来查看所有客户和他们所下的订单。任何没有下订单的客户在结果集中都不会有匹配记录。客户表客户 ID52535357586062636364

客户表客户姓名

Allez DistributionBG Mountain Inc.BG Mountain Inc.Hansen MTB Inc.

La Bomba de BicicletaMountain ToadSFB Inc.

Sierra Bicycle GroupSierra Bicycle GroupSierra Mountain

订单表订单金额25141.5019164.301683.6015716.401956.2024580.507911.8019766.2012763.958233.50

链接表428

25.2.10.2 左外部联接

左外部联接的结果集包括所有要求两个表中的链接字段值完全匹配的记录。链接字段值在查找表中没有匹配项的主(左)表中的每个记录在结果集中也各占一行。例如,可以使用左外部联接查看所有客户及其所下的订单,而没下过订单的每个客户在结果集中也各占一行。这些客户出现在列表的最后,而且本应包含订单信息的字段为空白:客户表客户 ID525353575860626363645455

客户表客户姓名

Allez DistributionBG Mountain Inc.BG Mountain Inc.Hansen MTB Inc.

La Bomba de BicicletaMountain ToadSFB Inc.

Sierra Bicycle GroupSierra Bicycle GroupSierra MountainBicicletas AztecasDeely MTB Inc.

订单表订单金额25141.5019164.301683.6015716.401956.2024580.507911.8019766.2012763.958233.50

注意: 在 SQL 语言中,对左外部联接和右外部联接的处理方法与其它联接类型不同。如果是通过 ODBC 访问数据库,则 Crystal Reports在 SQL 语句中使用 ODBC 语法。如果是直接连接到 SQL 数据库(不通过 ODBC),则 Crystal Reports 使用该数据库的固有语法。有关 SQL语句中的外部联接格式的更多信息,请参阅 Microsoft ODBC 文档或SQL 数据库文档。

429Crystal Reports 用户指南

25.2.10.3 右外部联接

右外部联接的结果集包括所有要求两个表中的链接字段值完全匹配的记录。链接字段值在主表中没有匹配项的查找(右)表中的每个记录在结果集中也各占一行。如果从“客户”表链接到“订单”表,则客户所下的每个订单在表中各占一行。每个找到的不能链接到客户的订单也各占一行。从理论上讲,不会发生这种情况,但是如果一个缺乏经验的销售员忘记为订单分配客户 ID,则可以使用右外部联接快速定位该订单。所得到的表在没有客户的订单的“客户”字段上保留空白。客户表客户 ID52535357586062636364

订单表订单 ID61121420161928321425

订单表订单金额25141.5019164.301683.6015716.401956.2024580.507911.8019766.2012763.958233.5010320.87

注意: 在 SQL 语言中,对左外部联接和右外部联接的处理方法与其它联接类型不同。如果是通过 ODBC 访问数据库,则 Crystal Reports在 SQL 语句中使用 ODBC 语法。如果是直接连接到 SQL 数据库(不通过 ODBC),则 Crystal Reports 使用该数据库的固有语法。有关 SQL语句中的外部联接格式的更多信息,请参阅 Microsoft ODBC 文档或SQL 数据库文档。

链接表430

25.2.10.4 完全外部联接

完全外部联接是一个双向外部联接,您可以看到链接表中的所有记录。完全外部联接的结果集包括两个表中的链接字段值完全匹配的所有记录。主(左)表中链接字段值在查找表中没有匹配的每条记录也会各占一行,而查找(右)表中链接字段值在主表中没有匹配的每条记录也会各占一行。如果从“客户”表链接到“订单”表,则客户所下的每个订单在表中各占一行。找到的每个无法链接到客户的订单也各占一行,而找不到所下订单的每个客户也各占一行。客户表客户 ID525353575860626363646566

订单表订单 ID611214201619283214

订单表订单金额25141.5019164.301683.6015716.401956.2024580.507911.8019766.2012763.958233.50

2510320.87

25.2.10.5 未强制

如果选择该选项,则只有在 Select 语句明确需要时才会使用您创建的链接。用户可以基于选定的表创建报表而不受限制(也就是说,不被强制基于其他表)。这是默认选项。

25.2.10.6 强制自

选择该选项时,如果使用了链接的至表,则会强制使用链接。例如,如果使用“强制自”创建从表 A 至表 B 的链接,并且仅从表 B 中选择字段,则 Select 语句将仍然包括到表 A 的联接,原因是该联接被强制使用。反过来,如果只从具有相同联接条件的表 A 中进行选择,则不会导致强制使用至表 B 的联接。

注意: 有关自和至表的解释,请参阅 第7 页上的 “链接自和链接到”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

431Crystal Reports 用户指南

25.2.10.7 强制至

选择该选项时,如果使用了链接的自表,则会强制使用链接。例如,如果使用“强制至”创建了从表 A 至表 B 的链接,并且仅从表 A 中选择字段,则将强制使用至表 B 的联接,并且生成的 Select 语句将包括这两个表。

注意: 有关自和至表的解释,请参阅 第7 页上的 “链接自和链接到”。

25.2.10.8 强制两者

选择该选项时,无论使用了链接的自表还是至表,都会强制使用链接。

25.2.10.9 等于 [=] 链接

等于链接的结果集中包括两个表中的链接字段值完全匹配的所有记录。在下例中,“客户”表通过“客户 ID”字段链接到“订单”表。当程序在“订单”表中找到与“客户”表中的“客户 ID”匹配的“客户ID”时,将显示两个表中相应记录的信息。

SQL 使用下列语法描述等于链接:

SELECT 客户.捒突? IDí,

客户.‘客户姓名’,订单.‘订单金额’FROM ‘客户’客户,

‘订单’订单

WHERE 客户.客户 ID =

订单.客户 ID

该语句产生下列数据:客户表客户 ID52535357586062636364

客户表

客户姓名

Allez DistributionBG Mountain Inc.BG Mountain Inc.Hansen MTB Inc.

La Bomba de BicicletaMountain ToadSFB Inc.

Sierra Bicycle GroupSierra Bicycle GroupSierra Mountain

订单表订单金额25141.5019164.301683.6015716.401956.2024580.507911.8019766.2012763.958233.50

链接表432

25.2.10.10 大于 [>] 链接

大于链接的结果集包括主表中的链接字段值大于查找表中的链接字段值的所有记录。例如,公司可能需要比较其所有销售代表的薪金与其所有销售经理的薪金。公司的总经理想要确定没有任何销售代表的薪金高于任何经理。 考虑到这一点,可以使用大于链接,通过各表中的“薪金”字段将“销售代表”表链接到“经理”表:

SELECT 销售代表.捫諕,

销售代表.‘薪金’,经理.‘姓’,经理.‘薪金’

FROM 懴 鄞 頀 销售代表,

‘经理’经理

WHERE 销售代表.‘薪金’>

经理.‘薪金’

该 SQL 语句可能产生类似于下面这样的数据:

销售代表表姓DavolioDavolioDavolioDodsworthDodsworthDodsworthDodsworthDodsworthPatterson

销售代表表薪金$35,000.00$35,000.00$35,000.00$48,300.00$48,300.00$48,300.00$48,300.00$48,300.00$30,000.00

经理表姓FullerBrid

BuchananHellsternFullerBrid

BuchananMartinBuchanan

经理表薪金$32,000.00$30,000.00$29,500.00$45,000.00$32,000.00$30,000.00$29,500.00$35,000.00$29,500.00

在该表中,没有建立销售代表和销售经理之间的关系。由于所有经理的资历都高于所有销售代表,公司可能会发现有必要检查销售代表的薪金是否高于经理,并将其作为需要纠正的薪金问题的根据。

433Crystal Reports 用户指南

25.2.10.11 大于或等于 [>=] 链接

大于或等于链接的结果集包括主表中的链接字段值大于或等于查找表中的链接字段值的所有记录。下例除使用的是大于或等于链接外,其它方面都与大于联接的示例相同:

SELECT 销售代表.捫諕,

销售代表.‘薪金’,经理.‘姓’,经理.‘薪金’

FROM 懴 鄞 頀 销售代表,

‘经理’经理

WHERE 销售代表.‘薪金’>=

经理.‘薪金’

该语句可能产生类似于下面这样的数据:销售代表表姓

DavolioDavolioDavolioDavolioDodsworthDodsworthDodsworthDodsworthDodsworthPattersonPatterson

销售代表表薪金

$35,000.00$35,000.00$35,000.00$35,000.00$48,300.00$48,300.00$48,300.00$48,300.00$48,300.00$30,000.00$30,000.00

经理表姓FullerBrid

BuchananMartinHellsternFullerBrid

BuchananMartinBrid

Buchanan

经理表薪金

$32,000.00$30,000.00$29,500.00$35,000.00$45,000.00$32,000.00$30,000.00$29,500.00$35,000.00$30,000.00$29,500.00

25.2.10.12 小于 [<] 链接

小于链接的结果集包括主表中的链接字段值小于查找表中的链接字段值的所有记录。通过使用小于链接,可以按不同的指标比较销售代表和经理的薪金。每个表中的“薪金”字段同样再次被用作链接字段。但是,这次是在链接的“薪金”字段上使用小于链接从“经理”表链接到“销售代表”表:

SELECT 经理.‘姓’,

经理.‘薪金’,销售代表.‘姓’,销售代表.‘薪金’

链接表434

FROM ‘经理’经理

‘销售代表’销售代表WHERE 经理.‘薪金’<

销售代表.‘薪金’

该 SQL 语句产生的表与大于链接所产生的表稍有不同:经理表姓FullerFullerBridBridBuchananBuchananBuchananMartinHellstern

经理表薪金$32,000.00$32,000.00$30,000.00$30,000.00$29,500.00$29,500.00$29,500.00$35,000.00$45,000.00

销售代表表姓DavolioDodsworthDavolioDodsworthDavolioDodsworthPattersonDodsworthDodsworth

销售代表表薪金$35,000.00$48,300.00$35,000.00$48,300.00$35,000.00$48,300.00$30,000.00$48,300.00$48,300.00

25.2.10.13 小于或等于 [<=] 链接

小于或等于链接的结果集包括主表中的链接字段值小于或等于查找表中的链接字段值的所有记录。下例除使用的是小于或等于链接外,其它方面都与小于链接的示例相同:

SELECT 经理.‘姓’,

经理.‘薪金’,销售代表.‘姓’,销售代表.‘薪金’FROM ‘经理’经理

‘销售代表’销售代表WHERE 经理.‘薪金’<=

销售代表.‘薪金’

435Crystal Reports 用户指南

该 SQL 语句产生类似于下面这样的数据:经理表姓FullerFullerBridBridBridBuchananBuchananBuchananMartinMartinHellstern

经理表薪金$32,000.00$32,000.00$30,000.00$30,000.00$30,000.00$29,500.00$29,500.00$29,500.00$35,000.00$35,000.00$45,000.00

销售代表表姓DavolioDodsworthDavolioDodsworthPattersonDavolioDodsworthPattersonDavolioDodsworthDodsworth

销售代表表薪金$35,000.00$48,300.00$35,000.00$48,300.00$30,000.00$35,000.00$48,300.00$30,000.00$35,000.00$48,300.00$48,300.00

25.2.10.14 不等于 [!=] 链接

不等于链接的结果集包括主表中的链接字段值不等于查阅表中的链接字段值的所有记录。这种链接可用于在将表联接到其自身(自联接)时查找可能的项目组合。例如,公司可能有一个表列出其售出的所有产品。当他们决定进行一笔买卖,使客户买进一个产品,并以半价再买进一个产品,这时可能需要一个列表以包括所有可能的两个产品组合:

SELECT 产品1.‘产品名称’,

产品2.‘产品名称’,FROM ‘产品’产品1

‘产品’产品2

WHERE 产品1.‘产品名称’!=

产品2.‘产品名称’

在该 SQL 语句中,“产品”表被打开了两次。第一次,为其提供了别名“产品 1”。第二次,为其提供了别名“产品 2”。然后通过“产品名称”字段从“产品 1”链接到“产品 2”。虽是同一个表,但由于使用不同的别名将其打开了两次,Crystal Reports 认为它是两个不同的

水晶报表Crystal Reports培训教程 35_水晶报表教程

使用 SQL 和 SQL 数据库436

表。使用不等于链接通过“产品名称”字段来链接表。结果,每个产品与提供的每个其它产品配对,而不与其自身配对:

产品 1

产品名称

Xtreme Adult Helmet

Xtreme Adult Helmet

Xtreme Adult Helmet

Xtreme Mtn Lock

Xtreme Mtn Lock

Xtreme Mtn Lock

InFlux Lycra Glove

InFlux Lycra Glove

InFlux Lycra Glove

Roadster Micro Mtn Saddle

Roadster Micro Mtn Saddle

Roadster Micro Mtn Saddle产品 2产品名称Xtreme Mtn LockInFlux Lycra GloveRoadster Micro Mtn SaddleXtreme Adult HelmetInFlux Lycra GloveRoadster Micro Mtn SaddleXtreme Adult HelmetXtreme Mtn LockRoadster Micro Mtn SaddleXtreme Adult HelmetXtreme Mtn LockInFlux Lycra Glove

注意: 符号 != 用于表示不等于链接,但条件是所访问数据的 ODBC数据源驱动程序支持该符号。如果不支持,将使用默认符号 <> 表示不等于链接。

25.3使用 SQL 和 SQL 数据库

最普遍和最强大的数据库格式或许就是基于结构化查询语言 (SQL)的 DBMS 应用程序。SQL 数据库通常在客户端/服务器网络构架上工作,提供 SQL Server 以创建、存储和操作数据库文件、表和记录,SQL 客户端界面使工作站用户不仅能设计和处理数据库文件,而且还能检索有用和有意义的数据以用于其日常工作。

25.3.1什么是 SQL?

SQL 是为在计算机网络上组织、管理、开发和查询大型关系数据库而设计的查询语言。SQL 是信息科学 (IS) 和信息管理行业中的一种常用语言。该语言已被美国国家标准协会 (ANSI) 和国际标准化组织 (ISO) 确定为标准,这意味着在软件公司生产的任何 SQL 版本中必须有特定的功能,才能将那个版本正式称为 SQL。许多软件厂商为了改进该语言并吸引客户,在其 SQL 版本中加入了更多高级功能,但是必须保持由 ANSI 和ISO 建立的原始标准。

437Crystal Reports 用户指南

SQL 不是真正的计算机语言。它不能用于创建独立的计算机应用程序和操作系统。SQL 常被称为子语言,因为它可以用于其它语言或应用程序之中。最重要的是,SQL 语言的目的是专用于处理关系数据库。

SQL 语言的语法建立在一个将 SQL 语句发送到 SQL 数据库服务器的系统上。每个语句是执行数据库操作的请求,如创建数据库文件,将表和字段添加到数据库,将记录添加到表,检索数据库中的数据等。SQL 服务器分析 SQL 语句并执行所要求的操作。例如,如果语句是对数据的请求,则服务器收集数据并将其返回到客户端工作站供用户查看。

SQL 查询是专门为从一个或多个 SQL 数据库中请求数据而设计的SQL 语句。有些 SQL 应用程序要求使用文本编辑器直接键入 SQL 查询,而有些则提供图形用户界面引导您完成查询 SQL 数据库的过程。在后一种情况下,应用程序必须基于所提供的信息创建 SQL 语句。该语句实际上就是 SQL 查询,并且是用于请求数据的 SQL 查询。Crystal Reports同时属于上述两类遵从 SQL 标准的应用程序。

25.3.1.1 客户端/服务器构架

SQL DBMS 应用程序的最强大功能之一是能够有效地使用客户端/服务

器网络构架。

使用 SQL 和 SQL 数据库438

简单的网络结构由一个或多个网络服务器组成,这些网络服务器提供公用位置,使网络上的所有用户都可以在该位置获取数据和应用程序。许多网络服务器还提供网络安全,自动执行诸如备份数据这样的服务,并监视网络资源以便为网络上的所有工作站提供最好的服务。由于网络服务器的高处理要求,用作服务器的计算机常常是可以包含多个处理器、多个硬盘和多个 CD-ROM 驱动器的高性能且速度快的机器。

网络客户端是一个由一个或多个公司雇员经常使用的计算机工作站。用户在客户端上工作并通过网络访问服务器中的数据和应用程序。需要长时间和大量资源的大型处理作业由服务器完成,完成的结果被发送回客户端。这使用户得以更有效地进行时间管理,因为本地工作站的处理时间较短,使用户可以获得更多的“可用”时间。

许多现代计算机应用程序都是基于这种客户端/服务器构架。一个简单的客户端/服务器应用程序由两部分组成:位于网络服务器计算机上的基于服务器的应用程序,以及位于用户工作站上的基于客户端的应用程序。服务器应用程序利用网络服务器的能力和资源处理复杂、耗时或对能力有严格要求的进程,而客户端应用程序提供易于使用的用户界面,旨在有助于采用比其它方法更快、更好的方式完成工作。

客户端/服务器应用程序通常可用于一定数量的安装,具体取决于应用程序的成本。每个安装代表一个客户端工作站,或代表可连接到客户端/服务器软件的一个客户端用户(取决于软件厂商的规定)。软件厂商经常销售其应用程序的附加安装,每个安装都提供一整套客户端应用软件。

不要混淆服务器应用程序和网络服务器计算机。二者都常被称为服务器。但是,服务器应用程序驻留在网络服务器上,利用服务器的硬件和操作系统功能,而网络服务器是一台物理上的机器,网络客户端通过电缆

或其它一些连接设备连接到该机器上。

439Crystal Reports 用户指南

25.3.2SQL DBMS

SQL 数据库管理系统是常见的客户端/服务器软件包示例。标准的SQL DBMS 包括一个 SQL 服务器应用程序,负责完成所有生成和处理数据库及数据库数据的实际工作。DBMS 还包括至少一套 SQL 客户端软件(一个安装),可以通过网络连接到 SQL 服务器。SQL 客户端软件通常至少由一个 SQL 语句编辑器(可用于编写和执行 SQL 语句)和一个基础通讯层(用于处理网络上的 SQL 服务器应用程序)组成。

当执行 SQL 语句时,客户端软件将语句传递到通讯层,通讯层再通过网络将语句发送到服务器软件。SQL 服务器分析语句,执行请求的操作,然后将请求的任何数据返回给客户端软件。如果服务器返回任何数据,客户端软件会将数据显示给用户。

25.3.2.1 存储过程

除常用的关系数据库属性(表、字段、记录等)外,许多 SQL DBMS系统还支持存储过程。存储过程是由一个或多个 SQL 语句组成的编译SQL 程序。存储过程可用于定义能反复使用的 SQL 查询。此外,可以在存储过程中定义变量、条件表达式和变量参数,以便在执行过程之前提示您提供信息。

由于存储过程可以返回结果集,所以当它们执行时可提供特定的数据集。事实上,Crystal Reports 使您得以依据 SQL 数据库执行存储过程,并使用返回的数据设计报表。如果将存储过程设计为提示用户输入其查询所基于的信息,则当选择用于报表的存储过程时,Crystal Reports 将

提示您输入那些信息。

使用 SQL 和 SQL 数据库440

25.3.3Crystal Reports 如何使用 SQL?

当您连接到 SQL 数据库时,Crystal Reports 充当 SQL 客户端应用程序,通过网络连接到 SQL 服务器。

当您设计访问 SQL 数据的报表时,Crystal Reports 将生成 SQL 查询。在“数据库”菜单下选择“显示 SQL 查询”可以看到该查询。

该 SQL 查询代表由 Crystal Reports 发送到 SQL 服务器的 SQL 语句。通过尽可能地从报表设计到 SQL 查询进行解释,Crystal Reports可以将许多报表处理工作卸载到服务器计算机上进行。Crystal Reports并不在整个数据库中仔细查找所请求的数据,而是让服务器仔细查找并获得一个小得多的数据集,从而减少工作站为完成报表而必须使用的时间和资源。

25.3.4SQL 语言

由于 Crystal Reports 使用 SQL 语言通过 ODBC 访问客户端/服务器数据库,因此可以通过了解所使用的一些 SQL 子句(命令),更好地了解报表生成过程:

25.3.4.1 SELECT

SELECT 子句指明从数据库表中检索的特定数据项。检索的项可以是数据库字段(列)中的值,也可以是在收集数据时执行的计算结果。例如:SELECT

TABLEA.'CUSTNAME'

TABLEA.'STATE'

25.3.4.2 DISTINCT

DISTINCT 子句强制查询只检索唯一(非重复)数据集。当使用DISTINCT 子句时,一个结果行只被检索一次。可以修改前面那个 SELECT语句以使用 DISTINCT 子句:

SELECT DISTINCT

TABLEA.'CUSTNAME'

TABLEA.'STATE'

水晶报表Crystal Reports培训教程 35_水晶报表教程

441Crystal Reports 用户指南

25.3.4.3 FROM

FROM 子句指明 SELECT 子句中指定的数据库字段的源。FROM 列出实际的数据库表,该表中的字段和记录包含所请求的数据。由 CrystalReports 生成的 FROM 子句在每个表的名称前加上它在报表中用于标识表的别名。下例说明与 SELECT 子句一起使用的 FROM 子句:

SELECT

TABLEA.'CUSTNAME'

TABLEA.'STATE'

FROM

'TABLEA'TABLEA

25.3.4.4 WHERE

?

?WHERE 子句有两个目的:指定记录选择条件。显示两个数据库表如何联接。

当用 WHERE 指定记录选择条件时,它包括一个搜索条件,以便确定将要检索的记录(数据行)。例如:

SELECT

MYTABLE.'SALESPERSON'

MYTABLE.'SALESTOTAL'

FROM

'MYTABLE' MYTABLE

WHERE

MYTABLE.'SALESTOTAL'< 10000.00

当用 WHERE 指定两个表如何链接时,在两个表名之间有一个 SQL 联接运算符。请参阅 第15 页上的 “链接选项”。

下面是联接两个表的 WHERE 子句的示例:

SELECT

CUSTOMER.'CUST_ID'

CUSTOMER.'CUST_NAME'

ORDERS.'AMOUNT'

FROM

'CUSTOMER' CUSTOMER,

'RDERS' ORDERS

WHERE

CUSTOMER.'CUST_ID' = ORDERS.'CUST_ID'

服务器端处理442

25.3.4.5 ORDER BY

ORDER BY 子句指定按照特定字段中的值存储检索的数据库记录。如果不使用 ORDER BY 子句,则程序按照记录出现在原始数据库中的顺序检索记录。如果在使用 ORDER BY 子句之后指定一个以上的字段,则程序按照指定的第一个字段中的值排序记录,然后在该排序中,程序按照指定的第二个字段中的值排序记录,依此类推。下面的 SQL 语句使用 ORDER BY 子句:SELECT

MYTABLE.'COMPANY'

MYTABLE.'CITY'

MYTABLE.'TATE'

FROM

'MYTABLE' MYTABLE

ORDER BY

MYTABLE.'STATE' ASC,

MYTABLE.'CITY' ASC

注意: ASC 表示按升序排序字段中的值,而不是按降序 (DESC) 排序。升序按字母 A 到 Z 和数字 0 到 9 进行排序。

25.3.4.6 GROUP BY

GROUP BY 子句检索汇总数据集。GROUP BY 不是检索数据本身,而是将数据分组并用 SQL 聚集函数汇总每组。服务器只将每组的汇总信息返回给 Crystal Reports。

例如:

SELECT

MYTABLE.'STATE'

MYTABLE.'ZIPCODE'

SUM (MYTABLE.'SALES'

FROM

'MYTABLE' MYTABLE

GROUP BY

MYTABLE.'STATE'

MYTABLE.'ZIPCODE'

25.4服务器端处理

服务器端处理使您得以建立报表,以在服务器上执行多数处理并只将有关详细信息推入您的计算机。

?

?

?服务器端处理有许多好处:与服务器的连接时间更短。处理计算机上的报表所需的内存更少。从服务器到客户端的传输时间更短。

443Crystal Reports 用户指南

服务器端处理是这样运作的:通过使用 SQL 传递技术将 SQL 语句发送到数据库服务器并检索初始数据集,Crystal Reports 将很多数据检索和排序工作卸载到服务器系统上,从而释放了本地内存和资源以用于更重要的任务。这就是为什么服务器端处理只处理已排序和分组的报表,如果报表没有排序和分组(例如,如果是一个简单的列表报表),则无法推入服务器进行处理。还应注意服务器端处理只处理基于 SQL 数据源的报表。

?

?注意: 该说明仅适用于将分组和排序卸载到服务器的情况。将分组推入到服务器进行处理时,所需的临时数据库可能会使用大量服务器资源。

请记住:若要在服务器上执行分组,报表必须符合下列条件:

启用了“在服务器上执行分组”选项(位于“选项”对话框中)。有关更多信息,请参阅 第33 页上的 “启用服务器端处理”。

报表使用某种分组形式。

报表至少是部分隐藏的(至少“详细资料”节一定是隐藏的)。由于服务器将处理那些隐藏的节,所以报表的可视部分越大,必须在客户端进行的处理量就越大。如果显示“详细资料”节,将无法进行服务器端处理。

有些情况下,必须在客户端处理公式字段。如果分组基于公式字段,或者如果公式用于汇总字段中,则必须将所有记录都传输到客户端后才能对公式求值。这将增加运行报表所需的时间量。因此,可能需要使用 SQL 表达式作为公式的替代物。

注意:记录选定公式是个例外,它可以被推入服务器。

为了在服务器上处理报表,出现在报表中的任何运行总计必须基于汇总字段(因为运行总计所需的数据将被拉到客户端)。

为了在服务器上处理报表,报表必须仅包含以下类型的汇总字段:“求和”、“最大”、“最小”、“计数”。

报表不包含指定的值分组。

注意:

当深化报表中的隐藏节时,随着在服务器上进行的处理,将自动启动与服务器的连接。如果断开从客户端到服务器的连接(例如,如果将报表下载到便携式电脑中并从远程位置进行处理),则对数据的深化将因数据库不可用而产生错误。

如果使用“用报表保存数据”选项保存已在服务器上部分处理的报表,程序将只保存那些已传输到客户端的记录。换言之,如果已深化了某个隐藏节,并且在 Crystal Reports 中有用于那些数据的选项卡(表示已传输那些数据),则将那些记录与报表一起保存。?????????

服务器端处理444

25.4.1服务器端分组如何影响 SQL 查询

当报表将其大部分处理任务推入服务器时,必然会导致 SQL 查询被更改。因此,当启用“在服务器上执行分组”选项时,服务器端处理的各方面将以不同的方式修改 SQL 语句。

?如果选择“为提高速度而使用索引或服务器”(在“报表选项”对话

框中),则只要可能,程序便将 ORDER BY 子句添加到 SQL 语句和用于记录选定公式的 WHERE 子句。

?如果对 DBMS 中的可链接数据类型进行分组,则程序将 GROUP BY 子句

添加到 SQL 语句。程序使用 GROUP BY 子句在服务器上执行分组。?如果对可链接的数据类型进行汇总,则程序将汇总字段添加到 SQL

语句的 SELECT 子句。

?如果对可链接的数据类型进行分组,则程序将 WHERE 子句添加到

SQL 语句。

?如果按降序对可链接的数据类型进行分组,则程序将 ORDER BY 子句

添加到 SQL 语句。

?

?语句还因选项卡而异:如果正在“预览”选项卡中工作,则语句包括 GROUP BY 子句以及报表推入服务器的任何合计。如果正在进行深化,则语句因基础数据和深化级别而异。用于每个深

化的 WHERE 条件都不同。而且,如果对详细资料进行深化,语句将不包括 GROUP BY 子句(因为在该深化选项卡上不再有任何组)。

若要查看活动选项卡的当前 SQL 语句,请从“数据库”菜单中选择“显示 SQL 查询”命令。出现“显示 SQL 查询”对话框,其中显示有SQL 语句。

注意: 可以使用 公式工作室 对要在服务器上执行的 SQL 表达式进行编辑。

25.4.1.1 启用服务器端处理

1

2在“文件”菜单中,单击“报表选项”。选择“报表选项”对话框中的“在服务器上执行分组”。

如果没有选择“为提高速度而使用索引或服务器”,则该复选框是不活动的。

单击“确定”。3

注意: 还可以根据需要选择或取消选择“数据库”菜单中的“在服务器上执行分组”命令,以此快速启用或禁用该选项。如果没有选择“报表选项”对话框中的“为提高速度而使用索引或服务器”,则该命令是不活动的。

445Crystal Reports 用户指南

25.5映射数据库字段

“映射字段”对话框使您得以在更改了数据库结构时,或基于来自另一个报表(该报表基于具有相同表和字段结构的其它一些数据库)模板的数据库创建了报表时,将报表字段链接到相应的数据库字段。这样,该对话框就帮助确保以活动数据库的当前版本打印报表。

第一次创建报表时,报表按创建时的状态从数据库中提取字段。如果在创建报表后更改数据库的结构,程序需要调整报表使其适应新的结构。

25.5.1关于映射字段对话框

?

?

?

?“映射字段”对话框包含四个框:左上部的框显示所有取消映射的报表字段(程序在活动数据库中检测这些字段的更改)的名称。默认情况下选择上部的名称。右上部的框显示取消映射的数据库字段(程序在这些数据库字段中检测更改)的名称。由于默认情况下选择“匹配类型”框,因此该框只显示与在左上部框中选定的取消映射报表字段具有相同类型的取消映射数据库字段名。若要显示所有取消映射的数据库字段而不考虑类型,请清除“匹配类型”框。左下部的框显示映射的报表字段名。当映射上部框中的字段时,字段出现在下部的框中。右下部的框显示映射的数据库字段名。当映射上部框中的字段时,字

段出现在下部的框中。

对于更改的每个数据库字段,请突出显示上部节中的报表字段和数据库字段,并单击“映射”。字段名从上部的框移到下部的框中。

不必重新映射每个报表字段。例如,如果删除数据库字段,则不必重新映射相应的报表字段,因为报表中不需要该字段。可以不重新映射左上部框中列出的每个字段,即单击“确定”按钮关闭该对话框。

在有些情况下,可能想取消映射或取消链接已映射的报表和数据库字段。例如,可能错误地映射了字段,或想将报表字段映射到已映射的数据库字段。在这些情况下,可以选择下部框中的报表字段(程序随后自动选择数据库字段)并单击“取消映射”。该字段名将从下部的框移到上部的框中。

注意: 当您关闭“映射字段”对话框时,Crystal Reports 不会自动刷新报表数据。若要刷新数据,请单击“标准”工具栏上的“刷新”按钮。

水晶报表Crystal Reports培训教程 35_水晶报表教程

映射数据库字段446

25.5.2重新映射进程

如果更改了活动的数据库字段,而这要求重新映射相应的报表字段,可从“数据库”菜单中选择下列命令之一以显示“映射字段”对话框:?验证数据库

?首次刷新时验证

?设置数据源位置

注意: 还有一个名为“数据库驱动程序升级后验证”的全局选项(在“选项”对话框的“数据库”选项卡上设置)可以使“映射字段”对话框在更新数据库驱动程序后第一次刷新报表数据时出现。

可以对特定的函数使用这些命令中的每一个;但是如果程序检测到报表中的字段名和数据库中的字段名不匹配,这些命令中的任何一个都将打开“映射字段”对话框。为了检测可能的不匹配,程序根据数据库中的字段名检查报表中的每个字段名。如果其中的一个字段名与数据库中的任何字段名不匹配,则会出现“映射字段”对话框。

注意: 从报表中删除处于取消映射状态的报表字段。

25.5.2.1 使用验证数据库进程

当从“数据库”菜单中选择“验证数据库”时,程序将检查活动数据库和报表。如果检测到了更改,必须使报表适应更改以防止错误。

当程序在数据库中检测到下列类型的更改时,将显示“映射字段”对话框:

?报表中使用的数据库字段名已更改。

?数据库已从 PC 数据源向上优化为 SQL 数据源。

有关“映射字段”对话框的教程,请参阅 第36 页上的 “重新映射已更改的数据库字段”。如果 Crystal Reports 检测到下列任何更改,将自动修改报表(并且不会显示“映射字段”对话框):

?已将字段添加到数据库。

?已从数据库中删除报表中没有使用的字段。

?数据库中的字段位置已更改。

?数据库字段的数据类型已更改。

25.5.2.2 使用“首次刷新时验证”进程

您在每个会话中首次刷新报表数据时,“首次刷新时验证”将触发“验证数据库”命令:

?如果“首次刷新时验证”旁边有一个选中标记,则该选项处于启用状

态(默认情况下,新报表的该选项处于启用状态)。

?如果在它旁边没有选中标记,则该选项是不活动的。

447Crystal Reports 用户指南

25.5.2.3 使用“设置数据源位置”进程

当从“数据库”菜单中选择“设置数据源位置”命令并为活动数据库指定了一个新位置时,程序将检查数据库是否有更改。

当检测到数据库结构中的下列任何更改时,“设置数据源位置”将显示“映射字段”对话框:

?数据库字段已删除。

?数据库字段已重命名。

?数据库是全新的。

注意: 只有当数据库有不同的名称或数据库名已更改时,程序才检查这些更改。如果数据库有相同的名称,则不出现“映射字段”对话框,当设置完位置时需要验证数据库。有关更多信息,请参阅 第35 页上的“使用验证数据库进程”。

25.5.3重新映射已更改的数据库字段

如果活动数据库中的现有报表字段已更改,请使用“映射字段”对话框重新映射它们。

X重新映射已更改的数据库字段

1当报表在设计选项卡中为活动时,从数据库菜单中选择验证数据库。

出现“验证数据库”消息框。

?如果程序在活动数据库中未检测到任何更改,该消息框将显示以下

消息:“数据库是最新的”。在这种情况下,单击“确定”以返回。?如果程序在活动数据库中检测到了更改,该消息框将显示以下消

息:“数据库文件 [“表名”] 已更改。继续修复该报表!”

单击“确定”。

如果程序检测到在活动数据库中有字段名已更改,则出现“映射字段”对话框。

注意:程序自动使报表适应数据库内其它数据的更改(字段数、字段位置、数据类型等)。不必非要重新映射已更改的字段。

在左上部的框中,突出显示要重新映射的第一个报表字段。

在右上部的框中,突出显示要将选定的报表字段重新映射到的取消映射数据库字段。

单击“映射”。

突出显示的报表和数据库字段不再出现在上部的框中。相反,它们出现在相应的下部框中。2345

已保存数据的索引448

6对要重新映射的每个取消映射字段重复步骤 3 至 5。

注意:当退出该对话框时,如果左上部的框中还剩有报表字段名,则程序将它们从报表中删除。

单击“确定”。

程序将报表字段重新映射到已更改的数据库字段。7

25.6已保存数据的索引

通过对已保存的数据进行索引,可以提高 Crystal 报表的性能。如果在特定字段上创建“已保存数据的索引”,Crystal Reports 可以更有效地在该字段上进行筛选。特别是,如果对记录选择公式中所引用的字段进行索引,将使性能得到大幅提高(特别是在大型报表中)。

注意: 如果报表的记录选择所返回的记录数少于 10,000 条,“已保存数据的索引”在这些报表中的效果基本上不明显。

将 Crystal 报表安排为通过 BusinessObjects Enterprise 查看时,“已保存数据的索引”特别有用。例如,您希望向用户提供有关北美地区年度销售情况的信息,因此创建了报表。您还希望销售代表可以查看他们各自所在区域的数字,而看不到其它区域的数字,于是就创建了选定公式以限制该报表。当您在 BusinessObjects Enterprise 中计划该报表后,销售代表查看其实例时,他们只能看到自己区域的数字。如果同时创建了“已保存数据的索引”,销售代表无须等待所有记录载入即可看到他们的记录。

换言之,“已保存数据的索引”使用户能够访问报表数据的子集。索引是在用户查看时通过在 BusinessObjects Enterprise 中应用选定公式而被调用的(也就是说,选定公式将筛选条件应用于索引字段)。可以通过在报表查看器中或通过报表处理扩展进行设置来应用这些选定公式。(有关报表处理扩展的信息,请参阅《BusinessObjects EnterpriseCOM SDK 指南》。)

25.6.1报表索引如何工作

对于非索引报表,Crystal Reports 必须检查每条记录才能找到符合指定条件的值。例如,当用户请求已保存数据的某个特定子集时,或者当用户请求报表但只有访问某些记录的权限时,Crystal Reports 将通过检查每条记录中是否有相应的值来对已保存的数据进行筛选。

但是,如果在一个和多个字段上对已保存数据进行了索引,CrystalReports 则已经知道哪些记录包含特定值。因此,当用户从索引字段访问已保存的数据的特定子集时,Crystal Reports 可以更高效地找到并格式化相应的记录。

449Crystal Reports 用户指南

创建了“已保存数据的索引”后,它们将完全在后台工作。用户不知道已保存数据已经过索引,而且报表的分组、排序或格式化也不会有任何更改。索引只是帮助 Crystal Reports 快速找到特定记录,而不必遍历所有已保存的数据。

25.6.2使用“已保存数据的索引”的考虑因素

?

?

?

?在决定使用“已保存数据的索引”之前,应考虑以下事项:索引在报表包含大型数据集的方案中效果最好,但一次只能查看很小的数据子集。大型复杂报表可能会使 Crystal Reports 报表引擎过载。例如,与不包含索引的报表文件相比,创建选定公式返回 90% 的报表数据的大型报表将可能占用更多的内存和磁盘空间。在这种情况下,报表处理速度也较慢。索引需要磁盘空间,该磁盘空间加起来可能超过数据本身需要的空间。您以报表文件增大为代价换来了选定公式应用速度的提高。Crystal Page 和 RAS 服务器在应用选定公式时为不同用户使用的

缓存量方面有限制。因此,当一个用户查看包含选定公式的报表文件时,Page Server 会占用一定数量的 RAM,添加更多的用户可能会导致 Page Server 使用更多的 RAM。

25.6.3选择正确的字段进行索引

这些准则说明对已保存数据进行索引的最佳方法,以及在进行索引时应该避免的问题:

?应对用户经常添加到记录选择公式中的字段进行索引。

?应对报表的记录选择公式所引用的字段进行索引。

?不要对报表中的所有字段进行索引。

这样做会导致处理时间更长。最好只对满足上述条件的字段进行索引。如果所有字段都满足这些条件,应该确定这些字段的优先顺序,并且只对其中一些进行索引。

?不要对只包含唯一值的字段进行索引。

例如,不要对“去年销售额”等字段进行索引,这些字段的值可能彼此不同。如果这样做,将为该字段中的每个值分别创建一个索引。X对已保存数据进行索引

1

2在 Crystal Reports 中打开您的报表。在“报表”菜单上,单击“报表突发索引”。

Crystal Reports 中的 Unicode 支持450

3

4

5在“已保存数据的索引”对话框中,选择要在已保存数据中进行索引的字段。单击“确定”返回 Crystal Reports。如果要立即创建索引,刷新并保存该报表。

25.7Crystal Reports 中的 Unicode 支持

Crystal Reports 支持 Unicode,方法是在访问非 Unicode 数据库中的数据时对数据进行转换(此数据转换发生在 Crystal Reports 中;数据库中的数据不受影响)。转换是通过非 Unicode 数据的标识符和计算机的区域设置(通常可在“控制面板”的“区域设置”中找到)实现的。要利用 Crystal Reports 中的 Unicode 支持,请确保每台使用Crystal Reports 的计算机上的区域设置正确无误。

25.8有关更多信息

本章仅涉及数据库访问、关系数据库和 SQL 的重要方面的部分内容。如果有兴趣了解更多的数据库主题,请参阅随 DBMS 应用程序提供的文档。

注意: 另外,市面上有大量深入讨论数据库理论和设计的书籍。请在当地书店的计算机类图书中查找。

水晶报表Crystal Reports培训教程 35_水晶报表教程

附录A 报表处理模型

A.1概述

Crystal Reports 使用三次传递建立报表方法来生成报表。下面部分

描述在此过程中的每一步所发生的情况。若要参阅可视演示文稿,请查阅本附录末尾的流程图。

A.1.1什么是“传递”?

传递是 Crystal Reports 每次读取或处理数据时所使用的过程。根

据报表的复杂性,Crystal Reports 可将数据传递 1 次、2 次或 3 次。这种功能使得可以处理复杂的报表和公式。

A.1.2第 1 次预传递

预览报表时,被求值的第一批元素为“常量”公式。常量公式是含有

整个报表的常量值的公式。它们对每个记录都是一样的。例如,100* 30是常量公式。常量公式在打印生成过程开始时求值,以后不再求值。该过程称为“BeforeReadingRecords”。如果将常量公式字段(即 100*30)放到“详细资料”节中,则对于所显示的每个记录,结果都是 3000。

A.1.3第 1 次传递

在“BeforeReadingRecords”过程发生后,Crystal Reports 开始读

取数据库记录。在记录读取过程中,将发生下列事项:

?检索记录。在这一步中,将可能的记录选定和排序下推到数据库。?对重复性公式求值。这些公式是那些包含数据库字段、但不包含引用

小计或摘要信息的公式。该求值时间称为“WhileReadingRecords”。

包含对小计或汇总信息的引用的公式在第 2 次传递中处理。

?在本地应用记录选定。如果记录选定太复杂,以致不能下推到数据

库,Crystal Reports 将在这一步中应用该记录选定。

?排序、分组和总计。在这一步中,Crystal Reports 对记录进行排

序、分组,然后计算每组所需的小计和汇总。

452Crystal Reports 用户指南

?

?交叉表、图表和地图生成。在第 1 次传递中只生成完全基于数据库字段和反复性公式的交叉表、图表和地图。如果这些对象包含运行总计和/或 PrintTime 公式,它们将在第 2 次传递中生成。存储保存的数据。在完成总计过程后,所有记录和总计都作为临时文

件存储在内存中。在所有后续处理过程中,Crystal Reports 不会再

次读取数据库,而是使用这些保存的数据。

A.1.4第 2 次预传递

在第 2 次预传递过程中,Crystal Reports 将报表中的组按“最前

N 个/最后 N 个”或“层次分组”排序。Crystal Reports 在该过程中

不读取记录,而是只查看来自第 1 次传递的组实例,并根据需要取“最

前 N 个”排序,或者根据指定的“层次分组”设置对组排序。

A.1.5第 2 次传递

Crystal Reports 进入第 2 次数据传递以格式化页面。根据要求格

式化页面。这表示直到用户发出请求时,或为满足第 3 次传递的总页数

要求,Crystal Reports 才格式化页面。

?

?

?

?

?

?

?在页面格式化过程中,Crystal Reports 进行下列工作:组选定公式运行总计。计算标记为“WhilePrinting Records”的公式。它们是包含对小计或汇总信息的引用的公式,也称为“PrintTime”公式。该求值时间称为“WhilePrinting Records”。交叉表、图表和地图。包含运行总计和/或 PrintTime 公式的交叉表、图表和地图以及基于交叉表的图表在第 2 次传递中生成。OLAP 网格。子报表。根据要求生成页。

注意: 如果报表有组选定公式,小计、总计和汇总可能会显得不正

确。之所以会出现这种情况,是因为总计和汇总在第 1 次传递期间计

算,但组选定公式会在第 2 次传递中再次过滤数据。在包含组选定公式

的报表中,可以用运行总计字段代替汇总来计算报表数据的总计。

A.1.6第 3 次传递

在第 3 次、也是最后一次传递中决定总页数。这一步适用于使用总页

数或“第 N 页,共 M 页”等特殊字段的报表。

概述453

A.1.7多次传递建立报表流程图

注意: 虽然子报表在流程图的第 2 次传递中出现,但可以使用“按

需要显示子报表”,以确保主报表仍然是一次传递报表。对于“按需要

显示子报表”,Crystal Reports 仍然需要第二次传递数据;但是,这一

传递到您深化子报表时才会开始。因此,您可以使用“按需要显示子报

表”来改善包含子报表的报表的性能。

附录B Crystal Reports错误消息

B.1Drive:\filename.extension

无法打开此文档。它似乎不是 Crystal Reports 文档。

上下文

当试图打开不具有 RPT 扩展名的 Crystal 报表文件时出现此错误消息。

原因

由于报表已损坏,因此出现此错误。

解决方案

必须使用报表的备份副本来代替损坏的副本。

B.2Drive:\test.rpt

无法打开此文档。它似乎不是 Crystal Report 文档。

文档具有预期的扩展名 (RPT),但似乎已损坏。如果该报表以前能打

开,请尝试用不同版本的 Crystal Reports 来打开它;如果打不开,请与管理员联系。

上下文

当试图打开具有 RPT 扩展名的 Crystal 报表文件时出现此错误消息。

原因

由于报表已损坏,因此出现此错误。

解决方案

必须使用报表的备份副本来代替损坏的副本。

455Crystal Reports 用户指南

B.3加载数据库连接器失败

原因

处理报表的计算机上没有数据库连接器。

处理报表的计算机上没有数据库连接器所需的数据库客户端软件。

上下文

在刷新或预览不包含已保存数据的 Crystal 报表时将出现此错误消息。

解决方案

确保在可运行报表的所有计算机上安装报表所用的数据库连接器。

确保在可运行报表的所有计算机上安装数据库连接器所需的必备数

据库客户端软件,并将其添加到 PATH 系统环境变量中。

B.4未能打开该连接。详细资料: [数据库厂商代码: <厂商代号>]。

原因

?

?

?处理报表的计算机上没有报表所需的数据源或错误地配置了该数据源。报表所需的数据库服务器不可用。处理报表的计算机上安装了数据库客户端但配置不正确。例如,DB2数据库别名、Oracle tnsnames 项或 Sybase DSEDIT 项缺少或配置

不正确。

上下文

在刷新或预览不包含已保存数据的 Crystal 报表时将出现此错误消息。

解决方案

?

?请确保可运行报表的所有计算机上具有报表所需的数据源并正确地配置了该数据源。例如,存在 ODBC 数据源或 JNDI 数据源,并且可通过客户端测试工具证明连接正常。请确保可运行报表的所有计算机上正在运行报表所需的数据库服务

器,并且可通过客户端测试工具证明连接正常。

水晶报表Crystal Reports培训教程 35_水晶报表教程

检索数据库中的数据失败。详细资料: [数据库厂商代码: <厂商代号>]。456

B.5检索数据库中的数据失败。详细资料: [数据库厂商代码: <厂商代号>]。

上下文

在刷新或预览不包含已保存数据的 Crystal 报表时将出现此错误消息。

原因

无法执行发送给服务器的报表 SQL 查询,因为在处理查询后数据库

服务器返回了一个错误。例如,缺少报表所需的字段/表/过程,或者查询包含语法错误。

解决方案

请确保报表使用正确的连接信息。例如,数据源名称、服务器名、数

据库名和用户名都正确。

在数据库客户端测试工具中,请确保存在报表所用的字段、表和过

程,并确保可依据它们来执行 SQL 查询。

在 Crystal Reports Designer 中,验证 SQL 查询(如“数据库”

菜单上的“显示 SQL 查询”选项所示)不包含语法错误。

如果 Crystal Reports 中显示的 SQL 查询有效,请通过数据库客户

端测试工具执行相同的 SQL 查询。

附录C 创建可访问报表

C.1关于辅助功能

在为组织中和世界上的广大读者创建 Crystal 报表时,需要考虑读者的不同需求。报表设计者通常针对不同的语言、国家/地区、作业任务或工作组创建报表,但考虑用户的辅助功能需求也很重要。

报表用户可能会在身体、感官或认知方面存在限制,并影响到访问Web 的能力。他们可能看不到、动不了或听不到,或者可能视力较差或行动不方便。一些人有诵读障碍、色盲或癫痫症;另一些人在阅读或理解文字上有困难。他们可能同时存在不同程度的多种残障或障碍。

残障人士经常会用到辅助技术:帮助人们执行他们无法执行的任务的产品或技术。辅助技术包括辅助性软件程序,如屏幕读取器(将文本转换为语音输出)、屏幕放大镜和语音识别软件。残障人士可能还会使用特殊的浏览器,仅凭文字或语音即可进行导航。他们可能会使用一些辅助设备,如可刷新的盲文显示器或使用“呼吸式”开关或“视线追踪”技术的替代键盘。

为了满足残障人士阅读报表的需求,在设计报表时应尽可能多地应用辅助技术。

尽管潜在的辅助功能问题有很多,但是,可以使用本章中提供的技术来创建人人皆宜的报表。

C.1.1可访问报表的好处

随着越来越多的企业和政府部门负责人采纳新的向残障人士传送Web 内容的标准,可访问设计对于信息管理和发布显得日益重要。?

?可访问设计具有很多好处:可访问报表可方便每个人使用。 很多辅助功能准则提高了报表的可用性。可访问报表必须提供合乎逻辑和前后一致的导航。报表内容必须清楚明了,易于理解。可访问报表能与多种新老技术更好地兼容。

可访问内容更易于导出为简单的格式,从而可以与移动电话浏览器、个人数字助理 (PDA) 和采用窄带连接的其他设备更好地兼容。

458Crystal Reports 用户指南

?

?

?

?

?有些人可能没有键盘或鼠标。他们可能使用纯文本的屏幕、小屏幕或速度很慢的 Internet 连接。可访问设计使得这些使用受限制技术的用户更容易访问信息。 可访问内容更容易重新用于其他格式。 在查看器中,可以更准确地复制可访问报表或将其导出为其他格式。可访问报表提高了服务器的效率。清晰明了的导航可使人们更快地找到所需的内容,从而减少服务器上的 HTTP 请求数量。提供纯文本替换项可减少图片数量,这些图片通常会占用宝贵的带宽。最近的种种情况表明,提供可访问的 Web 内容在全球是大势所趋。 越来越多的公司要求其 Web 内容必须具有辅助功能,特别是在美国,政府制订的《美国复健法案》(Rehabilitation Act) 第 508 条款对之加以了规定。辅助功能正迅速成为 Web 内容发布的基本组成部分。在法律上可能会要求您提供可访问内容。每年都有越来越多的国家/地区制订反歧视法,以确保残障人士享有同等的机会。即使在法律上并未要求您遵守辅助功能准则,但您可能需要与必须遵守这些准则的组织进行业务往来。创建可访问报表相对于修改现有报表使之具有辅助功能要更容易。

如果现在就在报表中加入可访问功能,其成本将会比以后重新设计现有报表要低得多。

C.1.2关于辅助功能准则

最全面的辅助功能准则是由国际万维网联盟 (W3C) 制订的 Web 内容辅助功能准则 (WCAG)。WCAG 是有关向残障人士传送 Web 内容的公认的权威性建议集合。WCAG 已经影响了世界上类似的 Web 内容标准的制订。

世界各地的机构和政府正在采用 W3C 的辅助功能建议。在澳大利亚,《残障人歧视法案》收纳了 Web 站点辅助功能的标准。英国乃至整个欧洲都制订了类似的准则。在加拿大,所有政府部门的 Web 内容现在都要依照“通用外观和风格”(Common Look and Feel, CLF) 倡议进行开发,该倡议主要以 W3C 的 Web 内容辅助功能准则为基础。美国政府则走得更远,在《美国复健法案》(Rehabilitation Act) 第 508 条款中以法律形式对 Web 辅助功能加以确认,此举确保了大众可访问政府 Web 内容的权利。

所有这些准则的共同之处是,注重于提供对所有人(不论是残障人士还是身体机能受损者)皆宜的 Web 内容。对于报表而言,可访问设计的重点同样在于以下几个重要方面:

?内容必须易于理解和导航。

改善报表的辅助功能459

?

?

?应为非文本对象提供文本项或文本替换项。对象的组织必须合乎逻辑,便于阐明各对象之间的关系。报表不能依赖于任何一种特定类型的硬件,如鼠标、键盘或彩色屏幕。

有关具体的辅助功能准则的更多信息,请参阅 第21 页上的 “资源”。

C.1.3辅助功能和 Business Objects 产品

Business Objects 产品使您可以设计可访问报表,并通过 Web 将它们传送给用户。您可以使用 Crystal Reports,遵循辅助功能准则来创建可供残障用户访问的报表。然后,您可以将这些报表发布至BusinessObjects Enterprise,残障人士在那里可以使用 BusinessObjectsEnterprise Web 桌面和 DHTML 查看器查看 Web 上的这些报表。

本章中的报表是使用 Crystal Reports 创建的,并通过屏幕读取器(包括 JAWS 4.5)进行了测试。

但是,Crystal Reports 目前没有为带有残障的报表设计者提供完全的辅助功能。

残障人士目前不能访问 BusinessObjects Enterprise 的管理组件,其中包括 BusinessObjects Enterprise 中央管理控制台 (CMC) 和中央配置管理器 (CCM)。他们也不能访问 ActiveX 和 Java 查看器。

在 BusinessObjects Enterprise Web 桌面中,大多数用户可以访问通过 BusinessObjects Enterprise 处理报表的用户主界面,并且能够登录和查看报表。但是,用户可能无法访问其他区域(如新帐户注册和计划)。

注意: 尽管可以使用多个相同的设计准则来改善 OLAP IntelligenceProfessional 报表的辅助功能,但很难针对辅助功能来设置 Worksheet的格式。推荐采用 Crystal Reports 向残障人士传送报表。

C.2改善报表的辅助功能

要着手改善 Crystal 报表的辅助功能,可以从辅助功能准则开始,这是一种快速便捷的实现方法。对设计惯例或公司模板稍做更改就能显著地改善辅助功能。

简单的导航和书写清晰的内容是辅助功能的关键所在,而它们易于实现,并且对所有报表用户都有用。

C.2.1在报表中放置对象

在报表上放置对象时,需要考虑几项一般准则。

460Crystal Reports 用户指南

C.2.1.1 合乎逻辑地组织对象

在报表上放置对象时,特别是需要暗示报表中两个对象之间的关系时,请确保对象的布局清晰明了并合乎逻辑。例如,如果要包括图表的文本说明,请确保它尽量紧靠图表,以使两者的关系清晰明了。

许多辅助技术按从左到右和从上到下的顺序读取内容,因此,如果要包括图表的文本说明和标题,则应决定您希望用户先看到哪一个。这将确保可以按正确的顺序读取报表中的对象。

C.2.1.2 按顺序放置对象

在将报表发布至 BusinessObjects Enterprise 时,HTML 版本将按您在 Crystal Reports 中添加对象的连续顺序来组织报表中的对象,而不会按对象在报表上的位置来进行。尽管报表在屏幕上看起来是一样的,但底层的 HTML 代码将按插入对象的顺序列出报表对象。屏幕读取器和其他辅助设备可能会按 HTML 中指定的顺序读出报表,而不是按从左到右和从上到下的顺序读出报表。要使报表可访问,必须按希望屏幕读取器读出对象的顺序将对象添加到报表中。

例如,您在“详细资料”节中放置了“季度”、“年度”和“发票”字段,然后将报表标题“按季度列出的发票”添加到“报表页眉”中。在将报表发布至 BusinessObjects Enterprise 时,它看起来与在 CrystalReports 中的外观一样,但底层的 HTML 代码将首先显示数据库字段标题,然后再显示报表标题。屏幕读取器不是先读出报表标题,而是先读出以下标题:“季度、年度、发票、按季度列出的发票”。

为了避免这一点,请首先插入“按季度列出的发票”标题。在添加数据表之前,可以提供对表进行描述的介绍性文本对象。最后,将字段添加到“详细资料”节。现在,报表在屏幕读取器中将更有意义,屏幕读取器将读出:“按季度列出的发票”。接下来的表将列出每一个季度的发票,并在“季度、年度、发票”后读出数据。(有关提供可访问数据表的详细信息,请参阅 第14 页上的 “改善数据表的辅助功能”。)

因此,要创建可访问报表,必须先计划好报表的顺序,然后再开始在Crystal Reports 中进行工作。在纸上列出计划。确保知道要添加哪些对象,以及要将它们放在何处。并且,计划中还要包括所有的计算工作、图像和图表。在根据计划创建新报表时,可以从左上角开始添加对象,然后逐渐添加至报表的右下角。放置好对象之后,在不影响顺序的情况下,可以在以后更改这些对象。

注意: 如果创建了报表的纯文本替换项,请将它以子报表的方式添加至报表,并且最重要的是,请在将任何其他对象添加至报表之前先添加子报表。有关更详细的信息,请参阅 第5 页上的 “文本”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

改善报表的辅助功能461

将所有对象添加至报表后,可以通过 Tab 键在这些对象之间跳转来测试它们的放置顺序。

X测试报表中对象的放置顺序

1

2确保未选中报表中的对象。 按下 Tab 键。

Crystal Reports 将选定第一个放置在报表中的对象。

按 Tab 键在其他对象之间跳转。

Crystal Reports 使用 Tab 键在对象之间跳转的顺序与屏幕读取器(查看报表的已发布版本)采用的顺序相同。3

C.2.2文本

报表设计者碰到的最常见的辅助功能问题也是最容易解决的问题之一:提供非文本对象 的纯文本版本。非文本对象是指通过图片或声音传递含义的对象。非文本对象包括图片、图表、图形按钮、图形文本、声音、动画以及音频或视频剪辑。

使用辅助技术的人习惯于纯文本替换项,因此,他们会乐意接受您提供的纯文本内容。

?

?

?可以通过多种方法使用文本来大幅度改善报表的辅助功能:为报表中的对象提供文本项。提供报表的文本替换项。确保文本的书写和格式均清晰明了。

文本是创建可访问报表的有用工具。大多数辅助技术需要文本输入,其中包括屏幕读取器、语音合成器和盲文显示器。您很容易就能调整文本的大小和设置文本格式,并且文本是用于导入和导出的最灵活的媒介。

C.2.2.1 提供文本项

?在创建报表时,使用文本项来阐明非文本对象的机会有很多。 将描述性文本对象放在非文本对象的旁边,并确保按连续顺序将它们

添加至报表(有关更多详细信息,请参阅 第4 页上的 “按顺序放置对象”)。

只要有可能,文本项应传递与报表中的相应对象相同的信息。例如,如果报表以饼图方式显示数据,则应在图表旁边加上一个文本框,摘要说明其内容。

462Crystal Reports 用户指南

?

?描述非文本对象的用途。例如,如果某个图像在您单击它时将执行某个动作,则应描述该动作。对于打开 Web 站点的按钮,则应提供一个文本框并在其中标明“单击可查看我们的 Web 站点”。如果报表包含音频链接,则应提供重要音频剪辑的文字本。如果报表链接到多媒体或视频演示,则应提供内容的文字本。可能还

要为音频片段提供字幕,以及提供视频片段的音频说明。字幕应与音频同步。

C.2.2.2 提供纯文本替换项

如果报表上的非文本对象太多,或者不具备将可访问设计集成在所有报表中的资源,则可以提供完全的纯文本替换项。例如,对于仅使用图表和图形表示数据的报表,可以提供一个链接指向用数据表和文本对象提供相同数据的纯文本替换项。

只要有可能,纯文本替换项应提供与原始报表相同的信息。在替代报表中,也应使用文本对象描述主报表中通过图像传递的信息。

注意: 如果无法生成报表的完全纯文本版本,则通过提供报表所阐明的关键信息或结论的描述性摘要,仍然可以改善辅助功能。

在子报表上提供纯文本替换项(在主报表的左上角放置此类链接)是一个好的做法,这样可以使用户尽快切换到纯文本版本。在添加任何其他对象之前先添加子报表,以确保屏幕读取器首先读出它。如果只希望使用屏幕读取器或类似软件的用户看到子报表链接,则可以创建颜色与背景颜色相同的子报表链接。该链接看起来像一个小空格,但屏幕读取器将读出该链接的文本。

X将纯文本替换项添加至子报表

1

2

3

4

5

6

7创建报表的纯文本版本并保存。打开新报表。在“插入”菜单上,单击“子报表”。在“插入子报表”对话框中,选择“选择现有报表”,然后单击“浏览”以找到在步骤 1 中创建的报表。单击该子报表,然后从“格式”菜单中选择“设置子报表格式”。在“格式编辑器”中的“子报表”选项卡上,选择“按需要显示子报表”。要隐藏子报表链接,在“字体”选项卡上选择与报表的背景颜色一致

的颜色。

注意:也可以不隐藏子报表链接,而是有条件地抑制显示包含子报表的节。有关详细信息,请参阅 第13 页上的 “辅助功能和子报表”。

改善报表的辅助功能463

C.2.2.3 使用标点

为了改善读出的文本的逻辑性,可能需要添加额外的标点来产生停顿。如果没有额外的标点,屏幕读取器可能会将多个文本对象作为一个连续的句子读出,从而使内容难于理解。例如,数据表中的信息可能会被连续读出。为了防止这一点,可以通过在各字段之间插入句号来拆散数据表中的信息。

某些标点符号会被大声读出,因此如果频繁使用这些符号,可能会分散用户的注意力。例如,在屏幕读取器读冒号“:”时,它可能会大声读作“冒号”,而不会停顿。可以在屏幕读取器的设置中更改读出的标点数。

要解决报表的标点问题,使用屏幕读取器读报表是一个好的做法。连续读出对象是否太快?停顿是否太频繁?是否大声读出任何标点符号?这样做是改善还是妨碍改善报表的可用性?

C.2.2.4 设置文本格式

创建非文本对象的文本项或替代文本后,需确保文本的书写清晰明了且易于阅读。请遵循以下设计准则:

?使用较大的字体。

尽管视觉受损者可以使用“缩放”功能来增加报表的大小,但是,如果字体较大,他们就无需放大报表。例如,默认情况下图表标签或图例会以小字体显示。对于一般的清晰度而言,使用大于 8 磅的字体是一个好的做法。对于辅助功能而言,需确保文本字体大于 11 磅。 ?使用“sans serif”字体。

简单的字体(如 Arial 和 Helvetica)可能比 Times 或 Palatino等衬线字体更易于阅读。

?选择靠左对齐或两端对齐。

靠左或两端对齐的文本比居中或靠右对齐的文本更易于阅读。

?确保文本遵循颜色使用准则。有关详细信息,请参阅 第8 页上的

“颜色”。

注意: 您可以允许用户使用参数和条件格式设置选择不同的字体设

。置。有关详细信息,请参阅 第11 页上的 “辅助功能和条件格式设置”

C.2.2.5 找到文本和非文本对象之间的最佳平衡点

文本项非常灵活,通常是辅助功能的最佳解决方法,但是,并非总是要使用或优先使用等效文本。

并不是所有非文本对象都需要文本项。只有对于提供用户不可或缺的信息或导航元素的非文本对象,才需要包括文本替换项。用于装饰用途的图像不需要文本说明。如果报表有用作数据背景的水印图像,则无需提供文本项。为装饰性对象添加文本说明可能会产生不必要的混乱。

464Crystal Reports 用户指南

应该将报表中可视或可听到的对象的文本版本用作对该对象的补充,而不应完全替代。无需删除非文本对象。报表中的可视对象十分有用,特别是对于有学习障碍(如注意力不集中症)的人或耳聋的人来说更是如此。听力受损者可能习惯于视觉交流(如手语),并可能发现图像比文本更为有用。

没有一种表现方式能够满足所有用户的需要。音频剪辑可能对于视觉受损者十分有用,但听力受损者将无法使用它们。为了同时帮助这两种人,需提供音频和文本的组合。多媒体表现方式既可以为视觉受损者提供音频信息,也可以为耳聋的人或听力较差者提供视频信息。多媒体表现方式对于有注意力不集中症的人来说特别有效。但是,可视对象或音频对象可能会令某些有心智障碍的人心烦意乱。

最好的方法是同时使用文本和非文本对象传递相同的信息。添加描述性文本来支持图像,同时添加支持文本的图像。

如果报表中的文本对象开始剧增,则可能需要在单独的报表或子报表中提供完全纯文本版本。有关详细信息,请参阅 第6 页上的 “提供纯文本替换项”。

要了解有关如何选择表现方式以满足不同读者需要的更多策略,请参阅 第11 页上的 “设计时注重灵活性”。

C.2.3颜色

为报表中的对象选择的颜色可能会严重影响到视觉受损、视力较差或色盲人士的辅助功能。确保报表在无彩色的情况下也能为读者理解。

C.2.3.1 对比色

视力较差的用户可能无法区分颜色。要测试报表中的颜色对比,请以黑白色打印或查看报表。您应能够区分出以不同颜色显示的值或字段(例如,在饼图中)。

如果无法区分报表上的颜色,请尝试使用不同的颜色或灰色阴影。如果这样做未能解决问题,则可以更改其他特性。

对于文本,可使用“格式编辑器”更改字体、大小或样式。可以添加边框、下划线或背景阴影,以使文本对象互相有所区别。

对于图表,可使用阴影和图案的组合。可以使用“图表专家”自动将彩色图表转换为黑白图表,也可以单独选定值并选择自己的图案。X将图表转换为黑白图表

1

2选择图表,然后从“格式”菜单中选择“图表专家”。在“图表专家”中,单击“选项”选项卡。

改善报表的辅助功能465

3在“图表颜色”区域中,选择“黑白”,然后单击“确定”。

图表颜色将转换为各种高对比度的图案和颜色填充。

X更改图表值的填充效果

1

2

3

4选择图表,然后单击要更改的标黑的区域。在“图表”菜单上,指向“图表选项”,然后单击“选定项目”。在“格式设置”对话框中的“填充”选项卡上,选择一种颜色并单击“图案”。在“选择图案”对话框中,单击一种图案,然后单击“确定”。

注意: 也可以选择纹理、渐变效果或图片作为图表值的填充效果。有关更多信息,请参阅“图表帮助”。

C.2.3.2 使用颜色来传递信息

不要使用颜色作为报表中重要信息的唯一标识特征。

例如,某个文本对象可能指示用户“单击绿色按钮”以打开子报表。但视力较差的用户可能无法辨别出哪个按钮是绿色的。除了颜色之外,还应通过另一种表现特征来识别按钮。例如,可以将按钮图形更改为报表中其他地方没有使用的一种形状,并指示用户“单击绿色箭头按钮”。这种解决方法既为可以辨别颜色的人提供了颜色信息,也为无法辨别颜色的人提供了额外信息。

?

?

?可以使用颜色提供重要信息的其他常见场合包括:突出显示要突出显示表中的某些值,请不要仅仅更改值的颜色。例如,如果用红色突出显示未付发票,对于视力较差者来说,这些发票可能看起来与已付发票一样。在“突出显示专家”对话框中,除了更改颜色之外,还要更改字体特性,如字体样式。超级链接对于色盲用户来说,使用颜色作为标识超级链接的唯一方法也可能会造成问题。用黑白色打印报表时,请检查超级链接,确保它们仍然可见。标识报表的重要区域

组织报表时,不要使用彩色背景,也不要使用颜色来分隔不同的节或区域。应为整个报表建立清晰一致的导航方法,而不要使用颜色来标识各节。

水晶报表Crystal Reports培训教程 35_水晶报表教程

466Crystal Reports 用户指南

C.2.4导航

如同可访问设计的其他方面一样,提供多种可供选择的导航方法可以帮助您满足更多人的报表需求。W3C 建议在报表中加入多种不同的导航方法。另一方面,简明性对于直观的导航至关重要。第 508 条款建议采用简单的导航方法,使用的导航链接的数量要尽可能最少。只要保持清晰性和一致性,任意一种方法对于报表都是有效的。

您可能需要使用报表部件来导航报表(或连接多个报表)。如果在页眉中提供一系列链接,请记住,用户每次刷新页面或查看新页面时,屏幕阅读软件将重新读取导航信息。在这种情况下,最好使用简单的导航。

对于大型报表,可以在报表页眉中以目录的形式提供导航链接的列表。如果有大量的数据,较详尽的导航会很有用。为了允许用户跳过列表,可以在报表开头放置一个“跳过目录”链接,并使该链接向前跳转至第一个页眉。

?

?

?

?报表导航通常应遵循以下准则:标识每个链接的目标。在报表开头提供用于描述布局和导航的信息。使用导航时前后保持一致。提供跳过重复导航链接的机会。

C.2.5参数字段

在报表中包括参数字段时,请确保它们清晰简单。尽管参数字段对于提供可访问内容是一种有用的工具,但它们也可能会引起一些需要关注的辅助功能问题。测试所有参数字段的辅助功能十分重要。

?

?

?参数字段应遵循以下准则:提供默认值列表以供用户从中选择。 避免要求用户输入参数的值。在用户提供自己的值时,他们需要确保值的格式可由参数字段识别。默认值列表易于使用,并可以确保用户从具有有效格式的值中进行选择。 尽力避免复杂的参数字段。 将复杂的参数字段分解为多个参数可更加便于访问。在测试参数字段的辅助功能时,应特别注意要求提供一个范围的参数。提供两个参数字段分别提示输入范围的上、下限值的做法,与要求用户在同一参数字段中选择这两个值相比较,可能更易于理解。对于日期字段,不要允许用户选择自己的值。

用于选择日期值的日历当前不可访问。请提供默认日期值的选取列表。使用默认值列表同样有助于避免无效的日期格式。

设计时注重灵活性467

C.3设计时注重灵活性

灵活性是提供可访问报表的关键。由于不同的用户要求不同的辅助功能级别,因此提供多种表现形式和方法以满足尽量多的人的需求是一个好的做法。但是,对于详细的报表,可能无法做到既提供多种表现形式,又不会因为使用了额外对象而使报表混乱不堪。

要解决这个问题,需计划好要在报表中集成可访问格式的程度。可以为每个对象、每一节提供可访问的格式设置,或者以子报表的形式提供这种设置。然后,可以允许用户使用某个参数字段(该字段会提示用户选择是否显示可访问格式)选择自己的辅助功能选项。

利用该参数字段,可以有条件地设置对象格式,或有条件地抑制显示用于满足不同访问需求的节。或者,可以通过使用子报表提供不同的显示选项。

X创建辅助功能参数字段

1

2

3在 Crystal Reports 中的“视图”菜单上,单击“字段资源管理器”。在“字段资源管理器”中,右击“参数字段”,然后单击“新建”。在“创建参数字段”对话框中,输入参数名(例如,Access)和提示

文本(是否要为此报表启用可访问格式设置?)。

确保将“值类型”设置为字符串。

单击“设置默认值”。

在“设置默认值”对话框中,创建 Yes 和 No 值,然后使用箭头按钮将它们移至“默认值”区域中。

单击“确定”。

单击“创建参数字段”对话框中的“确定”。45678

C.3.1辅助功能和条件格式设置

通过对辅助功能参数字段套用简单的公式,可以为报表中的任意对象提供多种格式。如果用户在参数提示时选择“是”,条件公式将确保使用可访问的格式设置惯例修改对象。如果用户选择“否”,则可能以标准的公司模板显示报表而不进行可访问的格式设置。

对于可访问的文本格式设置,可以遵循本章和 W3C 建议的准则,也可以对报表用户进行调查,以确定最适用于他们的格式。确定要使用的格式设置选项后,可以创建定义这些选项的条件公式。例如,可以按照以下样式显示所有数据库字段:使用较大的 Arial 字体、黑底白字并启用“可以增大”选项。

468Crystal Reports 用户指南

以下过程创建一个基于“?Access”参数字段的条件格式设置公式。如果将“?Access”参数字段设置为“是”,公式将增加字体大小。可以使用类似的公式来更改颜色、添加边框或启用“可以增大”设置。有关有条件地设置字段格式和使用“格式公式编辑器”的完整说明,请参阅Crystal Reports 联机帮助。

注意: 如果文本对象太小而无法容纳增大的字体,则可以使用类似的条件格式设置公式来启用“可以增大”设置,该选项位于“格式编辑器”的“公用”选项卡上。

X有条件地对字体大小应用可访问设置

1

2

3

4在 Crystal Reports 的“设计”选项卡中打开报表。在“详细资料”节中,右击要有条件设置格式的字段,然后选择“设置字段格式”。在“格式编辑器”中,单击“字体”选项卡。 单击对应于“大小”列表的“公式”按钮。

“格式公式编辑器”将打开名为字体大小的新公式。

在“公式文本”窗口中,输入以下公式(使用 Crystal 语法):if {?Access} = "Yes"

then 20

else 105

此公式确保当用户选择显示可访问的格式设置时,当前选定字段的字体大小将从 10 磅增加到 20 磅。

6单击“保存并关闭”。

C.3.2辅助功能和抑制显示节

除了有条件地设置个别对象的格式外,还可以为报表内容的可访问版本创建独立的节,然后使用辅助功能参数字段来有条件地抑制显示节。可以抑制显示或显示可访问和不可访问的节,具体取决于用户选择的参数值。

为报表内容的可访问版本创建独立的节可能较耗时间,但在以下几种情况下,有条件地抑制显示节可能比在对象级别设置格式更实用:?如果报表包含许多对象,抑制显示节的方法要求的条件公式数可能

较少。

?并非所有设置和功能都可以有条件地设置格式。但是,通过抑制显示

节的做法,可以对格式设置做任意更改。

设计时注重灵活性469

?您可能需要为查看报表的可访问版本的用户提供完全不同的信息类

型。例如,可能需要将可视对象和音频对象拆分为两个不同的节,并根据用户选择的参数值有条件地抑制显示它们。

X抑制显示可访问的节

1

2右击要有条件地抑制显示的节的左边界,然后单击“节专家”。 在“节专家”中,单击对应于“抑制显示(无深化)”设置的“公

式”按钮。

“格式公式编辑器”将打开一个名为抑制显示(无深化)的新公式。在“公式文本”窗口中,输入以下公式(使用 Crystal 语法):if {?Access} = "No" then True3

如果用户选择不查看可访问的报表内容,此公式将选择“抑制显示”选项。

4

5单击“保存并关闭”。单击“节专家”中的“确定”。

C.3.3辅助功能和子报表

如果使用有条件地设置格式的对象和抑制显示的节,可访问报表的设计可能会变得非常麻烦。特别在以下两种情况下可能会出现问题:?为了使报表可访问,您可能需要更改报表各节的整体组织形式,或者

可能需要提供不同的对象。

?如果报表包含大量的对象或节,则为所有对象或节创建条件公式可能

要花费很长时间。

例如,如果报表包含许多非文本对象要显示在一系列复杂的组和节中,则可能需要提供使用不同对象和简化的组结构的纯文本版本,以便符合辅助功能准则。解决此问题的最简单方法是:创建一个显示该报表的可访问版本的子报表,然后将该子报表放在主报表的开头。有关创建纯文本的可访问子报表的详细信息,请参阅 第6 页上的 “提供纯文本替换项”。

如果希望只有屏幕读取器才能看到子报表,则可以通过将子报表链接更改为与背景相同的颜色将其隐藏起来。另外,可以使用“?Access”参数字段,允许用户选择子报表是否出现在报表中。将子报表放在它自己的节中,并根据“?Access”参数字段有条件地抑制显示该节。有关详细信息,请参阅 第12 页上的 “辅助功能和抑制显示节”。

470Crystal Reports 用户指南

C.4改善数据表的辅助功能

如果用户使用非视觉的 Web 访问方法(如屏幕读取器),则可能很难理解大型的数据表。使用屏幕放大镜或缩放功能的用户可能还会发现数据表难于导航,因为他们无法始终看到表标题。要将屏幕读取器正在读出的值与相应的列或行标题关联起来,可能会变得非常困难。用户需要能够理解数据值在表中的位置,以及它与其他值的关系。

为了改善数据表的导航性,可以使用文本对象来提供每个值的上下文信息。使用条件格式设置或抑制显示方法,可以创建仅在用户选择查看时才显示这些对象的报表。其他设计准则能帮助用户更容易理解大型数据表,如提供摘要段落和展开的列标题。

注意: 本章使用符合 W3C 辅助功能准则的术语。在这些准则中,数据表这一术语是指按列和行的方式排列的值。在 Crystal Reports 中,数据表采用组或页标题结合“详细资料”节中的数据库字段的形式。不要混淆数据表与数据库表,数据库表是 Crystal Reports 使用的数据源。

C.4.1文本对象和数据表值

通过添加为表中每个值提供有关信息的文本对象,可以使大型的表更易于理解和导航。

包括对于确定显示的值的含义和上下文所必需的信息。在适当时,包括描述列标题或邻近字段的信息。例如,如果报表显示雇员的姓名和工资,则可以在显示为“{Last Name}'s salary is”的“Salary”数据库字段前添加一个文本对象。用户可以通过读出附带的文本对象确定值的上下文和含义。

确保文本对象使用了标点,标点可以使文本内容通过屏幕读取器大声读出时用户更容易理解。如果没有专为辅助功能而使用的标点,数据表将会作为一个长句读出,从而使导航和理解非常困难。例如,可以在值的后面加上句号,以便屏幕读取器在列和行之间停顿一下。有关详细信息,请参阅 第7 页上的 “使用标点”。

如同报表中的所有对象一样,在报表上放置文本对象的顺序可能会影响辅助功能。屏幕读取器按最初添加对象的顺序读取对象。(有关详细信息,请参阅 第4 页上的 “按顺序放置对象”。)在添加标识数据表中特定列的内容的文本对象时,正确的放置顺序至关重要。如果在设计过程结束时添加文本对象,读取器将先读取文本对象所引用的列,然后再读取文本对象。在添加用于描述报表中的值的文本对象时,确保按所需的读出顺序将它们放置在报表上。

水晶报表Crystal Reports培训教程 35_水晶报表教程

改善数据表的辅助功能471

必须提前计划好报表,确定要包括哪些对象和数据库字段,然后才能创建可访问的数据表。由于必须按所需的读出顺序来放置对象,因此,请务必根据辅助功能对内容进行计划。作为此计划过程的一部分,决定如何使用文本对象来标识数据表值是一个好的做法。可以只是在每个数据库字段前添加文本对象,也可以有条件地抑制显示文本对象或使用公式来组合文本对象和值。

C.4.1.1 使用文本对象标记数据表

在每个字段前添加用于描述字段在表中位置的文本对象。在以下示例中,文本框提供有关雇员 ID 号的信息。使用屏幕读取器读取报表时,在读每个编号前都会先读文本框中的简单解释。

如果为每个值都提供额外信息,则对于视觉正常者来说,数据表可能显得很混乱。因此,可能需要隐藏额外的文本对象,方法是将字体颜色更改为与背景相同的颜色。这样,额外的文本将隐藏起来,但仍然可以由屏幕读取器检测到并读出来。

C.4.1.2 有条件地标记数据表

尽管添加文本对象相对容易实现,但它并未解决所有需要关注的辅助

功能问题。隐藏的文本由屏幕读取器读出,但对于视力较差者并没有帮

472Crystal Reports 用户指南

助。通过有条件地设置文本对象的格式或抑制显示它,可以允许用户选择是否在数据表中显示文本说明。

确保报表包含一个辅助功能参数字段。有关如何创建“?Access”辅助功能参数字段的说明,请参阅 第11 页上的 “设计时注重灵活性”。

可以使用参数字段来有条件地抑制显示文本对象。有条件地抑制显示文本与将字体颜色更改为背景颜色的效果一样,但前者还允许您使用参数字段来指定其他格式设置选项(如字体大小和样式)。

为了仅在用户为“?Access”参数字段选择了 Yes 时才显示文本对象,以下报表使用了简单的条件公式来启用“格式编辑器”的“公用”选项卡上的“抑制显示”选项。

{?Access}="No"

必须为要抑制显示的每个文本对象添加公式。

如果用户为“?Access”参数字段选择了 Yes,则不会抑制显示文本对象;数据表将显示文本说明。

注意: 显示的报表还使用“?Access”参数字段来启用“可以增大”选项(也位于“格式编辑器”的“公用”选项卡上),并为视觉受损的用户增加字体大小。

当用户为“?Access”参数字段选择 No 时,条件公式将抑制显示文本对象,并在报表中显示空白来代替文本对象。

C.4.1.3 使用公式标记数据表

将解释性文本添加到数据表的另一种方法是创建公式,用公式将文本、数据库字段和条件格式设置组合在一起。通过将文本和数据库字段一起添加到基于“?Access”参数的条件公式中,可以为表中的值提供可选文本,而不会在报表中留下空白。使用公式还可以减少报表中的对象数量,从而更易于保持正确的放置顺序。

注意: 如果报表中包含汇总字段或计算出的字段,请不要使用此方法。尽管公式提供了最佳是显示数据的方式,但由于要将数据转换为文

本,公式可能会对计算造成影响。

改善数据表的辅助功能473

以下报表使用了放在“详细资料”节中的公式,这些公式将数据库字段和额外的文本组合在一起。当用户为“?Access”参数字段选择 Yes时,每个公式将生成一个包括说明和值的字符串。

此报表使用以下公式:

@Employee ID

If {?Access}="Yes" then "Employee ID "

+ ToText({Employee.Employee ID},0) + "。 "

else ToText({Employee.Employee ID},0)

@Last Name

If {?Access}="Yes" then "Employee last name is "

+ {Employee.Last Name} + "."

else {Employee.Last Name}

@Salary

If {?Access}="Yes" then {Employee.Last Name} + "'s Salary is " +

ToText({Employee.Salary}) + "."

else ToText({Employee.Salary})

请注意添加的标点。每个公式结尾的句号通过在各字段之间建立停顿改善了屏幕读取器的可识别性。

?

?注意: 该报表还使用“?Access”参数字段来启用“可以增大”选项并增加字体大小。 在 @Employee ID 中,已将“?Access”参数字段设置为“0”,以启

用“可以增大”选项并增加字体大小。

474Crystal Reports 用户指南

当用户为“?Access”参数字段选择 No 时,公式只会返回数据。报表不会显示空白来代替条件文本对象。两种版本的报表都易于阅读。

C.4.2数据表设计的其他考虑因素

除了使用文本对象标记数据值之外,其他报表设计技巧也可以帮助您创建易于理解和导航的数据表。

?包括概括表内容的介绍性段落。摘要应简明扼要:如果可能,一句或

两句话即可。

?确保标题提供的信息足以清楚地标识它们所标记的值。

?要测试表的辅助功能,请按从左到右和从上到下的线性方式读出标题

和值。例如,如果报表显示每个客户的姓和名字段,则按先姓后名的方式显示时读出的效果较好。只要有可能,请使用辅助技术(如屏幕阅读软件)来测试报表。

最终的可访问报表包括数据表的摘要。

辅助功能和 BusinessObjects Enterprise475

为了有条件地显示表摘要,报表设计者应将页眉划分成两部分。在将“?Access”参数字段设置为 No 时,第一个页眉将被抑制显示。如果用户选择 Yes,第二个页眉将被抑制显示。有关详细信息,请参阅 第12页上的 “辅助功能和抑制显示节”。

C.5辅助功能和 BusinessObjects Enterprise

设计可访问报表只是解决方案的一个部分。您需要确保通过遵循相同设计准则的可访问接口来传送报表。

尽管 BusinessObjects Enterprise 的管理组件和 BusinessObjectsEnterprise Web 桌面中的计划功能当前并非人人都能访问,但是,BusinessObjects Enterprise Web 桌面和 DHTML 查看器考虑到了通过Web 访问报表的问题。

BusinessObjects Enterprise 已做了一些改进以解决辅助功能问题。现在,工具栏按钮和其他图像的 ALT 标记中提供了文本说明。文本框的说明更加清楚,并在 DHTML 查看器中提供了快捷链接,以便您能越过工具栏和组树进行浏览。

C.5.1设置 BusinessObjects Enterprise 的可访问首选项

为了在 BusinessObjects Enterprise 中获得最佳的辅助功能支持,需要设置某些显示首选项。

对于 BusinessObjects Enterprise Web 桌面,将在“操作”视图中显示对象。“操作”视图更易于访问,原因在于它提供了可用报表的文本列表,并且不使用报表命令的快捷菜单。根据用户需求的不同,可能还需要减少每页上显示的报表数。

要查看报表,请在首选项中选择 DHTML 查看器作为默认查看器。 如果您在管理其他用户的帐户,则可以设置他们的 BusinessObjectsEnterprise 首选项。若要更改另一用户的首选项,请使用BusinessObjects Enterprise Web 桌面首选项管理器(位于BusinessObjects Enterprise 启动板的“管理员示例”区域中)。

注意: 要设置首选项,您必须在系统中有自己的帐户。

X设置 BusinessObjects Enterprise 的可访问首选项

1

2登录到 BusinessObjects Enterprise Web 桌面。 在标题栏中单击“首选项”。

水晶报表Crystal Reports培训教程 35_水晶报表教程

476Crystal Reports 用户指南

3

4

5

6在“用户首选项”页面上的“在桌面上显示”区域中,选择“操作视图”。要减少每页上显示的报表数,请在“操作视图”选项旁边的文本框中输入数字。在“查看我的报表,方法是使用”区域中,选择“DHTML 查看器”。单击“应用”。

C.6辅助功能和自定义

在自定义 Crystal 报表或 BusinessObjects Enterprise Web 桌面

时,或者如果将 BusinessObjects Enterprise 整合到现有的 Web 站点中,请确保所做的更改符合美国无障碍委员会 (U.S. Access Board) 在第 508 条款中提出的辅助功能准则,或者 W3C 的网页辅助功能倡议(Web Accessibility Initiative)。

如果对 Crystal 报表或 BusinessObjects Enterprise Web 桌面进

行大量的自定义操作,则可能会遇到其他辅助功能问题。有关详尽提供辅助功能准则的在线资源,请参阅 第21 页上的 “资源”。以下列表提供了一些常见的辅助功能问题,它们在您自定义 Crystal Reports 或BusinessObjects Enterprise 内容时可能会导致问题。

?框架

应清晰地标记框架,以便更容易标识和导航。在框架的顶部提供描述

其用途的文本。例如,如果框架提供指向不同国家/地区的链接列表,

则可以向框架添加一些阐明其用途的文字,如标题(“国家/地区”)

或简短说明(“单击国家/地区以了解详细信息”)。

?样式表

如果您是视觉受损者,则可以创建一个具有特定查看首选项的样式

表,以克服这种残障。例如,可以创建一个样式表,其中使用大字体

和黑底白字显示所有的 Web 页。用户不能将个性化的样式表应用于

Crystal 报表,但查看器提供了一个“缩放”按钮,允许视觉受损者

增加缩放倍数来适应自己的需求。使用条件格式设置,也可以允许用

户从不同的格式设置选项中进行选择。有关详细信息,请参阅 第11

页上的 “辅助功能和条件格式设置”。

?脚本

如果您对 Crystal 内容进行了修改,加入了用于显示内容或交互式

对象的脚本,请确保用表明脚本用途的文字来标识脚本。确保包含脚

本的页面在停用脚本或不支持脚本的情况下仍然可用。有关脚本和辅

助功能的更多信息,请参阅 第21 页上的 “资源”。

资源477

?

?

?

?

?图像映射服务器端图像映射使用坐标来标识活动区域,这些坐标对于屏幕读取器来说毫无意义。客户端图像映射提供了更好的辅助功能,原因是您可以为图像映射中的每个活动区域分配一个链接或 URL。 电子窗体电子窗体可能会给屏幕读取器带来困难,因此必须仔细设置。在标记窗体中的组件时,请确保标签明显地位于窗体组件的旁边。例如,对于“搜索”框,请确保“搜索”标题出现在相应文本框的旁边。小程序和插件如果报表需要在客户端计算机上安装小程序、插件或其他应用程序才能解释页面内容,该插件或小程序必须遵循辅助功能准则。如果将多媒体或其他附加资源文件(如 PDF 或 Real Audio 文件)附加至报表,请提供用于安装所需插件或软件的链接,并确保所需的软件也符合辅助功能设计标准。闪烁闪烁的图像可能会诱使癫痫症患者发病。W3C 建议避免使用每秒闪烁4 到 59 次的图像。 搜索引擎位置

不要使用隐藏文本来提升您的 Web 站点在搜索引擎中的位置。隐藏文

本会降低可读性,因为它是由屏幕读取器读出的。此外,隐藏文本会

被常见的搜索引擎(如 Google)主动拦阻,因此不会带来太多好处。

C.7资源

本章侧重说明如何使用 Crystal 软件创建和发布可访问报表。本章

中的报表设计技术已使用 JAWS 4.5 进行了测试。只要有可能,使用JAWS 和其他辅助技术来测试所有可访问报表是一个好的做法。

要使您的所有 Web 通讯内容都具备辅助功能,请参考 W3C 或您所在

国家/地区政府 Web 站点上的详细准则。

?万维网联盟制订的网页辅助功能倡议 (Web Accessibility

Initiative):

http://www.w3.org/WAI/

?美国无障碍委员会 (United States Access Board) 的有关第 508

条款的 Web 站点:

http://www.access-board.gov/sec508/guide/

?加拿大政府的 Internet 指南:

http://www.cio-dpi.gc.ca/ig-gi/

附录D Business Objects 信息资

D.1文档和信息服务

Business Objects 提供了涵盖其产品及产品部署的完整文档集。还可以使用其他支持和服务来帮助最大程度地提高业务智能投资的回报。以下各节详细说明了可在何处获得 Business Objects 文档,以及如何使用 Business Objects 的资源来满足您的技术支持、教育和咨询需求。

D.2文档

可以从文档中找到有关如何安装、配置、部署和使用 Business Objects产品的问题的答案。

D.2.1文档集中有什么内容?

查看或下载随产品文档一起提供的《Business Objects 文档路线图》,地址为 http://www.businessobjects.com/support/。“文档路线图”引用了所有 Business Objects 指南,并允许您快速了解可从何处以何种格式获得何种信息。

D.2.2文档的位置

可以随时从产品界面、Web 或产品 CD 中访问电子文档。

D.2.2.1 产品中提供的文档

产品的帮助菜单中提供了联机帮助和 Adobe PDF 格式的指南。如果只提供了联机帮助,则联机帮助文件将包含 PDF 版本指南的全部内容。

D.2.2.2 Web 上的文档

客户可通过支持 Web 站点在 Web 上获得完整的电子文档集,地址为:http://www.businessobjects.com/support/。

479Crystal Reports 用户指南

D.2.2.3 产品 CD 上的文档

查看产品 CD 的 docs 目录以获得 Adobe PDF 格式的指南版本。

D.2.3发送您的反馈

您对我们如何才能改善文档有何建议?是否有您特别喜欢或认为特别有用的内容?请留下您的宝贵意见,我们将尽量在文档的下一版本中包含您的建议:documentation@businessobjects.com。

注意: 如果您的问题涉及到 Business Objects 产品而不是文档,请与客户支持专家联系。有关客户支持的信息,请访问 http://www.businessobjects.com/support/。

D.3客户支持、咨询和培训

Business Objects 技术专家的全球网络提供了客户支持、教育和咨询,以便最大程度地提升业务智能为您的企业带来的利益。

D.3.1如何能为您提供支持?

Business Objects 提供了客户支持计划,以便切合您的部署的规模和需求。我们在以下国家/地区设立了客户支持中心:

?美国

?澳大利亚

?加拿大

?英国

?日本

D.3.1.1 联机客户支持

Business Objects 客户支持 Web 站点包含有关客户支持计划和服务的信息。它还包含指向许多技术信息(包括知识库文章、下载和支持论坛)的链接。

http://www.businessobjects.com/support/

D.3.2是否在寻求适合于贵公司的最佳部署解决方案?

从最初的分析阶段到交付部署项目为止,Business Objects 顾问将始终与您协同工作。我们在关系数据库和多维数据库、连通性、数据库设计工具、定制嵌入技术等各方面全面提供专业技能。

有关更多信息,请与当地销售办事处联系,或通过以下地址与我们联系:

实用地址一览480

http://www.businessobjects.com/services/consulting/

D.3.3是否在寻求培训选件?

从传统的教室学习到有针对性的电子学习讲座,我们能够提供适合您的学习需求和偏好的学习风格的培训套件。在 Business Objects 教育Web 站点上查找更多信息:

http://www.businessobjects.com/services/training

D.4实用地址一览地址

Business Objects 产品信息

http://www.businessobjects.com

产品文档

http://

www.businessobjects.com/

support

Business Objects 文档邮箱

documentation@businessobjects.

com

联机客户支持

http://

www.businessobjects.com/

support/

Business Objects 咨询服务

http://

www.businessobjects.com/

services/consulting/

Business Objects 教育服务

http://

www.businessobjects.com/

services/training内容有关全系列 Business Objects 产品的信息。Business Objects 产品文档,其中包括 Business Objects 文档路线图。向我们发送有关文档的反馈或问题。有关客户支持计划的信息,以及指向技术文章、下载和在线论坛的链接。有关 Business Objects 如何能帮助您最大程度地从业务智能投资中获益的信息。有关 Business Objects 培训选件和模块的信息。

水晶报表Crystal Reports培训教程 35_水晶报表教程

索引

A

按需子报表, 性能................117安装

Crystal Reports...............30创建安装点...................32从产品分发介质................31从网络......................33升级组件.....................37无提示安装...................35要求........................30自定义安装...................34

B

Basic 语法

创建公式....................363BeforeReadingRecords.............451BLOB 字段......................88Business Objects

培训服务....................480支持服务....................479咨询服务................479, 480Business Objects Enterprise 储备库。请参阅储备库

BusinessObjects Enterprise

安全...................112, 113版本管理....................113对日期函数求值...............113负载平衡....................113管理.......................113计划.......................112LDAP.......................113群集.......................113伸缩.......................113

报表

保存.......................51标准视图来显示................78布局.......................65参数字段于...................85操作数据....................67插入

标题......................50超级链接字段................88节......................180OLE 对象..................272数据库字段.................44特殊字段...................86文本对象...................86查找数据....................66拆分并调整节大小.............183创建.......................39OLAP 报表.................312通过“快速开始”新建.........59新.......................42打印区域特性.................68导出......................326到 Exchange 文件夹..........332到 Lotus Domino............333到 Microsoft Mail...........334到磁盘文件................331到应用程序................330第一次预览..................394放大和缩小...................92

482Crystal Reports 用户指南

放置

地图.....................257SQL 表达式字段...............84数据库字段于................84数据于.....................84特殊字段于..................85图表.....................243文本对象于..................86分组

记录......................90数据.....................144格式设置

使用模板..................195数据......................90更改

地图边框..................269地图标题..................264数据库名..................413数据库位置.................413更新储备库对象...............109公式字段于...................84合并相关节..................182汇总........................91汇总以提高可用性..............116基本设计.....................64决定内容.....................64绝对格式设置.................220排序

记录......................91排序字段的数据..............141如何表示 OLE 对象.............273删除节.....................181设置为只读..................221

使用

储备库对象................106多个节...................184HTML 预览选项卡..............80OLAP 数据.................311使用“设计”选项卡创建........74使用文本对象创建套用信函......187在打印前使用“预览”选项卡.....77子报表组合不相关的..........407刷新数据....................394说明目的.....................64添加

标题页....................93摘要信息...................93条件格式设置.................229小计........................91性能的设计考虑...............114性能考虑....................423选择

数据库....................42数据源....................81页眉和页脚...................92溢出字段表示法...............212移动节.....................181优化性能....................111运行总计字段于................85传真.......................325子报表链接..................402总计........................91组合两个不相关的..............408..............78组织数据.....................90

“组树”视图来显示

索引483

报表部件......................338上下文报表部件方案............346报表部件查看器.................338报表部件导航...................340报表对象和辅助功能..............459报表节........................44报表页脚....................75报表页眉....................75打印特性....................68合并......................180删除......................180添加......................180详细资料....................75页脚.......................75页眉.......................75移动......................180组页脚......................76组页眉......................75报表警报

编辑......................353查看......................354创建......................351删除......................353在公式中引用................355报表设计, 关键策略..............112报表设计环境

从文件导入基于文本的对象.......207放置多行、基于文本的对象.......206放置基于文本的对象............204节特性.....................199默认打印机..................218设计解决方案................198设置页面方向和纸张大小.........218TrueType 字体................217页边距.....................217预先打印好的窗体.............201报表页脚, 节....................75报表页眉, 节....................75报表原型, 设计..................69报表专家请参阅专家

保存报表.......................51

“保存”对话框..................51背景颜色, 格式设置(行/列).......294编辑查询筛选器.................308编辑模式(文本对象)............187边框

更改

对于地图.................269图表....................252添加......................220表.......................82, 470别名......................413可视链接专家................425链接..................417, 425记录....................418两个.....................82没有索引.................409性能....................120链接处理顺序................426链接到.....................418链接的 SQL..................422链接自.....................418删除空白行..................185添加.......................82有索引.....................415表索引, 性能..................119标题

插入.......................50地图......................264添加标题页...................93标题, 添加到子报表..............410标准报表向导...................40标准偏差选项, “范围”地图........256标准组页眉, 创建...............168别名........................413饼图........................241“饼图”地图...................257“饼图”地图上的地理区域..........257不等于链接....................435不对称性

创建......................320恢复对称性..................320

484Crystal Reports 用户指南

布局

地图.......................254图表.......................240

C

Case 逻辑......................130Crystal 语法

创建公式....................363菜单命令, 动态 OLE...............273参数, 格式化日期/时间字段..........222参数字段......................374插入........................85创建

报表标题..................396带级联值列表...............386带有动态提示...............384带有静态提示...............381和辅助功能..................467筛选数据....................125删除.......................393使用

链接子报表.................402在记录选定区域中............125条件格式设置.............396, 467响应提示....................394性能.......................125用于设置排序顺序..............399子报表链接..................402残障人士请参阅辅助功能“插入”菜单

OLE 对象....................274“图片”命令.................274查询

编辑.......................299查看 SQL....................300定义数据选定区域..............297对象快速引用.................298构建.......................297筛选器.....................300提示.......................300运行.......................297查询筛选器。请参阅 筛选器查询提示。请参阅 提示

常量公式......................451超级链接字段, 插入................88撤消/恢复活动..................237成员

显示标题或名称...............320储备库........................100Enterprise 项文件夹...........103访问储备库..................101工作流程....................101使用“撤销”命令.............110添加文件夹..................104添加项目....................104命令.....................106位图图像..................105文本对象..................105自定义函数................105储备库对象.....................100删除.......................109修改.......................108用于报表....................106在报表中更新.................109垂直位置......................215从文件导入基于文本的对象..........207存储过程......................439及性能.....................121错误消息, 描述..................454

D

DBMS, SQL.....................439DISTINCT 子句..................440打印

报表区域特性..................68打印机驱动程序考虑因素.........219更新打印机驱动程序............219横向.......................218跨越多页的交叉表..............293纵向.......................218打印机驱动程序

不一致.....................219更新.......................219大于或等于链接..................433

索引485

大于链接......................432带有 Case 逻辑的 If-Then-Else......130单元格

修改对齐方式................294修改宽度/高度................294导出

报表......................326到 Excel...................330到 Exchange 文件夹............332到 Lotus Domino..............333到 Microsoft Mail.............334导出的格式类型...............326到磁盘文件..................331到应用程序..................330到传真.....................325目标......................329导航.........................338报表部件深化................341其他报表对象................343设置......................338数据上下文格式...............347导航, 和辅助功能................466等于链接......................431第 508 条款, 《美国复健法案》

(Rehabilitation Act).......458, 477地图.........................254插入到“交叉表”.............261创建

使用 OLAP 布局且基于 OLAP 多维数据集.

263

使用“高级”布局且基于详细资料字段...

258

使用“组”布局且基于组字段....260放大和缩小..................267放置何处...................257更改

边框....................269标题....................264层......................265地理地图.................267类型....................265居中......................

268

类型属于...................255平移......................268深化......................257使用地图专家编辑.............264使用延伸功能................269数据不匹配..................266地图布局

高级......................254交叉表.....................254OLAP......................255组........................254地图导航器

显示......................268隐藏......................268地图类型.....................254饼图......................257点密度.....................256范围......................255分级......................256条形图.....................257地图专家.....................255编辑地图...................264.................256调用堆栈.....................369动态提示, 概述.................375对比度, 颜色..................464对齐方式, 为单元格修改...........294对象

复制和粘贴 OLE...............272格式设置....................50合并相关节..................182和准线.....................208静态 OLE...................274可变长度...................185快速引用...................298链接和嵌入 (OLE).............276链接位图图像................277OLAP 网格..................311OLE.......................270嵌入......................276使用准线调整大小.............211

“点密度”地图

水晶报表Crystal Reports培训教程 35_水晶报表教程

486Crystal Reports 用户指南

使用准线定位.................211文本, 插入...................86有条件地更改 X 位置............232与准线对齐..................209多次传递建立报表................451多个节........................180删除空白行..................185用于报表....................184多列报表......................201

E

Enterprise 文件夹................335报表打开方式.................335保存或发布报表到..............337Enterprise 项文件夹

计划报表从..................103使用.......................103Excel, 导出到...................330Exchange 文件夹, 导出到...........332

F

发布到 BusinessObjects Enterprise。请参阅 Enterprise 文件夹

FROM 子句......................441反馈, 有关文档..................479“范围”地图....................255标准偏差选项.................256相等范围选项.................256相等计数....................255自然中断选项.................256放置多行、基于文本的对象..........206放置基于文本的对象...............204非文本对象.....................461“分级”地图....................256分组.........................144报表........................55初始排序方向.................144分层次.....................154根据名称的第一个字母...........153及性能.....................128使用 SQL 表达式...............129数据按间隔..................151

在服务器上..................128指定排序顺序.................144服务器, 分组...................128服务器端处理...............119, 442辅助功能......................457好处.......................457和 BusinessObjects Enterprise....475和 Crystal Reports............457设计考虑....................459准则.......................458资源.......................477辅助技术......................457

G

GROUP BY 子句..................442甘特图........................243高度, 为单元格修改...............294格式, 更改字段默认值.............222格式设置......................195报表的数据...................90边框、颜色和阴影..............220单元格对齐方式...............294单元格宽度/高度..............294对象........................50个别交叉表字段...............294横排页面....................227计帐规则....................226交叉表.................279, 293交叉表中行/列的背景颜色........294绝对.......................220OLAP 网格...................317删除空白行..................185设置突出显示优先级............236使用参数字段应用条件...........396使用格式刷..................237使用“突出显示专家”条件格式化...234属性.......................220添加

形状.....................225有条件地添加空白行..........186直线.....................224

索引487

条件格式设置................229修改直线...................224一次若干“交叉表”字段........295格式刷, 使用...................237公式.........................356编辑......................365公式副本.................368布尔值.....................230查找及替换文本...............366常量......................451创建......................363运行总计.................178在“公式专家”中...........364典型用途...................356调试......................369调试求值时间错误.............369复制

从联机帮助................366从一个报表到另一个报表.......367公式编辑器..................362公式工作室..................361公式专家...................364和汇总.....................130何时避免...................129和运行总计..................130记录选定...................131记录选定模板................135类型属于...................360报表公式.................360警报公式.................360搜索公式.................360条件格式设置公式...........360选定公式.................360运行总计条件公式...........360删除......................368使用参数字段................374添加......................363下推选定...................122疑难解答...................

137

语法......................358选择....................362在报表中插入................363增强的记录选定...............122组件......................357输入....................362公式编辑器....................362公式工作室....................361工作室树...................361公式专家.....................364公式字段

插入.......................84绘制图表于..................244链接到/从..................409工作台, 使用...................96构架

关系模型...................412客户端/服务器...............437股票图.......................242顾问, Business Objects...........479关系数据库....................412索引......................415过程, 存储....................121

H

HTML 预览选项卡.................80行

添加......................224修改......................224有条件地添加空白.............186在中间添加/删除空白区域........228行间距.......................216合并、排序和分组...............144和辅助功能....................470横排页面

编制页码...................227重复对象...................227徽标, 插入..................58, 87汇总报表, 可用性...............116汇总分组的数据.................160汇总数据, 深化..................91

488Crystal Reports 用户指南

汇总信息, 添加...................49汇总字段, 在其上绘制图表..........246汇总组值, 排序..................161货币字段, 使用“突出显示专家”设置格式......

234

活动组页眉......................57创建.......................168基于公式....................169

J

记录

创建运行总计.................173链接关系....................418排序....................57, 141单一字段..................142组内.....................147设置选定....................131选择

按日期....................136按日期/数字/字符组合.........136按数字....................135按字符串..................135用预置日期范围..............136记录读取过程...................451记录选定.......................52设置.......................131使用公式....................133使用“选择专家”..............132下推.......................122性能提示....................123记录选定公式

编写策略....................124不需要的空格.................140创建.......................149大写/小写不一致...............139高级.......................124精调.......................139模板用于....................135使用 If 语句.................140使用参数字段.................374性能.......................122

疑难解答....................137计算字段, 链接到/从..............409基于文本的对象, 使用准线..........208基于文本的对象间的间距............207使用网格....................207缩进行.....................212选择网格....................208计帐规则, 使用..................226技术支持......................479间隔, 将数据分组................151建立报表

多次传递....................451两次传递....................451降序排序顺序...............142, 144交叉表........................279插入地图....................261插入图表....................247打印跨越多页的交叉表...........293格式设置....................293个别字段..................294行/列背景颜色..............294一次若干字段...............295汇总字段

缩写.....................291显示方向..................296取消

空行和空列................295小计和标签................296总计.....................295使用.......................290使用运行总计.................292修改

单元格对齐方式.............294单元格宽度/高度.............294以百分比显示值...............290自定义行/列标签..............291交叉表报表向导...................40教育。请参阅 培训

节...........................199报表页眉.....................75报表中的多个.................184

索引489

标识.......................76插入......................180拆分......................183调整大小...................183合并两个相关的...............182取消以删除空白区域............229删除......................181设置为只读..................221调整大小以删除空白区域.........229详细资料....................75页眉.......................75移动......................181节, 和辅助功能.................468警报。请参阅报表警报

绝对格式设置...................220

K

开/关属性, 条件................230可变长度的对象.................185客户端/服务器构架...............437服务器.....................442服务器端处理................442客户支持......................479可视链接专家...................425空白区域......................228通过调整大小删除.............229通过调整大小添加到节..........228通过取消节删除...............229空白行

取消......................205删除......................185宽度, 修改交叉表................294框

插入......................225格式设置...................

225

L

Lotus Domino

导出到.....................333雷达图.......................242联机客户支持...................479

链接

表.....................82, 417表的性能...................120从表......................418到/从公式字段...............409到/从计算字段...............409到表......................418和嵌入的对象................276可视链接专家................425两个或更多个数据库表...........82没有索引的表................409SQL 表.....................422SQL 数据库考虑...............422数据文件...................421索引表.....................425位图图像对象................277一对多.................403, 418一对一.....................418子报表.....................403子报表到主报表...............406子报表和性能................118链接关系.....................418联接类型.....................426内部......................427完全外部...................430右外部.....................429左外部.....................428链接类型.....................426不等于.....................435大于......................432大于或等于..................433等于......................431小于......................433小于或等于..................434链接选项.....................426两次传递建立报表...............451量度图.......................242.................51漏斗图.......................243

“另存为”对话框

490Crystal Reports 用户指南

M

Microsoft Mail, 导出到............334面积图........................241命令

从储备库添加.................107动态 OLE 菜单................273OLE........................274添加到储备库.................106图片.......................274模板.........................195删除.......................196应用.......................195在向导中选择.................195重新应用....................197模板字段对象...................197默认打印机.....................218模式

编辑.......................187移动/调整大小................187

N

内部联接

......................427

O

OLAP

创建 OLAP 报表...............312更改网格视图.................320更新数据库位置...............316建立报表....................311OLAP 报表向导....................40OLAP 多维数据集

地图制作....................263绘制图表于..................248OLAP 数据

过滤.......................323排序.......................322OLAP 网格

格式设置....................317过滤.......................323排序.......................322添加计算....................324添加总计....................320

透视.......................321字段重新排序.................321OLAP 网格对象..................311OLAP 字段重新排序...............321OLE..........................270动态菜单命令.................273功能.......................271和“图片”命令...............274链接和嵌入的对象..............276嵌入对象....................276OLE 对象

复制和粘贴..................272静态.......................274链接和嵌入..................276嵌入.......................276在报表中插入.................272在报表中的表示法..............273ORDER BY 子句..................442

P

排序

按汇总组值..................161按记录.....................141报表........................55单一字段....................142记录........................57组内.....................147及性能.....................128OLAP 网格...................322使用 SQL 表达式..............129组........................452组(有条件地)...............146最后 N 个...................452最前 N 个...................452排序, 添加到 OLAP 网格............322排序顺序

初始.......................144降序...................142, 144升序...................142, 144使用参数字段设置..............399指定.......................144

水晶报表Crystal Reports培训教程 35_水晶报表教程

索引491

排序字段......................141培训, 有关 Business Objects 产品....480屏幕读取器....................457

Q

气泡图.......................242嵌入, 和链接对象................276嵌入字段, 取消空白行.............205强制联接选项

强制两者...................431强制至.....................431强制自.....................430未强制.....................430强制两者......................431强制至.......................431强制自.......................430区域, 标识.....................76全局变量

何时避免...................130

R

RDBMS 应用程序.................412日期, 选择记录.................136日期/时间字段

格式设置...................222自定义.....................223日期范围, 记录选择..............136日期字段

格式设置...................222自定义.....................

223

S

SELECT 子句...................440SQL.........................436存储过程...............121, 439DBMS......................439服务器端分组................444和 Crystal Reports............440联接类型...................426链接时的数据库考虑............422使用表达式..................127

数据库.....................423使用....................436语言......................440SQL 表达式字段

创建.......................84放置于报表上.................84何时使用...................127性能......................127用于 Case 逻辑...............130..............84SQL 查询, 编辑.................440SQL 链接类型..................426SQL 语句

DISTINCT 子句...............440FROM 子句..................441GROUP BY 子句...............442ORDER BY 子句...............442SELECT 子句.................440WHERE 子句..................441SQL, 查看.....................300三维平面图....................242三维梯形图....................241筛选器

编辑......................308创建......................300高级

创建....................303合并....................306命名....................305删除......................308使用 And 或 Or 来合并.........308与提示合并..................302运算符参考..................309筛选器, 添加到 OLAP 网格.........323删除

节........................181空白行.....................185上下文报表部件, 用户方案.........346设计报表...............64, 66, 220操作数据....................67

“SQL 表达式”选项卡

492Crystal Reports 用户指南

插入

超级链接字段................88附加字段...................46节.......................180OLE 对象..................272数据库字段..................44特殊字段...................86图片......................87文本对象...................86拆分并调整节大小..............183创建原型.....................69打印特性.....................68多列.......................201放置

参数字段...................85地图.....................257公式字段...................84SQL 表达式字段...............84数据......................84数据库字段于................84特殊字段...................85图表.....................243文本对象...................86运行总计字段................85格式设置

对象......................50数据......................90更改

地图边框..................269地图标题..................264图表边框..................252合并相关节..................182和辅助功能..................459绘制图表

在 OLAP 多维数据集上.........248在公式字段上...............244在汇总字段上...............246在交叉表汇总上..............247在详细资料字段上............244在一个小计字段上............246记录选定.....................90基于文本的对象间的间距.........207决定内容.....................64绝对格式设置.................220链接两个或更多个数据库表.........82平衡字段间距..................54取消节以删除空白区域...........229如何表示 OLE 对象.............273删除

节......................181字段......................54使用

多个节...................184HTML 预览选项卡..............80OLAP 网格对象..............311“设计”选项卡区域............75在打印前使用“预览”选项卡.....77使用“设计”选项卡.............74调整大小

节以添加空白区域............228添加

标题......................50标题到子报表...............410标题页....................93摘要信息................49, 93字段标题...................51条件格式设置.................229条件开/关属性................230调整大小

节以删除空白区域............229字段......................47修改图表的图例文本............253选择多个对象.................213移动节.....................181隐藏报表对象.................202隐藏报表节..................202组织数据.....................90设计解决方案...................198...................74拆分节......................77垂直准线.....................77调整节的大小..................77

“设计”选项卡

索引493

节.........................44区域.......................75水平准线....................77与“预览”选项卡比较...........79设置格式, 和辅助功能.............463深化

对汇总数据...................91使用地图...................257图表的.....................243图表图例的..................243升级组件.......................37升序排序顺序...............142, 144使对象与准线对齐................209时间字段

格式设置...................222自定义.....................223示例数据.......................39实时数据......................115数据

BLOB 字段....................88初始排序方向................144创建自定义组................145放在报表上...................84分组...................55, 144按间隔...................151分层次...................154根据名称的第一个字母........153辅助功能的格式设置............470汇总分组的..................160降序排序顺序............142, 144将组内记录排序...............147交叉表.....................279链接.......................82排序字段...................141升序排序顺序............142, 144实时......................115刷新报表...................394为报表格式化.................90小计分组的..................164选择报表的记录................90

已保存.....................115指定顺序...................144最小化传输..................111数据不匹配, 在地图中解决.........266数据库.......................412别名......................413更改名称和位置...............413关系......................412及性能.....................119示例.......................39线程安全驱动程序.............121选择.......................42数据库表

索引......................415数据库管理系统, SQL.............439数据库文件

定位......................414数据库字段

插入.......................44放置于报表上.................84在文本对象中组合..............47重新映射已更改的字段..........447...............78数据文件, 链接.................421数据传输, 最小化...............111属性

条件开/关..................230条件特性...................230数值, 使用计帐规则..............226数轴图.......................242数字

格式设置...................226在记录选定区域中.............135刷新数据

报表数据...................394参数字段...................374缩放功能.....................251索引, 性能....................119索引表.......................415链接......................425

“数据年龄”指示器

494Crystal Reports 用户指南

T

TrueType 字体...................217套用信函

插入地址....................190插入日期....................190称呼.......................191创建.......................189打印条件消息.................193使用文本对象.................187特殊字段, 插入...................86特性属性, 条件..................230提示

创建动态提示.................384创建级联的动态提示............386创建静态提示.................381概述.......................374构建.......................301考虑因素....................375与筛选器合并.................302最佳做法....................391提示组, 描述...................381添加

OLAP 网格的计算...............324OLAP 网格筛选器...............323条件格式设置...................229对于辅助功能.................467使用参数字段.................396使用突出显示专家..............234条件开/关属性...................230条件特性属性...................230条件消息, 在套用信函中打印.........193条件性组排序...................146条件运行总计, 为组创建............175条形图........................241缩放.......................251“条形图”地图..................257调整大小

对象.......................187节

删除空白区域...............229添加空白区域...............228字段........................47停靠资源管理器...................98

统计表........................239创建.......................244在 OLAP 多维数据集上.........248在公式字段上...............244在汇总字段上...............246在交叉表汇总上.............247在详细资料字段上............244在小计字段上...............246放置.......................243更改边框....................252将延伸功能用于...............253类型.......................240饼图.....................241甘特图...................243股票图...................242雷达图...................242量度图...................242漏斗图...................243面积.....................241气泡图...................242三维曲面图................242三维梯形图................241数轴图...................242条形.....................241条形图, 缩放...............251圆环图...................241折线.....................241折线图, 缩放...............251直方图...................243深化.......................243使用图例..................243缩放功能....................251条件格式化..................252XY 散点图...................242修改

使用图表选项命令............249使用图表专家...............249图例文本..................253指定

条件.....................244值......................244自动排列....................251

索引495

透视 OLAP 网格.................321图表布局......................240高级..................240, 244交叉表.................240, 247OLAP..................240, 248组....................240, 246图表专家......................240修改图表...................249突出显示异常和辅助功能...........465突出显示专家...................234设置优先级..................236条件格式设置................235图片

插入....................58, 87...............274图像

插入.......................87从储备库.................106动态......................275添加到储备库................105在报表中插入................274图形, 插入..................58, 87

U

Unicode 支持...................450Universe

连接到.....................

297W

Web 报表, 优化性能..............111Web 内容辅助功能准则.............458Web 文件夹, 使用................334WHERE 子句....................441Web

获得文档的方式...............478客户支持...................479实用地址...................480Web 站点

培训......................480支持......................479完全外部联接...................430网格

OLAP......................320透视......................

321

网格对象, OLAP.................311网络, 客户端/服务器.............437网页辅助功能倡议 (Web Accessibility

Initiative).................477维

显示和隐藏成员...............320未强制.......................430位图图像对象

从储备库插入................106链接的.....................277添加到储备库................105文本对象.....................187编辑模式...................187插入.......................86从储备库.................106放置于报表上.............86, 461辅助功能的格式设置............463添加到储备库................105移动/调整大小模式............187用于创建套用信函.............189组合数据库字段................47文档

产品 CD 上..................478路线图.....................478Web 上.....................478有关反馈...................479文件, 定位....................414..............51无提示安装.....................35

X

Xtreme.mdb.....................39XY 散点图.....................242线程安全数据库驱动程序...........121显示维度成员..................320向导.........................39标准.......................40交叉表......................40OLAP.......................40邮件标签....................40相等范围选项, “范围”地图........256相等计数, 在“范围”地图上........255

“图片”命令和 OLE“文件另存为”对话框

水晶报表Crystal Reports培训教程 35_水晶报表教程

496Crystal Reports 用户指南

详细资料字段

创建地图....................258绘制图表于..................244“详细资料”节...................75隐藏.......................116小计分组的数据..................164小计字段, 绘制图表于.............246小于或等于链接..................434小于链接......................433信息资源......................478性能

表链接选择..................120带子报表....................117对报表的考虑.................423关键策略....................112记录选定考虑.............122, 123设计考虑....................114使用表索引..................119优化.......................111形状, 添加.....................225选定公式

参数字段....................374范围限制条件.................422及性能.....................122模板用于....................135疑难解答....................137选项卡

SQL 表达式...................84设计........................74“预览”和“设计”之间的不同点....79选择

多个对象....................213选择条件.......................52选择专家..................132, 148和公式编辑器.................134用于组选定..................149

Y

颜色

对比度.....................464和辅助功能..................464添加.......................220

延伸功能

对地图使用..................269使用图表....................253页边距........................217页脚..........................92页脚, 节.......................75页脚, 在第一页后创建.............233页脚, 在该页之后创建.............233页眉..........................92创建标准组..................168活动组页眉..................168取消.......................171深化.......................171自定义组, 创建...............170页眉, 节.......................75已保存数据.....................115已保存数据的索引................448考虑因素....................449选择要进行索引的字段...........449一对多链接

处理.......................421性能考虑....................418依赖项检查器, 使用................97疑难解答

记录选定公式.................137组选定公式..................150隐藏

报表对象....................202维度成员....................320组页眉.....................171应用程序, 安装...................30用户函数库 (UFL)................359邮件标签报表向导.................40右外部联接.....................429................47, 77标准视图.....................78与“设计”选项卡比较...........79“组树”视图..................78预先打印好的窗体................201语言, SQL.....................440圆环图........................241

“预览”选项卡

索引497

原型, 纸张设计..................69运算符, 查询筛选器参考...........309运行总计......................172创建......................173使用公式.................178为组....................174一对多链接..................176

Z

展开维度成员...................320折叠维度成员...................320折线图.......................241缩放......................251值

参数字段...................374创建自定义组................145单一字段排序................142对汇总的组排序...............161货币, 显示..................212降序排序顺序............142, 144排序方向...................142升序排序顺序............142, 144数字, 显示..................212支持

地点......................479技术......................479客户......................479Web 站点...................479指定排序顺序...................144直方图.......................243直接访问数据库

表, 链接...................425值列表

不同的值和说明...............389从储备库添加................108概述......................378共享公共列表................388空值处理...................390类型......................378命令对象作为数据源............390使用......................388

智能标记.....................349智能链接.....................425链接表与多个索引.............425直线

重新导入子报表.................405传递........................451第 1 次预传递...............451第 1 次传递.................451第 2 次预传递...............452第 2 次传递.................452第 3 次传递.................452多次传递建立报表流程图.........453专家

地图......................255图表..................240, 249突出显示...................234选择......................132最前 N 个/排序组.............161传真报表.....................325准线

查看......................208插入......................209调整对象的大小...............211定位对象...................211对齐对象...................209使用准线设计................208子报表.......................401插入......................403创建按需要显示...............410更新链接的报表...............405和 SQL 数据库...............423和辅助功能..............462, 469何时使用...................401将标题添加到................410链接......................118到主报表而不修改选定公式.....407到主报表内的数据...........406链接的与未链接的.............401另存为主报表................405慎用......................117

498Crystal Reports 用户指南

使用

对无法链接的数据............408组合不相关的报表............407相同数据的不同视图............411性能.......................117一对多和数据库链接............403预览.......................404重新导入....................405自定义函数

添加

到储备库..................105在“公式专家”中使用...........364字段

别名.......................413插入........................44打印日期...................86附加......................46记录号.....................86特殊字段...................86页码......................86总页数.....................86组号......................86访问 BLOB 数据................88格式设置

交叉表中个别...............294一次若干..................295更改默认格式.................222截断值.....................212链接到/从计算................409OLAP 网格重新排序.............321排序.......................141删除........................54设置为只读..................221锁定大小和位置...............222调整大小.....................47外观........................45选择........................46字段标题, 插入...................51字段间距, 平衡...................54字符串, 选择记录................135

字符间距......................216子句

DISTINCT....................440FROM.......................441GROUP BY....................442ORDER BY....................442SELECT.....................440WHERE......................441自然中断选项, “范围”地图........256字体

设置小数字体大小..............216有条件地更改.................232自由格式位置

打开.......................214关闭.......................214使用准线....................215资源.........................478资源管理器, 停靠.................98总计..........................91及性能.....................128使用 SQL 表达式..............129总计, 运行.....................172组

编辑.......................159创建

使用公式创建运行总计.........178条件运行总计...............175运行总计..................174自定义...................145计算百分比..................166排序

按汇总值..................161组内记录..................147小计.......................164用“选择专家”选择............148有条件地排序.................146组排序........................452组选定公式

创建.......................149疑难解答....................150组页脚节.......................76

索引499

组页眉

标准组页眉..................168创建......................167活动, 基于公式...............169取消......................171深化......................171实时.......................57自定义, 创建................170组页眉节.......................75组值, 汇总排序.................161最后 N 个

排序......................452选择百分比..................161选择组.....................161有条件地选择百分比............163有条件地选择组...............163最前 N 个

排序......................452选择百分比..................161选择组.....................161有条件地选择百分比............163有条件地选择组...............163最前 N 个/排序组专家.............161左外部联接....................428《美国复健法案》(Rehabilitation Act), 第 508 条款................458, 477

四 : 水晶报表(通俗易懂,优秀的入门教程)

索引

【水晶报表内功心法】--推拉之间

============================================================

水晶报表程序控制上有两种模式,也就是传说中的PULL模式和PUSH模式。口语化点就是拉模式和推模式。

把这个放在最开始讲,是因为模式的选择,会影响到后续的开发。

特别是看到一些使用者,把两种模式的代码里捏在一个过程里,出了错误,都不知道怎么去调试。

本文将讲解两种模式的基本原理,区别,以及各自的优缺点,还有部分开发报表的基本原则。 同样,本文是没有代码的,代码将从下一篇文章开始。

1.1 拉(PULL)模式:

由水晶报表模板(引擎)直接连接数据库(源),从数据库(源)里拉取数据

就是我们在水晶报表里设置好数据库信息,以及相关的表。

当我们在程序中调用水晶报表引擎,挂载模板后,水晶报表引擎会根据模板里的数据库信息,及表信息主动连接数据库,

返回数据给报表模板,模板根据设计样式进行呈现。

基本流程如下图所示

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(图1-1-1)

1.2 推(PUSH)模式:

由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不不跟数据库进行交互。

其基本流程图如下

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

(图1-1-2)

对比两个图,黑色的箭头表示我们要自己进行编码,蓝色的箭头表示是水晶报表与数据源的自动交互过程,不需编码。

这样我们很容易看到,使用PUSH模式将会比PULL模式多了不少代码。

而且因为PULL模式是直连数据库,比PUSH模式的先获取数据结果,然后推送给水晶报表少了一个过程。而中间结果集本身就占用系统资源。

所以PULL模式比PUSH执行效率高。

那么两者的差异就出来了

1:PULL模式代码量少

2:PULL模式执行效率高

3:实际开发过的朋友也有体会,使用PULL模式,模板开发的速度也比PUSH模式模板简单一些

这几点上,似乎PULL模式已经完全把PUSH模式打败了,呵呵。

那么为什么 PUSH模式还存在,且被大量使用呢?

我们再返回去看上面两个示意图,

大家注意到图1-1-1中,是由水晶报表连接的数据库,也就是说,水晶报表引擎单独占用了一个数据库连接。

而只有在水晶报表对象释放后,数据库连接才会释放(这个时段对系统时间来说,是比较长的,特别是如果要翻页等需要长时间连接数据库的情况)。

而在图1-1-2中,数据库是由应用程序去连接的,水晶报表本身不连接数据库。这样,系统就能使用公用的数据库连接。

这样一来,就节约了数据库的连接消耗。

这一点,在多用户的系统环境内,少一次数据库连接对系统性能的影响对系统的影响是比较关键的。

当然,我们也应该注意到,PUSH因为存在一个Dataset,所以会占用系统资源。 这两个方面大家需要综合考量。

这是个基本的,下面我在列一下PUSH的优势。

1:可以公用系统数据库连接,减少数据库连接损耗

2:可自由组合多数据源(如多数据库等),这一点PULL模式也可以实现,但是不如这个方便

3: 灵活多变

灵活多变的说法,是因为由于我们是把数据获取后,再PUSH给水晶报表的,那么在这个中间,就有很多数据再加工的可能性。

大家可以看一下我之前写的

动态(万能)水晶报表:任意表,任意列,动态格线调整

水晶报表动态表扩展 之 任意无关联表,任意列,任意数据源

水晶报表动态表扩展 之 任意SQL及任意有关联表,任意列 及其他

好了,总结一下:

1:CS模式或小型系统,建议用PULL模式,大型BS系统,建议用PUSH模式。

但这不是绝对的,可以根据实际情况混用。如果是大数据量的清单类的报表,建议用PULL。 2:无论什么模式,返回尽可能少的数据给报表。

3:通常情况下,无论是PULL还是PUSH模式,数据源处理部分只负责把数据传给报表,至于怎么呈现是报表里去做的

有的人问到:做交叉表怎么传数据,做图表怎么传数据,做列表怎么传数据,实质上,做法都是一样的。

当然,特殊情况除外。如:SQL交叉表,自定义图表等等。

【水晶报表内功心法】--PULL模式样板招式

============================================================

在前一篇中,讲解了PULL和PUSH模式的区别。

本节中主要是从无到有地讲解一下如何使用PULL模式来做一个报表。

因本文主要针对初学者,所以每个步骤都抓了图。

以 Web应用为例

首先,新建一个Asp.net CrystalReports站点

水晶报表教程 水晶报表(通俗易懂,优秀的入门教程)

稍等一会后会出来一个默认的水晶报表向导

本文标题:水晶报表教程-水晶报表(通俗易懂,优秀的入门教程)
本文地址: http://www.61k.com/1077614.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1