本章对菜单栏中的报表功能的操作以及应用进行了详细的解说。
本菜单项的功能是用于定义在报表中用到的参数。
参数的概述:
在我们设计一张报表的时候,很少有里面的数据是固定不变的,常常需要根据一些条件来过滤出我们想要的数据。这就需要通过参数的形式控制报表中的数据。例如日报表,当我们希望生成一张日报表时,首先需要向报表传递日期参数,然后报表才会根据我们传递进去的日期参数,生成该日的日报表。
参数可以在数据集和表达式中被引用。
sql语句中使用参数
Ø 用法1:
如上图所示,在sql语法里,需要用到参数的地方写上问号,不用考虑参数的数据类型,程序中会自动转换。然后在参数tab页中按照问号顺序,写入参数名或含参数的表达式,如下图所示:
如果sql语句是执行存储过程,而且结果集是通过输出参数来输出的,那么输出参数也用问号表示,和该问号相关的参数写成“@@result”
Ø 用法2:
如上图所示,在报表中定义参数,然后可以在sql语句的任意一个位置中使用,格式为${参数名},并且不需要在后面的【参数】中再进行定义。
query/call函数中使用参数
sql语句中使用问号,然后在sql语句后面用逗号分隔,跟上参数或含参数的表达式,有几个问号就跟几个。
如果sql语句是执行存储过程,而且结果集是通过输出参数来输出的,那么输出参数也用问号表示,和该问号相关的参数写成“@@result”。
● 举例:
query("SELECT max(amount) FROM contract WHERE contract.signdate >? and contract.signdate <?", starttime, endtime)
call("{call ResultSet (?,?,?)}","@@result","000001",a2)
表达式中使用参数
(1) 直接在表达式中引用参数名,把参数作为变量来使用,如果参数名和字段名或其他名称相重复,那么在参数名前加@符号,如 @参数名
举例:="从 "+str(@starttime)+" 到 "+str(@endtime)
(2) 表达式中使用${arg1}引用参数
举例:=ds1.${arg1}
参数的定义:
点击 报表-参数,可打开参数编辑界面,如下图所示:
点击【增加】按钮,可添加一个参数定义,你可以编辑参数的名称、描述、数据类型、值表达式、参数类型等属性;在参数列表中选择一个参数,点击【删除】按钮,可删除该参数;通过点击【上移】/【下移】按钮,可调整参数列表中参数的位置。编辑完点击【确定】按钮即可。通过点击【复制】按钮,可复制选中的参数,按住ctrl键,可复制多个参数;打开其他报表,通过点击【粘贴】按钮,可将复制的参数添加到其他报表的参数配置界面。
名称
名称可以使用默认的,也可以根据需要自己编辑,数据集和表达式中引用参数时,用的就是它的名称。比如:starttime。
描述
描述可以使用默认的,也可以根据需要自己编辑,主要用来标识该参数的含义。比如:起始时间。
数据类型
参数是一个变量,因此有数据类型。支持的数据类型有:整数、长整数、短整数、大整数、浮点数、双精度数、数值、实数、字符串、日期、时间、日期时间、布尔值、长整数组、短整数组、大整数组、浮点数组、双精度数组、数值组、日期组、时间组、日期时间组、字符串组、自动。参数的默认数据类型是字符串。
其中长整数组、短整数组、大整数组、浮点数组、双精度数组、数值组、日期组、时间组、日期时间组、字符串组属于数组类型,可用于一次性传入一组参数。数组类型的参数应用非常广泛,可以在sql中使用,也可以在单元格中使用,也可以灵活运用于报表的不规则分组、扩展等。数组型参数录入时,多个值之间用英文逗号分隔,例如:1,2,3,4等。
获得数组型参数的元素个数:count(argName),其中argName是个数组参数。
获得数组型参数中第二个元素:argName(2)。
数组型参数由于是个数组集合,因此可以象集合表达式一样直接写入单元格进行扩展。
有的报表分组时,对于分为几组,分为哪几组是不确定的,这个时候将参数类型设置为相应的数组类型,就可以通过每次输入的参数值来动态控制分组。
● 举例:
定义参数arg_1,参数类型为字符串组,在某一单元格中编辑=arg_1,并将该单元格设置为横向扩展。
如果参数赋值为高中、专科、本科、硕士,
则该单元格横向扩展为;
如果参数赋值为小学、初中、高中,则该单元格横向扩展为。
值表达式
在这可以设置该参数的缺省值,也可以不设置。不设置时当null处理。
参数类型
定义参数的参数类型为普通参数还是动态参数,详细介绍参看下一章节。
参数的类型:
参数的类型有普通参数和动态参数。
普通参数
普通参数直接将输入的参数值传给报表进行运算。如果输入的参数值不做任何变化直接传给报表进行计算,我们就可以定义参数类型为普通参数。
动态参数
动态参数是一个表达式(不用等号开头),报表运算时先解析该表达式,然后将表达式计算出的结果作为参数值传给报表进行运算,用动态参数的时候要注意参数的数据类型。动态参数适用于需要动态解析表达式的场合。
● 举例:体会普通参数和动态参数的区别
通过下面的例子看两者的区别,首先定义参数,如下图所示:
三个参数的参数类型和数据类型不同,请注意看一下,设计的报表如下图所示:
为便于查看其中的区别,三个单元格的背景色做了不同的设置,预览效果如下图:
通过这张表可以看出普通参数与动态参数、动态参数之间数据类型不同时的区别。
参数的引用:
在报表中对参数的引用除直接在表达式中写参数名外,还有如下两种引用方式:
« @参数名 在表达式中被当成变量来使用,在表达式进行计算的过程中,才引用参数的变量值。
« ${参数名} ${参数名}的引用方式是代表一个没有数据类型的字符串标识,在报表运算之前,系统会全面搜索整张报表定义,将所有${}中的参数名替换成参数值,${参数名}中的参数名不能写在引号里。
利用${参数名}引用可以在报表中动态的进行表达式的替换,根据用户传入的不同参数值,在报表中可以计算出不同的表达式结果,从而得到不同的报表信息,这样用户就不用根据不同的情况编制许多不同的报表了,大大减轻了用户的工作量。
属性值不能用${参数名}格式引用,${参数名}引用只能用在表达式中。填报属性、数据集属性中的参数值,这两个地方目前不能用这种引用方式,其它地方的表达式都可以使用。
例如:
单元格表达式为 =ds1.select(${arg1}),而arg1的值为name,那么该表达式会被替换成=ds1.select(name),替换后才进行表达式的运算。
本菜单项的功能是用于定义报表中用到的数据集。
数据集的概念:
数据集是一个二维的视图,是报表的数据来源。数据集可以通过数据库的sql查询获得,也可以来自其他异构的数据文件。报表运算引擎不关心数据集的数据来自哪里,始终基于数据集的数据来运算报表。
数据集的定义:
点击 报表-数据集,或者使用快捷键 F11,可打开数据集设置界面,如下图所示:
图1.4.2.2-1
在上面的界面中,【增加】按钮用于添加一个数据集;【删除】按钮用于删除数据集列表中选中的数据集;【上移】、【下移】可以改变数据集在数据集列表中的位置;【编辑】按钮可以修改数据集列表中选中的数据集定义;【浏览数据】按钮可以查看数据集包含的数据信息;【别名】按钮可以为记录集中的字段起别名,当从数据源取字段时,很多情况都是英文字段,这时可以通过数据集字段中文标题设置界面,给每个英文字段名附上中文名,我们在制作报表时,从数据集取字段名时可以使用中文名了,这样给不熟悉数据集里英文字段具体含义的用户带来了便利,当数据集类型为内建数据集时,不用设置中文名称,可直接修改字段名为中文即可;【转为内建】按钮可以把外部数据集转为内建数据集,所谓内建数据集是指报表中的数据是存储在报表模板中的。通过点击【复制】按钮,可复制选中的数据集,按住ctrl键,可复制多个数据集;打开其他报表,通过点击【粘贴】按钮,可将复制的数据集添加到其他报表的数据集配置界面。
也可以通过 文件-新建报表 向导在制作报表的步骤中新建数据集,如下图所示:
在数据集类型列表中可以任意选择一个数据集类型新建报表,也可以直接点击生成空白报表生成一张空白报表。注意:如果选择的是SQL数据集,并且该数据集有参数,需先点击“添加报表参数”添加参数。
数据集类型:
系统提供了多种类型的数据集供用户使用,有SQL检索、存储过程、集算器、脚本数据集、文件数据集、内建数据和自定义类型。
SQL检索
表示数据集的数据来自数据库,它是通过SQL语句到数据库中检索满足一定条件的数据,从而形成一个数据集。但这种类型的数据集并不要求用户自己写SQL语句,而是通过图形化的向导界面由用户去选择检索条件由系统自动的生成SQL语句,这种类型的数据集适用于那些对SQL语句不太熟悉的用户。
● 举例:以订单表和订单明细表为例来建立一个SQL检索数据集。
1、在图1.4.2.2-1 所示的数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框,如下图所示:
2、选择“SQL检索”数据集类型,点击【确定】按钮,进入SQL编辑器界面,如下图所示:
3、选择“指定模式”,并通过“可选表名”框和“选中表名”框之间的箭头,在可选表名中选择数据表到选中表名中,也可以通过双击表名选择数据表。
4、切换到“数据字段”标签页,首先通过数据表下拉框选择对应的数据表,下面会列出对应数据表的可选字段,然后通过两个列表框之间的箭头,选择可选字段到选中字段中,也可以通过双击字段名选择字段。
5、切换到“计算列”标签页,通过编辑界面中间的箭头,选择所需要的字段到“计算列”编辑框中,自己编辑表达式。
比如:订单明细表中有单价与数量字段,希望在数据表里直接取出订单的单价与数量的乘积,则可以在计算列中编辑:订单明细.单价*订单明细.数量 as 总金额,如下图所示:
6、切换到“检索条件”标签页,通过编辑界面中间的箭头,选择所需要的字段到检索条件编辑框中,自己编辑表达式。SQL语句中可以使用参数,在sql语法里,需要用到参数的地方写上问号。
比如:如果希望从订单表里取出订购日期是某一时间段内的订单,则可以在检索条件中编辑检索条件:订单.订购日期 >? and 订单.订购日期<?。如下图所示:
7、切换到“排序”标签页,通过编辑界面中间的箭头,选择需要进行排序的字段到排序字段框中。
8、切换到“语法”标签页可以看到编辑好的SQL语句。在SQL语法里,需要用到参数的地方系统后自动写上了问号,比如我们在前面编辑的检索条件,用到了两个问号。如下图所示:
9、切换到“参数”标签页,按照问号顺序,写入参数名或含参数的表达式(不用等号开头)。在这里不用考虑参数的数据类型,程序中会自动转换。如下图所示:
数据集工厂侦听器类,该类由IDataSetFactoryListener 接口来实现,如果数据集创建不需要做特殊处理,就不用设置该属性。如果需要做特殊处理,则需要写一个数据集创建后处理类,用IDataSetFactoryListener 接口,实现它的public void beforeCreated(Context context, DataSetConfig dsc, DataSet arg2)及public void afterCreated(Context context, DataSetConfig dsc, DataSet arg2)方法(详细介绍可参考《程序员参考》5.3.1小节),并将编译后的类带包路径放在应用的classes下。(注:在设计器端,放到报表安装根目录下的classes文件夹中)
数据集工厂过滤器类,该类由IDataSetFilter接口来实现,如果数据集创建不需要做特殊处理,就不用设置该属性。如果需要做特殊处理,则需要写一个数据集创建后处理类,用IDataSetFilter接口,实现它的public boolean filter(Object[] arg0)、public void setContext(Context context)、public void setDataSet(DataSet ds)及public void setDataSetConfig(DataSetConfig dsconfig)方法(详细介绍可参考《程序员参考》5.3.2小节),并将编译后的类带包路径放在应用的classes下。(注:在设计器端,放到报表安装根目录下的classes文件夹中)
数据集记录行设置:用于控制数据集的按行取数。
起始行和结束行:用于人为控制数据集的行数。如果您的报表数据量比较大时,可以通过参数传递来改变起始行和结束行。一般来说,起始行和结束行都是输入参数,通过参数来控制行号,如果输入常数没什么意义。
记录阈值:针对大数据量生成数据集时,往往会长时间无响应。设置一个阈值(int),实际获得记录数超过阈值时中止运算。默认0,表示没有限制。
预警阈值:勾选后,先获得记录数,判断后未超阈值再生成数据集;不勾选,直接生成数据集,在生成过程中超过阈值,中断。
根据需要填写数据集工厂侦听器类名,以及起始行和结束行。没有特殊需要,可不填。
10、点击【确定】按钮,回到数据集设置界面。如果字段名为英文时希望给数据字段设置中文标题,可点击【别名】按钮,按照字段顺序为每个字段设置中文标题,然后在制作报表时直接使用中文名即可。
11、如果不想使用缺省数据集名称,可以手动编辑数据集名称,还可以选择不同数据源,最后点击【确定】按钮,完成数据集定义。
存储过程
表示数据集的数据来自存储过程。sql语句执行的时候要先编译,然后执行。存储过程就是编译好了的一些sql语句。应用程序需要用的时候直接调用就可以了,所以效率比较高。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和复杂的运算。存储过程可以返回结果集,可以返回参数,也可以同时返回结果集和参数。
存储过程的参数分为输入参数和输出参数两种。输入参数是存储过程执行的条件参数。输出参数类似于返回值,但是输出参数具有两个重要的优势:可以使用输出参数从存储过程传递出VarChar、Int、Money或任何其他数据类型的值,而返回值则只能返回整数。输出参数的另一个优势就是在一个存储过程中可以有多个输出参数,一个存储过程可以包含1024个参数(其中包括输入和输出参数),但是只能包含一个返回值。
● 举例一:带有输入参数的存储过程。
1、在图1.4.2.2-1 所示的数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
2、选择“存储过程”数据集类型,点击【确定】按钮,进入存储过程数据集界面,如下图所示:
3、切换到“参数”标签页,如下图所示:
参数的顺序必须与问号的顺序保持一致,并指定参数模式。这里用到的参数必须在 报表-参数 中定义,并且在 报表-参数 中定义参数时需指定对应的数据类型。
从上图可以看到,“参数定义”后有“结果类型”属性,如果“参数模式”为输入参数,选择“默认”就可以了,只要在 报表-参数 中定义参数时指定对应的数据类型即可。
● 举例二:带有输出参数的存储过程。
本例使用的数据库类型为:sqlserver2000 sp4
存储过程如下:
create proc Procname
@a char(100) output //默认定义的是输入参数,如果有关键字output说明是输出参数。
as
set @a='aaa'
select * from jobs
GO
该存储过程返回一个数据集和一个变量a,a的数据类型为char类型,值为’aaa’。
1、在图1.4.2.2-1 所示的数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
2、选择“存储过程”数据集类型,点击【确定】按钮,进入存储过程数据集界面,如下图所示:
3、切换到“参数”标签页,如下图所示:
参数对应call Procname(?)中的?,参数表达式为:@arg2,arg2是我们在报表中定义的一个普通参数,它接收Procname存储过程中输出参数a的值。结果类型为字符串,因为我们的输出参数a为char类型,所以结果类型为字符串。参数模式为:输出参数。输出名称为:arg2,我们在报表中就用arg2来引用存储过程中的输出参数a的值。
报表设计中需定义的参数:
报表设计:
预览报表,在参数arg2中输入任何值,报表展示后,E2{}中返回的都是’aaa’,arg2已经被调用的Procname存储过程的输出参数重新赋值了。
● 存储过程可以没有输出参数,但是如果你的存储过程是将结果集返回给一个参数,则需要在报表-参数里定义该参数,并指定该参数的“参数模式”为“输出参数”。这个时候,如果你的数据库是oracle,则还需要将这个输出参数的结果类型设置为“游标”。
集算器
集算器类型数据集是指数据集中的数据是从集算器文件中获取到的,集算器文件的运算结果可以通过return语句或者不写(不写时最后一个语句如果是赋值格,则会自动被返回)返回用作润乾报表的数据集。
集算器类型数据集界面如下:
DFX文件:通过DFX文件后面的按钮,选择集算器文件。
集算器文件路径既可以是绝对路径也可以是相对路径,在设计器中的相对路径是相对于【工具】—>【选项】—>【集算器选项】中配置的寻址路径,在web端是相对于 raqsoftConfig.xml中的Esproc里的dfxPath路径。使用相对路径时,路径前不要加反斜杠“/”。
缓存文件名对应的变量:缓存文件名对应的变量对应集算器文件中的缓存文件变量
数据管理方式:分为缓存和DFX自管理。
缓存—基于缓存文件取数
DFX自管理—通过自定义dfx取数。
参数:如果集算器文件中定义了参数,系统在参数列表中自动加载集算器文件中的参数名。参数列表中参数名对应集算文件里定义的参数名。参数值可以使用值,还可以使用报表参数,使用报表参数时可以对报表的参数通过表达式(这里使用报表的表达式语法)计算出结果传递给集算文件作为参数。
注意:
当数据集用于大报表,并且需在集算器数据集中自定义缓存文件时,需将缓存文件名对应的变量设置为集算器中的缓存文件变量。
● 举例:
集算器文件的内容如下:
在数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
选择“集算器”数据集类型,点击【确定】按钮,进入集算器数据集编辑界面,如下图所示:
点击DFX文件后面的按钮,选择集算器文件
系统在参数列表中自动加载集算器文件中的参数
5. 点击【确定】按钮,生成数据集
关于集算器数据集的更多用法,可参考《教程》18.1小节。
●注意:能够作为数据集类型被使用的集算器文件,如果用的是报表当前连接的数据源,程序有自动连接数据库机制,集算器文件中可以直接使用db.query()。如果用的不是报表当前连接的数据源,首先集算器文件中必须通过connect(”db”)函数建立数据连接,再进行查询,最后通过close()函数关闭该连接。
例如:下边的dfx使用的数据源与报表使用的数据源相同,则直接使用db.query()来进行查询:
脚本数据集
可直接在脚本编辑区添加计算表达式,通过return语句或者不写(不写时最后一个语句如果是赋值格,则会自动被返回)将结果集返回到润乾报表数据集中,脚本编辑区的表达式语法需遵循集算器语法。
脚本数据集界面如下:
● 举例:
在数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
选择“脚本数据集”数据集类型,点击【确定】按钮,进入脚本数据集编辑界面,如下图所示:
在脚本编辑区编写脚本,或粘贴写好的脚本(粘贴时,选中某单元格后点击粘贴按钮),如果脚本中需要传入参数,可在报表文件的参数列表中定义,其中参数名是脚本里定义的参数名。
4. 点击【确定】按钮,生成数据集。
脚本只支持10行5列,如果脚本内容过多,可使用集算器数据集。
●注意:脚本数据集与集算器数据集相同,如果用的是报表当前连接的数据源,程序有自动连接数据库机制,可以直接使用db.query()。如果用的不是报表当前连接的数据源,首先必须通过connect(”db”)函数建立数据连接,再进行查询,最后通过close()函数关闭该连接。
文件数据集
文件数据集是指数据集的数据是从文件中获取到的,支持txt、xls、xlsx、csv四种类型文件。
文件数据集界面如下:
文件:文件名,支持绝对路径或相对路径。在设计器中的相对路径是相对于工具-选项中的应用资源路径,在WEB端是相对于raqsoftConfig.xml中<Report/>里配置的home属性的路径。
工作表:当文件类型是Excel文件时,用于选择同一个Excel文件的不同Sheet工作表。
字符集:TEXT文件、CSV文件的字符集。字符集类型包括:GBK、UTF-8。
分隔符:TEXT文件字段间的分隔符。分隔符类型包括:制表符( TAB )、逗号( , )、空格、竖线( | )、短横线( - )、下划线( _ )。
注意:CSV文件字段间的分隔符仅支持逗号。
重载:重新加载所选择的文件内容
第一行是标题:文件中的第一行内容是否作为标题
如果字符串外有引号则先剥离,包括标题部分: 是否删除字符串最外层的引号
● 举例:用student.txt建立一个文件数据集。
1、在图1.4.2.2-1 所示的数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
2、选择“文件数据集”类型,点击【确定】按钮,进入文件数据集编辑界面,如下图所示:
3、点击右边的按钮选择student.txt,也可以输入student.txt文件的相对路径。
4、选择文件对应的【字符集】类型,默认是GBK。选择字段间的【分隔符】,默认是制表符(TAB)。
5、勾选【第一行是标题】,此时文件数据集编辑界面,如下图所示:
6、点击【确定】按钮,文件数据集就创建好了。
内建数据
内建数据集是指数据集的结构和数据都存入报表模板,运算报表的时候不需要从数据源取数了。可以使用户快速的体验建立报表的过程,用户只需在报表设计器中定义一个内建数据集,录入一些数据就可以在报表中使用了,这样给用户的体验过程带来了极大的方便。也可以用于报表的跟踪调试,当报表预览结果和您预想的结果不符合时,可以把数据集转为内建,然后把报表模板发给技术支持人员,方便支持人员跟踪调试。
内建数据类型数据集界面如下:
● 举例:创建一个包含姓名和年龄的内建数据集。
1、在图1.4.2.2-1 所示的数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
2、选择“内建数据集”类型,点击【确定】按钮,弹出“内建数据集”窗口,在此窗口中我们可以定义内建数据集包含的字段和数据值。在“字段”标签页定义内建数据集包含的字段,点击右边的【增加】按钮,在左边的字段列表中就会增加一个字段的定义,可以修改字段名和字段的数据类型。假设我们定义姓名和年龄两个字段,如下图所示:
3、切换到“数据”标签页,点击右边的【增加】按钮,可以添加字段对应的数据值。如下图所示:
我们也可以把excel文件中已有的数据复制粘贴到内建数据集中。首先复制excel文件中的数据值,在内建数据集的“数据”标签页点击右边的【粘贴】按钮即可把excel文件中的数据粘贴到内建数据集中。
4、点击【确定】按钮,一个内建数据集就建好了。
可以把一个外部数据集转为内建数据集也可以把内建数据集还原为外部数据集。
在图1.4.2.2-1 所示的数据集设置窗口中选中数据集列表中的一个数据集,点击右边的【转为内建】按钮,即可把外部数据集转为内建数据集。如下图所示:
从上图中我们看到ds1转为内建数据集后,右边的【转为内建】按钮变成了【还原】按钮。选中数据集列表中的ds1,点击【还原】按钮,ds1内建数据集就还原成了它最初的“SQL检索”数据集类型。如下图所示:
● 把内建数据集还原为外部数据集,要求内建数据集最初是由外部数据集转化而来的,不能是用户自己建的内建数据集,如果是用户自己建的内建数据集不能还原为外部数据集合。
自定义
如果报表的数据来源比较特殊,需要程序员自己处理,可以采用自定义数据集的方式,此时选择数据集的类型为自定义,然后在编辑界面中输入类名和需要用到的参数。
自定义类型数据集界面如下:
● 举例:创建一个学生成绩的自定义数据集。
1、在图1.4.2.2-1 所示的数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
2、选择“自定义”数据集类型,点击【确定】按钮,弹出“自定义数据集”窗口,如下图所示:
在数据集类名编辑框中输入数据集类名,该类应该由程序员自己实现,实现润乾报表提供的一个接口IDataSetFactory,IDataSetFactory接口只定义了一个方法:
public DataSet createDataSet(Context ctx, DataSetConfig dsc,boolean retrieve)
自定义类必须实现此方法,并返回一个DataSet对象,以下是对本方法的说明:
功能:生成自定义数据集
语法:public DataSet createDataSet(Context ctx,DataSetConfig dsc, boolean retrieve)
参数说明: Parameters:ctx – 报表运行上下文
dsc - 数据集配置
retrieve - 是否检索出数据,若为false则不取出数据只产生数据集的结构
createDataSet()方法由系统调用,我们不用去关心怎么调用它,而关心的是如何利用已有的方法参数,根据需要实现这个方法。createDataSet()方法返回的是一个DataSet对象,可以开始时便新建一个用于返回的DataSet对象:
int rows = listsize(); //数据初始行数,根据实际求得
int cols = 3; //数据列数
DataSet ds = new DataSet(rows,cols,"ds1");
DataSet的三个参数分别是数据初始行数、数据字段列和数据集名。新建DataSet对象后往其中设置数据字段名,这个过程一定要在设置数据前。例如,我们要对这个数据集添加三个数据字段:
ds.addCol( "name" ); //列名
ds.addCol( "subject" ); //列名
ds.addCol( "grade" ); //列名
对于有字段的数据集,就可以设置其包含的数据了:
for( int i = 0; i < rows; i++ ) {
Row row = ds.addRow();
DataBean data = (DataBean) list.get(i);
row.setData(1, data.getName());
row.setData(2, data.getSubject());
row.setData(3, new Integer(data.getGrade()) );
}
3、点击【增加】按钮,为自定义数据集添加参数。
4、点击【确定】按钮,一个自定义数据集就建好了。
本菜单项的功能是用于设置报表的全局属性。
点击 报表-报表属性,或者选中报表首格,右键菜单-报表属性,或者使用快捷键 Ctrl+B,打开“报表属性”编辑界面,可切换到相关的标签页,设置相关的报表属性。“报表属性”编辑界面如下图所示:
常规属性:
在报表属性编辑界面中切换到“常规”标签页,设置报表的基本属性。如下图所示:
报表类型
报表类型有普通报表和参数模版两种。
普通报表:把报表中的单元格作为存储和计算的基本单位,比如有一个3行3列的普通报表,那么在内存里把3*3=9个单元格作为9个对象存储和计算。
参数模版:作为参数模板使用,以接受用户输入参数为目的的报表。
大数据集名称
当需要对大批量数据进行计算时可将数据集设置为大数据集名称,大数据集名称只能是SQL数据集或者集算器数据集。
报表单位
报表单位有毫米,像素,英寸,高精度四种。报表单位是用来设置报表中数值型属性的单位,比如统计表中上边距、下边距属性,我们在设置时只填入数字并没有填入单位,它使用的单位就是我们在这里设置的报表单位。报表设计器中数值型属性如果在填入数字时明确的指定了单位,那么它就使用指定的单位,如果只填入数字没有指定单位,它默认的是使用这里设置的报表单位。
图像最大尺寸
图像最大尺寸用于限定报表中所存在的图片文件的大小。当报表中的图片大于所设定的大小时,系统会自动调用安装目录下的\report\logo\outsize.gif或应用下的\raqsoft\images\outsize.gif文件进行显示,替换原有的大图片。用户也可以通过替换outsize.gif来自定义图片大小超出限定时的替换图片。
显示比例
显示比例可调整设计报表和预览报表时的显示比例,但报表本身的大小不变,只是为了方便用户查看。系统提供了200%、150%、100%、75%、50%的显示比例选择项,用户也可以通过自定义选项框,自己设置显示比例。
例如:有一张报表用100%的显示比例需要借助于滚动条才能看到全部的报表内容,但用75%的显示比例不用滚动条就可看到全部的报表内容。如下图所示:
报表格数
报表格数为预算单元格数,用于报表引擎对内存中报表的并发控制。报表中的配置文件可配置在内存中允许使用的最大格子数maxCellNum及预算单元格数defaultCellNum。报表引擎在对报表进行运算前,先读取要计算报表的"报表格数"属性,解析报表格数中的表达式,计算出报表的预算单元格数;如果报表格数未设定,则将defaultCellNum作为预算单元格数。并发计算中报表的总格子数加上当前报表的预算单元格数,如果计算和超过了maxCellNum,那么报表引擎就延迟计算此报表,否则就计算报表。并发计算中,单元格数会随之增加,计算结束后,会随之减少。
例如有一个员工基本信息报表,如下图所示:
它有6列,扩展出来的行数为ds1.count()。我可以在报表属性中设置它的报表格数为:(ds1.count()+1)*6,如下图所示:
员工基本信息报表计算后会占用 (ds1.count()+1)*6个单元格。报表引擎对员工基本信息报表计算前,先获取此报表的“报表格数”属性,然后用内存中并发执行的报表总格子数加上员工基本信息报表的“报表格数”,计算结果与配置文件中设置的内存最大格子数比较,如果大于最大格子数则延迟员工基本信息报表的计算,否则就立即计算。
● “报表格数”可以是整数值也可以是表达式,不需要等号开头。
报表样式
报表属性中设置报表样式后,该样式会自动列入到右侧属性中的单元格样式名列表中。报表样式的配置在安装目录\report\tmp下的reportStyleConfig.xml文件中。
刷新
刷新报表样式的下拉列表。
提示信息
用途待定。
注释
制作报表的人可在此对该报表做些说明和注释,以方便其他人,或日后自己查看。
● 举例:
某张报表是员工信息查询的报表,可以在注释编辑框里输入“预览时在参数值里输入要查询员工的编号,即可查询出该员工的详细信息”,这样初次打开这张报表时,查看注释信息后就明白该报表的意图了。
打印属性:
在报表属性编辑界面中切换到“打印”标签页,设置报表的打印信息。如下图所示:
类型
纸张类型指报表打印或导出时的缺省纸张大小。此属性只在分页方式为“按纸张大小分页”时才起作用。除了标准纸张大小外,还提供了自定义纸张大小的方式,可在自定义纸张高,自定义纸张宽属性里自定义。
尺寸单位:
纸张规格 |
宽度(毫米) |
高度(毫米) |
A0 |
841 |
1189 |
A1 |
594 |
841 |
A2 |
420 |
594 |
A3 |
297 |
420 |
A4 |
210 |
297 |
A5 |
148 |
210 |
B0 |
1000 |
1414 |
B1 |
707 |
1000 |
B2 |
500 |
707 |
B3 |
353 |
500 |
B4 |
250 |
353 |
B5 |
176 |
250 |
尺寸换算公式:(1 毫米×72)/25.4=1 像素
72像素=1 英寸
方向
报表打印或导出时的缺省纸张方向。分为纵向和横向。默认为纵向,当报表是短宽型的,可以将纸张方向设置为横向。
自定义纸张高
当纸张类型为自定义时,系统读取自定义纸张高属性作为打印时的纸张高度。
宽度
当纸张类型为自定义时,系统读取自定义纸张宽属性作为打印时的纸张宽度。
页边距
上边:报表打印或导出时的缺省上边距。
下边:报表打印或导出时的缺省下边距。
左边:报表打印或导出时的缺省左边距。
右边:报表打印或导出时的缺省右边距。
打印缩放
缩放模式:设置报表打印时的缩放模式,系统提供了与纸张等高/不缩放/与纸张等宽三种缩放模式。
与纸张等高:指将报表按纸张高缩放。
不缩放:指将报表原样展现。
与纸张等宽:指将报表按纸张宽度缩放。
布局行数/布局列数
布局行数:如果报表是按照行数分页的,那么一张打印纸上可能打印多页报表,该参数设定一张打印纸上纵向可以打印几排报表。
布局列数:如果报表是按照行数分页的,那么一张打印纸上可能打印多页报表,该参数设定一张打印纸上横向可以打印几排报表。
对于卡片式报表,可以在一张打印纸上布局多页报表,这样打印出来的报表不但美观,而且可以任意切割。
● 举例:
把“纸张”组框中的【方向】设为:“横向”,将其他组框中的【布局行数】设为:3,【布局列数】设为:2,如图:
切换到“分页”标签页,在【分页方式】下拉框中选择“按行分页”,将【每页行数】设为:6。其打印预览效果如下图所示:
打印次序
如果报表是按行数分页的,那么一张打印纸上可能打印多页报表,打印次序用于设定多页报表在打印纸上先横向排还是先纵向排。
水平对齐
水平对齐用于设置打印时报表在纸张上的水平对齐方式,有居中、靠左和靠右三种选择。
垂直对齐
垂直对齐用于设置打印时报表在纸张上的垂直对齐方式,有居中、靠上和靠下三种选择。
打印背景图
当报表中插入背景图后,预览时可以看到背景图,但不一定希望打印出来。通过该属性可以设置背景图是否打印。
全屏预览
用于设置打印时,打印窗口是否全屏。
虚拟打印机
虚拟打印机是为报表导出为text文件后进行打印服务的。当报表导出为text文件后,如果要打印这个text文件就涉及到字符终端的打印,这种打印没有图形化的界面让用户来配置打印机,只能用命令来配置。如果每次打印都要求用户用命令来设置打印参数,就会给用户的打印操作带来极大的不方便,为此我们提出了虚拟打印机的概念。用户在报表属性中选择了一个虚拟打印机,那么此虚拟打印机的配置信息就保存到了报表头中,当报表导出为text文件时,此虚拟打印机的配置也导出到text文件中,以后打印此text文件时直接用打印命令打印即可,不用再设置打印机的配置参数了,极大的方便了用户对text文件的打印。
要使用虚拟打印机,首先需要编辑一个文本文件,文件名为printer.ini。文件内容结构如下图所示:
上图printer.ini文件中[LQ1600]、[LQ1601]、[LQ1602]、[LQ1603]指的是打印机的型号,FF=12和SelectCharSet-27 82 ? 指的是打印机的配置参数。可以同时编辑多个节点,即编辑多个虚拟打印机的配置。然后把编辑好的printer.ini文件放在报表设计器的安装目录->classes文件夹下。如下图所示:
重新启动报表设计器,让printer.ini文件生效。点击 报表-报表属性,切换到打印标签页,这时虚拟打印机下拉框中就列出了你在printer.ini文件中配置的打印机型号,如下图所示:
用户选择了虚拟打印机的型号后,此虚拟打印机的型号及相关的配置信息就保存到了当前报表头中,当报表导出为text文件后,打印配置信息就保存到了text文件中,要对text文件打印,直接用打印命令即可,不需要选择打印机型号及配置打印机参数了。
刷新
刷新虚拟打印机下拉列表。
分页属性:
在报表属性编辑界面中切换到“分页”标签页,设置报表的分页打印信息。如下图所示:
纵向分页时打印方式
纵向分页时打印方式用于设置报表纵向分页时页眉页脚和标题的打印情况。
页眉页脚和标题都可以选择“每页都打印”和“仅首页打印”两种情况。
1、每页都打印
有时不同的人可能查看同一个报表的不同页,同一个报表的不同页不一起存放,为了使每一个用户查看报表时都能了解报表的页眉页脚和标题信息,我们就需要在每页上都打印页眉页脚和标题,这时只需在“纵向分页时打印方式”组框中的【页眉页脚】下拉框中选择“每页都打印”,在【标题】下拉框中选择“每页都打印”就可实现。
预览后打印我们发现,第一页显示了页眉页脚和标题,第二页也显示了页眉页脚和标题,其打印预览效果如下图所示:
2、仅首页打印
有时我们把打印出来的报表页装订在一起存放,所以只想在第一页打印页眉页脚和标题,其他页就不打印了,这时只需在“纵向分页时打印方式”组框中的【页眉页脚】下拉框中选择“仅首页打印”,在【标题】下拉框中选择“仅首页打印”就可实现。
预览后打印我们发现,第一页显示了页眉页脚和标题,而第二页页眉页脚和标题就被隐藏了,其打印预览效果如下图所示:
横向分页时打印方式
有时候一条记录包含的字段很多,一页纸的宽度装不下一条记录,我们一般设置为横向分页。横向分页时的打印方式是用来设置报表横向分页时页眉页脚和标题的打印情况。
横向分页时页眉页脚和标题都可以选择“每页都打印”、“仅首页打印”、“每页打印切分部分”和“仅首页打印切分部分”四种情况。
1、每页都打印
有时候横向分页时打印出来的多页报表分开存放,用户只查看自己感兴趣的那些页,这时为了让每一个用户都查看到页眉页脚和标题信息,就需要在每一页报表中都打印上页眉页脚和标题。在横向分页时打印方式组框中的【页眉页脚】下拉框中选择“每页都打印”, 【标题】下拉框中选择“每页都打印”,即可实现在每一页报表中都打印页眉页脚和标题。其打印预览效果如下图所示:
2、仅首页打印
有时用户要求横向分页时仅首页打印页眉页脚和标题,其他页就不打印了。在横向分页时打印方式组框中的【页眉页脚】下拉框中选择“仅首页打印”, 【标题】下拉框中选择“仅首页打印”,即可实现仅在首页报表中打印页眉页脚和标题。其打印预览效果如下图所示:
3、每页打印切分部分
有时用户要求横向分页时每页打印切分部分,然后把打印出来的每一页横向粘贴起来,形成一个完整的报表,这时就需要使用横向分页的“每页打印切分部分”。在横向分页时打印方式组框中的【页眉页脚】下拉框中选择“每页打印切分部分”, 【标题】下拉框中选择“每页打印切分部分”,其打印预览效果如下图所示:
4、仅首页打印切分部分
有时用户要求横向分页时仅首页打印切分部分,其他页不打印,这时就需要使用横向分页的“仅首页打印切分部分”。在横向分页时打印方式组框中的【页眉页脚】下拉框中选择“仅首页打印切分部分”, 【标题】下拉框中选择“仅首页打印切分部分”,其打印预览效果如下图所示:
表头表尾打印方式
表头表尾打印方式用于设置报表打印时表头表尾的打印情况。
表头表尾的打印方式分为行和列两类,行可以设置报表头和报表尾的打印,它分为仅首页打印和每页都打印两种。列可以设置左表头和右表头的打印,它也分为仅首页打印和每页都打印两种。
1、仅首页打印
有的用户要求仅在第一页显示表头表尾,其他的页就不显示了,比如报表的宽度大于打印纸的宽度,我仅在第一页打印表头表尾,其他页不打印,报表打印完成后我把两页横向粘在一起共享第一页的表头表尾。如果在行上设置为仅首页打印,则报表头/报表尾区域仅首页打印;如果是在列上设置仅首页打印,则左表头仅在首页打印,右表头仅在最后一页打印。
将【表头表尾打印方式】中的【行】设为“仅首页打印”,【列】设为“仅首页打印”。其打印预览效果如下图所示:
2、每页都打印
有的用户为了方便在每一页都能看到表头表尾信息,他们要求每页都显示表头表尾。将【表头表尾打印方式】中的【行】设为“每页都打印”,【列】设为“每页都打印”。其打印预览效果如下图所示:
分页方式
报表的分页方式有按纸分页、按行分页、不分页三种。
1、 按纸张分页
按纸张分页指按设定的打印纸类型自动进行分页,超出纸张的部分会在下一页打印,这种分页方式适用于用户对一页纸上打印几条记录没有要求。其打印预览效果如下图所示:
2、按行分页
有时用户要求在一张纸上固定打印指定行数的记录,我们可以使用按行数分页来实现。按行分页是指按设定的每页显示的数据行数自动进行分页,超出设定的行数的数据在下一页打印。我们将【分页】中的【分页方式】设为“按行分页”,在【每页行数】编辑框中输入15,则每页打印15行的按行数分页效果如下所示:
按行分页,可以指定固定行数,也可以动态指定,都可以在【每页行数】中设置。
注意:如果报表选择了按行分页,则该报表不允许进行缩放打印
3、不分页
有时为了便于查看所有的报表信息,用户要求把报表中的所有信息打印在一页纸上,我们可以使用不分页来达到这个目的。套打的时候,将需要套打的票据扫描成图片,插入到报表设计的界面上,然后依照底图进行报表描绘,打印时报表信息连同底图一起打印,这时为了保证打印出来的报表不错位也要使用不分页。我们将【分页】中的【分页方式】设为“不分页”。 其打印预览效果如下图所示:
页眉页脚边框
页眉页脚边框有默认、采用设计时边框两种。
页脚最上方的单元格上边框如果未设置线型,则会根据页眉页脚边框的取值决定是否采用与页脚上方单元格相邻的单元格的下边框线型。
每页行数
如果“分页方式”是按行分页则可以在此设定每页显示数据的行数。该行数为数据区行数。
【每页行数】可以固定指定行数,也可通过参数实现动态分页,点击【每页行数】后的,将会弹出表达式编辑框,在此可设置参数表达式实现动态分页,如下图所示:
其打印预览效果如下图所示:
分栏数
分栏数用于设置报表打印或导出时的缺省纵向分栏数。我们常常会遇到一些列数很少行数很多的报表,这种报表窄窄长长,打印在一张A4纸上,横向留出大片空白,不但浪费纸张而且不美观,不方便用户查阅。分栏可以在打印纸上横向布局多列报表,这样既美观又节约纸张,还方便浏览报表。分栏后,表头会在每栏中重复,但是报表的标题可以只出现一次。
将【分页】中的【分栏数】设为:3,其打印预览效果如下图所示:
分栏时重复组头
分栏时重复组头用于设置在分栏时对分组表头的重复显示的控制。
分页监听器类
本菜单可设置分页监听器类,该类需实现com.raqsoft.report.usermodel.IPagerListener 接口,有关接口中的方法介绍可参见《程序员参考》5.8.2小节所示。
导出属性:
在报表属性编辑界面中切换到“导出”标签页,设置报表是否导出背景图片、导出为pdf文件和excel文件时,该文件的密码和权限。如下图所示:
不导出背景图片
设置报表导出时是否导出背景图片。
不导出如下URL
设置报表单元格的超链接在导出时哪些URL不导出,可通过增加按钮增加不导出的URL,通过删除按钮删除选中的已经添加的URL。
设置报表导出为pdf文件时,该文件的密码和权限。
用户密码:查看导出的pdf文件时用户需要输入的密码,此类用户只能浏览pdf文件。
主密码:编辑导出的pdf文件时用户需要输入的密码。
文档权限:可以给导出的PDF文件设置权限,在相应权限前打上对勾就可以了。
性能优先:导出或flash打印用性能优先时,使用连续串导出,不逐字导出,导出速度加快,存储文件变小,但是由于pdf跟java的文字细微差异,会有个别差异;如不勾选性能优先则输出到pdf或者svg是逐字逐坐标输出,速度慢,但坐标跟界面完全一致。
Excel
文档密码:打开该excel文档时须输入的密码。
不导出隐藏行/不导出隐藏列:设置隐藏的行或列是否导出。
单页Excel是否设定分页符:在单页导出的Excel中,是否按照和报表相同的分页位置设定Excel中的分页符,使Excel中有相类似的分页效果。
隐藏Excel网格线:设置导出的Excel文件是否隐藏网格线。
不导出批注:设置是否导出批注(在属性列表WEB的提示中增加批注)。
其他属性:
在报表属性编辑界面中切换到“其他”标签页,设置报表的报表侦听器类和有效性验证脚本。如下图所示:
报表侦听器类
本菜单可设置报表侦听器类,该类必须继承com.raqsoft.report.usermodel.IReportListener,并实现beforeCalc ()、afterCalc ()方法,报表计算前后的处理代码分别写在这两个方法中。有关接口中的方法介绍可参见《程序员参考》5.4.1小节所示。
有效性验证脚本
用于给参数模版增加校验功能。参数模版定义了一个系统js函数:getParamValue(paramName),该函数用于取得参数模版中某个参数的值,paramName是参数名。
在参数模版的报表属性中填写一段用于校验的js程序,当提交参数时会调用这段程序。如果输入的参数全都满足要求,则返回true; 某个参数不满足要求时,弹出信息,并返回false。
如下图:假如参数模版中有两个参数startDate和endDate,分别代表开始日期和结束日期,现在要求开始日期不能大于结束日期,写法如下:
背景图属性:
在报表属性编辑界面中切换到“背景图”标签页,设置报表的背景图信息,背景图可以是图片也可以是水印。如下图所示:
显示方式
设置背景图的显示方式:每页显示和不显示。
空白
清除背景图对象。
图片
设置图片的样式、来源和URL。
样式:有左上、填充和平铺三种。
1.缺省样式为左上,此时背景图从报表左上角开始以图片原来的大小展现,不足的地方显示空白,多余的地方自动裁剪。效果如下图:
2.选择填充时,背景图缩放调整到报表大小。效果如下图
3.选择平铺时,背景图以图片原来的大小展现,自动拼接铺满报表。效果如下图
来源:选择背景图的配置类型,URL还是表达式。
例如:URL类型
水印
设置报表中水印的样式、来源、文本、字体、字号、颜色和间距。
样式:设置水印的样式,有水平和倾斜两种。
来源:设置水印的来源,有文本和表达式两种。
字体:设置水印的字体格式。
字号:设置水印的字号。
颜色:设置水印颜色。
间距:设置水印间距。
例如:文本类型
效果如下图:
在报表属性编辑界面中切换到“子报表”标签页,定义在报表中插入的子报表。如下图所示:
点击【增加】按钮,在子报表列表框中自动添加一个子报表。
点击【删除】按钮,在子报表列表框中删除选中的子报表。
名称
定义子报表的名字,我们在用到子报表的地方就用这个名称来表示子报表。
URL类型
设置子报表的路径类型,有相对路径、绝对路径和url三种。
1、 相对路径
相对路径在设计器中,是相对于【工具】->【选项】->【文件】中的【应用资源路径】;web 发布时,是相对于raqsoftConfig.xml 中Report里配置的home属性中的报表文件路径。
使用相对路径时,路径前不需要加反斜杠“/”;绝对路径前需要带盘符或者反斜杠“/”,带反斜杠“/”方式的绝对路径,表示拼接上当前盘的根目录,例如该程序的根目录为D盘,那么/ reportFiles即表示D:/ reportFiles。
应用资源路径,如下图所示:
2、绝对路径
绝对路径是指你的子报表在硬盘上真正的路径。在“URL类型”列中选择“绝对路径”,双击“URL”编辑框,弹出“打开”对话框,如下图所示:
选择子报表所在的位置,点击【打开】按钮子报表的绝对路径就会自动的填入“URL”编辑框中。
3、URL
当以流文件的形式返回子报表时就会用URL来表示子报表。比如你的子报表是发布在某一服务器上的,你就会用以http开头的子报表的URL路径来定位子报表。
本菜单项的功能是用于设置表格里每一行的属性。
点击行首格,选中需要设置行属性的行,右键选择 行属性 或者点击 报表-行属性,将弹出行属性对话框,如下图所示:
可在该对话框中设置指定行的行高、行类型、组头级别、行后分页、是否可见、分页填充属性,设置完后点击【确定】按钮即可。也可以通过点击行首格,选中某一行后,在设计器右边的行属性列表中的设置。
分页填充:对分页前的单元格,如果内容不能填满页面,大文本单元格也要以空白来实现填充。
行类型:用于标识当前行属于报表哪个区域。
分页页眉
分页页眉区位于页面的最上面,仅仅在打印和打印预览的时候出现,可选择每页打印还是仅首页打印,一般用于放置与页面有关的信息。
头标题
头标题区用于放置报表标题,以及一些报表抬头要显示的信息,例如:打印日期、报表单位、金额单位等。可选择每页打印还是仅首页打印。
报表头
报表头区一般用于放置报表数据列的列名称,可选择每页打印还是仅首页打印,分栏时每栏重复。
分组头
分组头区分页的时候每页重复,分栏时每栏不重复。按行数分页时,所指定的行数为分组头区和数据区行数之和。
“组头级别”用来设置多层分组的组表头级别。
举例一:三级分组表头。
设置前三行的行类型都为分组表头。设置第一行的组头级别为:1,它为第一级分组;第二行的组头级别为:2,它为第二级分组;第三行的组头级别为:3,它为第三级分组。分组头区分页的时候每页重复,打印预览效果如下:
举例二:一级多行分组表头。
设置前四行的行类型都为分组表头。设置第一行的组头级别为:1;第二行的组头级别为:2;第三行的组头级别为:3;第四行的组头级别为:4。一级分组包含四行,打印预览效果如下:
● 一级分组表头可以包含多行,每一行的组头级别递增(如举例二)。多级分组表头每一级只能包含一行,每一级的组头级别递增(如举例一)。
数据
数据区一般放置报表从数据集中取到的数据。
报表尾
表尾区一般用于放置报表的一些汇总统计信息,以及常在报表表尾显示的一些信息。可选择每页打印还是仅末页打印,分栏时每栏重复。
尾标题
尾标题区用于放置报表尾标题,以及一些报表结尾要显示的注脚信息。可选择每页打印还是仅首页打印。
分页页脚
分页页脚区位于页面的最下面,仅仅在打印和打印预览的时候出现,可选择每页打印还是仅首页打印,一般用于放置和页面有关的信息。
● 纵向分区从上到下的顺序为:分页页眉区->头标题区->报表头区->分组头区->数据区->报表尾区->尾标题区->分页页脚区。
● 区域顺序从上到下不可颠倒。
● 除了数据区,其它区域可以不存在。
● 合并格不可跨越区域,否则分页时会出现混乱。
本菜单项的功能是用于设置表格里每一列的属性。
点击列首格,选中需要设置列属性的列,右键选择 列属性 或者点击 报表-列属性,将弹出列属性对话框,如下图所示:
可在该对话框中设置指定列的列宽、列类型、列后分页、是否可见、手机上自动列宽等属性,设置完后点击【确定】按钮即可。也可以通过点击列首格,选中某一列后,在设计器右边的列属性列表中设置。
列类型:用于标识当前列属于报表哪个区域。
左表头列
表头列一般用来放置报表数据行的行名称。当报表宽度比纸张显示区域宽时需要设置表头列,分页时表头列可选择每页打印还是仅首页打印。如果选择仅首页打印,则左表头列仅首页打印。
常规列
常规列一般放置报表从数据集中取到的数据。
● 横向分区从左到右的顺序为:左表头列->常规列。
● 表头列可以不存在。
● 合并格不能跨越区域,否则分页时会出现混乱。
手机上自动列宽
该属性用于在手机端预览报表时,报表宽度自动匹配屏幕宽度,如果报表宽度小于屏幕宽度,那么报表中勾选了自动列宽的列会按比例加大列宽,使报表充满屏幕宽度,手机横屏与竖屏切换时,也会自动调整列宽,此功能仅能用于手机。
显示报表的jsp里<head>中加入<meta …/>,表示用1:1的比例显示报表,不允许扩大或缩小,如下语句所示:
<meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
注意:
当报表中没有设置自动列宽时,所有列都自动加宽匹配屏幕宽度。当有指定列时,则只会指定列加宽。
本菜单项的功能是用于设置报表边框以及斜线的样式、颜色等属性。
选中需要设置边框的单元格,点击 报表-边框设置,或者 右键菜单-边框设置,将弹出边框设置界面,如下图所示:
通过该界面可选择边框、设置边框线条的颜色、风格和粗度,设置完成后,点击【确定】按钮即可。这些属性也可以通过工具栏按钮设置。
边框的设置分为斜线和边框两部分。
斜线
可以给选中的单元格加入斜线,设置斜线的颜色,风格和粗度。
在很多报表中,报表的表头左上角那个格子都有斜线,单元格斜线这个属性就是应这个需求而来的。
一个单元格斜线最多可以两条,斜线分隔的几个数据值在单元格的值属性中用逗号分隔(英文逗号)。
举例:
斜线单元格的数据值为:姓名,科目,成绩
边框
可以给某一单元格或者整个表格设置边框。
● 合并单元格同一侧的边框只有一种样式,不能分段以不同样式展现。
举例:
左上角的是边框宽度为0.75mm,颜色为红色的实线边框
右上角的是边框宽度为1.5mm,点划线式的边框
左下角的是边框宽度为0.75mm,上下有边框线的虚线式边框
右下角的是边框宽度为0.75mm,只有下方有边框线的双线式边框。
另外需要注意的是:合并单元格的某一边边框都是一致的,不能分段做不同设置。一旦对紧挨的小格子设了边框,就会连合并格的整条边都设上。
如下图:
如果对合并单元格紧邻的左上角单元格设置双线式边框,预览效果是:
合并格的整条边都设上了边框。
如果要避免这种效果,我们可以在该合并格上插入一行,然后将插入的行高度缩小,如图: 预览效果:
本菜单项的功能是帮助用户设计各种类型的统计图,以使报表中的信息更直观的展现。
选中需要设为统计图的单元格,点击 报表-统计图 菜单项,或者 右键菜单-统计图,系统会弹出统计图属性界面,在该界面中可以对统计图的相关属性进行定义。如下图所示:
设置好统计图的属性,点击【确定】按钮,设计器中选中的单元格就自动的插入了统计图。
图形类型及数据:
把统计图属性定义界面切换到“图类型及数据”标签页,如上图所示。
数据集
当统计图数据需要直接引用数据集字段或者参数值时,可通过数据集下拉列表选择数据引用方式。
(一) 选择参数
参数:
选择参数后,图数据下拉中会自动列出当前参数列表,每项的参数显示格式为@参数名[参数描述]
(二) 选择数据集名称
ds1数据集:
选择数据集名称后,如下图所示,图数据的下拉列表会自动将数据集的字段列出可供选择:
统计图类型
润乾报表提供了柱形图、饼型图、雷达图等三十种统计图类型。用户根据自己的需要,通过下拉列表对统计图的类型进行选择。
柱形图
柱形图是用一个单位长度表示一定的数量,根据数量的多少,画成长短相应成比例的柱形,并按一定顺序排列起来的统计图。它不仅能够显示每组中的具体数据,而且易于比较数据之间的差别。
● 举例:统计某一地区客户所在的城市的数目
首先,在统计图类型下拉框中选择统计图类型---柱形图。
其次,编辑分类轴和系列。详见分类轴和系列小节
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,柱形图就做好了。预览效果如下:
三维柱形图
三维柱形图是将柱形图采用三维立体的形式进行展示,使统计图看起来具有立体感。
● 举例:统计某一地区客户所在的城市的数目
在上述过程中,只需将统计图类型选择为【三维柱形图】,其他步骤皆与柱形图一致。
效果图如下:
三维簇状柱形图
三维簇状柱形图是在柱形图的基础上,先按照分类轴中的数据进行分类,然后再将每一个分类中的数据在系列中以柱形图的形式展现出来。
● 举例:统计某一地区客户所在的城市的数目
首先,在统计图类型下拉框中选择统计图类型---三维簇状柱形图。
其次,编辑分类轴和系列。在系列中,系列名称为簇状柱形图的分类,详见分类轴和系列小节
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,三维簇状柱形图就做好了。预览效果如下:
堆积柱形图
堆积柱形图的原理同三维簇状柱形图一样,只是在显示系列的时候采用的是柱形的堆积。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与三维簇状柱形图一致,只需要在上述过程中,将统计图类型选择为【堆积柱形图】,其他步骤均不变。
效果图如下:
三维堆积柱形图
三维堆积柱形图是用三维堆积柱状的形式展现报表中的数据,使统计图看起来具有立体感。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与堆积柱形图一致,只需要在上述过程中,将统计图类型选择为【三维堆积柱形图】,其他步骤均不变。
效果图如下:
饼形图
饼形图时采用饼状的形式展现报表中的数据,是统计图最常用的形式之一。一般以一个圆的面积表示总体,以扇形面积表示占总体的百分数。饼形图可以比较清楚地反映出部分与部分、部分与整体之间的数量关系。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与柱形图一致,只需要在设置过程中,将统计图类型选择为【饼形图】,其他步骤均不变。
效果图如下:
三维饼形图
三维饼形图是将饼形图的以三维立体的形式展示出来,增强图形的立体感。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与饼形图一致,只需要在设置过程中,将统计图类型选择为【三维饼形图】,其他步骤均不变。
效果图如下:
折线图
以折线的上升或下降来表示统计数量的增减变化的统计图,叫作折线图。折线图在表示可数量的多少的同时,还可以反映同一事物在不同情况下的发展变化的情况。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与饼形图一致,只需要在设置过程中,将统计图类型选择为【折线图】,其他步骤均不变。
效果图如下:
另外,折线曲线图还可以设置折线的线型及折线粗度,详见图形特性小节。
曲线图
曲线图同折线图一样,不仅可以表示数目的多少,还可以反映同一事物在不同情况下的发展变化情况,只是在展现形式上,曲线图采用了平滑的曲线。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与饼形图一致,只需要在设置过程中,将统计图类型选择为【曲线图】,其他步骤均不变。
效果图如下:
● 曲线类型
润乾报表还提供了两种不同类型的曲线,使得用户根据自己当前的点的分布情况自己选择一个最合适的曲线。
拉格朗日类型:根据拉格朗日函数绘制曲线。一般情况下,拉格朗日类型比较容易越界,建议少用。
阿克玛类型:一阶光滑(一阶导数连续),光滑程度较低,在取样点少的时候图形不那么好看,但是取样点多的时候不容易越界;
三次样条插值类型:二阶光滑(二阶导数连续),光滑程度较高,在取样点少的时候图形比较好看,但是取样点多的时候容易越界;
下面为阿克玛类型和三次样条插值类型在取样点多和少时的比较图:
● 曲线类型的设置
首先在统计图单元格右键->统计图;
接着,在打开的统计图属性定义界面中设置统计图类型为【曲线图】;
最后,在统计图属性定义界面上点击【其他特性】tab标签页,在曲线图中就可设置曲线图类型了,见下图:
三维折线图
三维折线图是将折线图的以三维立体的形式展示出来,增强图形的立体感。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与折线图一致,只需要在设置过程中,将统计图类型选择为【三维折线图】,其他步骤均不变。
效果图如下:
区域图
将报表按照区域的形式展现出来。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与折线图一致,只需要在设置过程中,将统计图类型选择为【区域图】,其他步骤均不变。
效果图如下:
三维区域图
三维区域图是将区域图的以三维立体的形式展示出来,增强图形的立体感。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与区域图一致,只需要在设置过程中,将统计图类型选择为【三维区域图】,其他步骤均不变。
效果图如下:
条形图
条形图的展现与柱形图一致,只是根据一些特殊的要求,需要将柱形水平显示,于是润乾报表就设计了条形图。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与柱形图一致,只需要在设置过程中,将统计图类型选择为【条形图】,其他步骤均不变。
效果图如下:
三维簇状条形图
三维簇状条形图的展现与三维簇状柱形图一致,只是根据一些特殊的要求,需要将簇状柱形水平显示,于是润乾报表就设计了三维簇状条形图。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与三维簇状柱形图一致,只需要在设置过程中,将统计图类型选择为【三维簇状条形图】,其他步骤均不变。
效果图如下:
堆积条形图
堆积条形图的展现与堆积柱形图一致,只是根据一些特殊的要求,需要将堆积柱形水平显示,于是润乾报表就设计了堆积柱形图。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与堆积柱形图一致,只需要在设置过程中,将统计图类型选择为【堆积条形图】,其他步骤均不变。
效果图如下:
三维堆积条形图
三维堆积条形图的展现与三维堆积柱形图一致,只是根据一些特殊的要求,需要将三维立体堆积柱形水平显示,于是润乾报表就设计了三维堆积条形图。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与三维堆积柱形图一致,只需要在设置过程中,将统计图类型选择为【三维堆积条形图】,其他步骤均不变。
效果图如下:
散列图
散列图是将报表中的数据按照数值的大小,在二维坐标系中分散的排列起来。散列图仅仅显示报表中数据的多少。
● 举例:统计某一地区客户所在的城市的数目
首先,在统计图类型下拉框中选择统计图类型---散列图。
其次,编辑分类轴和系列。在系列中,详见分类轴和系列小节
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,散列就做好了。预览效果如下:
三维散点图
三维散点图是将散点图的以三维立体的形式展示出来,增强图形的立体感。
● 举例:统计某一地区客户所在的城市的数目
其设置步骤基本与散列图一致,只需要在设置过程中,将统计图类型选择为【三位散点图】,其他步骤均不变。
效果图如下:
时序状态图
时序状态图中分类轴和系列不用定义,定义起始时间、结束时间、分类、状态、项目表达式。
起始时间表达式:指定该时间区域的起始时间,一般是某个单元格的值,填写单元格名称即可。
结束时间表达式:指定该时间区域的结束时间,一般是某个单元格的值,填写单元格名称即可。
分类表达式:显示多个分类的状态,分类值一般是某个扩展单元格的值,填写单元格名称即可,也可以是个常数,如果是单元格,那么该单元格必须是起始时间、结束时间、状态的主单元格。
状态表达式:状态数据,一般是某个扩展单元格的值,填写单元格名称即可。
时间刻度选择:提供了年、月、日、时、分、秒六种选择。
● 举例:做一张反映每个频道在各时段的状态图。
首先,在统计图类型下拉框中选择统计图类型---时序状态图。
其次,编辑起始时间表达式、结束时间表达式、分类值表达式、状态值表达式。
● 当统计图类型为时序状态图、甘特图和里程碑图时,分类轴和系列是无效的。
然后,切换到“其他特性”标签页,设置状态条高度和时间刻度。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,时序状态图就做好了。预览效果如下:
时间走势图
在一些业务需求中,经常会遇到随时间变化而变化的大量数据。由于数据量非常大,画数据随时间变化的统计图时,如果每条数据都描点,会使图表非常难以辨认。在润乾报表中,专门针对这种需求提供了时间走势图。
把统计图属性定义界面切换到“其他特性”标签页,介绍时间走势图横轴坐标取值:
起始值/结束值:横轴坐标起始/结束时间。
取样间隔/取样单位:画统计图时根据取样单位和取样间隔取值。取样单位有年、月、日、时、分、秒六种选择。若取样间隔为1,取样单位为时,则画时间走势图时,每隔一小时取一个值。
标签间隔/标签单位:设置横轴标签的间隔和单位。标签单位有年、月、日、时、分、秒六种选择。若标签间隔为1,标签单位为月,则横轴标签以每月为间隔标示。
● 举例:做一张反映商品的订购数量在某一时间段的走势情况。
首先,在统计图类型下拉框中选择统计图类型---时间走势图。
其次,添加分类轴和系列。
然后,切换到“其他特性”标签页,设置时间走势图横轴坐标取值。
最后,根据实际需要,设置图形特性和显示外观相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,时间走势图就做好了。预览效果如下:
双轴柱线图
在一些业务需求中,为了对两套数据进行清晰的比较,需要在一条横轴上同时展现两套数据。在润乾报表中,针对这种需求提供了双轴柱线图和双轴折线图。
● 举例:做一张能同时反映订单数和运货费情况的双轴柱线图。
设计模板如下:
A3单元格中的统计图定义如下:
首先,在统计图类型下拉框中选择统计图类型---双轴柱线图。
其次,定义一个分类轴和两个系列。分类轴即为图中的横轴定义,两个系列分别为柱和线的定义,第一个为柱,第二个为线。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,双轴柱线图就做好了。预览效果如下:
双轴折线图
双轴折线图与双轴主线图一样,都是为了对两套数据进行清晰的比较,只是在展现形式上有所不同而已,双轴折线图采用了两条不同颜色折线来展示不同的数据。
● 举例:做一张能同时反映订单数和运货费情况的双轴折线图。
设计模板如下:
A5单元格中的统计图定义如下:
首先,在统计图类型下拉框中选择统计图类型---双轴折线图。
其次,定义一个分类轴和两个系列。分类轴即为图中的横轴定义,两个系列为统计图中的两条线。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,双轴折线图就做好了。预览效果如下:
双轴堆积折线图
双轴堆积折线图是双轴图和堆积图的结合,首先可以在显示系列的时候采用的是柱形的堆积。其次是可以清晰的展现两套数据。
● 举例:做一张能同时反映每个同学各科成绩和每科最好成绩的双轴堆积折线图。
设计模板如下:
A3单元格中的统计图定义如下:
首先,在统计图类型下拉框中选择统计图类型---双轴堆积折线图。
其次,定义一个分类轴和两个系列。勾选【使用指定轴】。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,双轴折线图就做好了。预览效果如下:
雷达图
上面的雷达图直观的反映了一个产品在各个方面的表现,并可以直观的估计产品的综合价值,有时候我们可以直接拿中间的多边形的面积做为产品综合质量的参考。
● 举例:做一张能反映产品各方面性能的雷达图。
设计模板如下:
A3单元格中的统计图定义如下:
首先,在统计图类型下拉框中选择统计图类型---雷达图。
其次,定义分类轴和系列。分类轴为图中圆周上各个项目的定义,系列为径向数值的定义。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,雷达图就做好了。预览效果如下图所示:
甘特图
甘特图中分类轴和系列不用定义,定义起始时间、结束时间、分类、状态、项目表达式。
起始时间表达式:填写日期型字段表达式,对应的单元格为日期型表达式。
结束时间表达式:填写日期型字段表达式,对应的单元格为日期型表达式。
项目表达式:任务列表,对应的单元格为任务表达式。
状态表达式:任务或项目当前所处的状态。
● 举例:做一张反映公司项目进度的甘特图。
首先,在统计图类型下拉框中选择统计图类型---甘特图。
其次,编辑起始时间表达式、结束时间表达式、分类值表达式、状态值表达式。
然后,切换到“其他特性”标签页,设置状态条高度和时间刻度。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,甘特图就做好了。预览效果如下:
仪表盘
仪表盘实质上和直角坐标图没有区别,只是把原来的横轴画成了圆形,横轴的值就标度在圆周上,纵轴的值用颜色涂在圆周上,指针指向的位置是当前的数值。需要注意的是图中的指针,指针的那条数据不能成为圆上的一种颜色,所以必须严格区分。
在润乾报表中,将需要作为指针位置的那条数据的纵轴对应值写为“value”,就可以被识别为指针位置。
● 举例:做一张能反映温度情况的仪盘表。
设计模板如下:
A3单元格中的统计图定义如下:
首先,在统计图类型下拉框中选择统计图类型---仪表盘。
其次,定义分类轴和系列。分类轴即为圆周上刻度的定义,系列即为圆周上颜色的定义。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,仪表盘就做好了。预览效果如下图所示:
里程碑
里程碑图中分类轴和系列不用定义,定义计划完成表达式、实际完成表达式、项目表达式。
计划完成表达式:该任务计划完成日期,对应的单元格为日期型表达式,如:2006-01-01。
实际完成表达式:该任务实际完成日期,对应的单元格为日期型表达式,如:2006-01-01。
项目表达式:每一个任务或项目的列表,如:主厂房区域基础施工到零米。
● 举例:做一张反映任务完成情况的里程碑图。
首先,在统计图类型下拉框中选择统计图类型---里程碑图。
其次,编辑起始时间表达式、结束时间表达式、分类值表达式。
然后,切换到“其他特性”标签页,设置状态条高度和时间刻度。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,里程碑图就做好了。预览效果如下:
立体仪表盘
将仪表图采用三维立体形式展示出来,增加统计图的立体感。具体设置同仪表盘一致,只需在选择统计图类型时选择【立体仪表盘】,其余步骤均与仪表盘一致。
全距图
这张图表示了员工李芳完成的订单总价在所有员工中处在的位置。
图中横轴表示订单总价,没有纵轴,横向的柱表示所有员工的订单总价的范围,左端为最小值,右端为最大值,中间的黄色分割线为平均值,左侧比平均值低的部分为红色,右侧比平均值高的部分为绿色,蓝色的稍长一点的分割线为所查询的员工李芳处在的位置。
全距图与工字图很类似,它就相当于把工字图中的一个“工”字拿过来横放。不过在这个例子中,业务逻辑并不与工字图中的相同。
● 举例:做一张能反映李芳完成的订单总价在所有员工中所处位置的全距图。
设计模板如下:
A3单元格中的统计图定义如下:
首先,在统计图类型下拉框中选择统计图类型---全距图。
其次,定义分类轴和系列。分类轴定义没有意义,因为只有一条数据,一个分类。在添加了分类轴后,下方会自动添加四个系列,而且不能更改,因为这是全距图的规则。四个系列分别指定最大值、最小值、平均值和当前值。全距图中不会显示图例,所以系列并没有系列标题可选。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,全距图就做好了。预览效果如下图所示:
工字图
为了满足用户表现一组数值的变化范围、均值和当前值等数值的大小比较关系的需求,润乾报表提供了工字图。
设计模板如下:
该图表现了公司各个销售员的销售订单总价情况。横轴为各个员工,纵轴为订单总价金额,每个“工”字的上面一横表示订单总价的最大值,下面一横表示订单总价的最小值,红点表示平均值,黄点表示当前值的位置。这个当前值可以由用户随意指定,用来放在图表中与整体数据比较,靠近0轴线的红绿条子表示差值,即当前值与平均值的差值,为了便于比较而放在0起点的横轴上,正值为向上的绿色条子,负值为向下的红色条子。
● 举例:做一张能反映公司各个销售员的销售订单总价情况的工字图。
A3单元格中的统计图定义如下:
首先,在统计图类型下拉框中选择统计图类型---工字图。
其次,定义分类轴和系列。分类轴即为图中的横轴定义,在添加了分类轴后,下方会自动添加四个系列,而且不能更改,因为这是工字图的规则。四个系列分别指定最大值、最小值、平均值和当前值,后面的系列标题就是系列显示在图表中的标签,可以随便取。
最后,切换到“图形特性”和“显示外观”标签页,设置相关属性。如果采用默认设置,这一步可以省略。
点击【确定】按钮,工字图就做好了。预览效果如下图所示:
仅用前几条数据记录来画统计图
有时统计图的数据分类非常多,画出的图形过于密集,失去了统计图的可读性,因此往往取数据值最大的前几条记录来制图。用在饼图的情况比较多,分类过多时,饼图的可读性最差。
当仅用前几条数据来画图时,为了保证数据的完整性,系统会把剩余的数据合并成“其他”,作为单独一个分类来显示,如下图所示:
分类轴
分类轴相当于横轴。
例如要画学生各科成绩的统计图,那么是按学生来分类的,所以显示学生姓名的单元格就是分类轴,假如该单元格位于A2,则填写该单元格的名称,如:=A2。
一个统计图一般只有一个分类轴定义,但有些统计图会有多个分类轴定义,此时点击一个分类轴时,下面的“系列”组框中显示的就是与它对应的系列定义。
统计图分类轴的定义可以是个单元格也可以是常数,如果是单元格,该单元格应该是系列值的主单元格。
该属性在统计图类型为除时序状态图、甘特图、里程碑图以外的类型时有效。
● 统计图定义里,所有表达式等于号开头。
系列
用来画统计图的一类数据叫一个系列,一个分类轴可以对应多个系列,系列由系列名称和系列值组成。例如用学生数学、语文、英语成绩来画统计图,那么每门学科就分别为一个系列。
系列名称的值可以是单元格也可以是常数,如果是单元格,该单元格应该是系列值的主单元格;
系列值用来定义本系列的数据来源,其填写方法和分类轴定义相似。可以是常数也可以是单元格,如果是单元格,该单元格应该是系名称和分类轴的附属单元格
该属性在统计图类型为除时序状态图、甘特图、里程碑图以外的类型时有效。
● 举例:
预览效果是:
使用指定轴
只在双轴统计图中才能被勾选,并且在勾选使用指定轴以后,才可以自定义哪些系列用右轴,哪些系列用左轴,如果不勾选,就算指定了左右轴,系统也只会平均分配所有系列值到左右轴。
● 举例:
A3单元格中的统计图定义如下:
预览效果是:
时序状态图、甘特图及里程碑图数据
详见统计图类型中时序状态图、甘特图及里程碑图小节。
图形特性:
图 1.4.7.2-1 学生成绩统计图
把统计图属性定义界面切换到“图形特性”标签页,如下图所示:
统计图标题
统计图标题指统计图的文本标题,一般显示在图形的上方。如图1.4.7.2-1中的“学生成绩统计图”。
横轴标题
横轴标题指横轴坐标上的文本标题,一般显示在坐标轴的下方。如图1.4.7.2-1中的:学生。
纵轴标题
纵轴标题指纵轴坐标上的文本标题,一般显示在坐标轴的左边,可以横向显示,也可以纵向显示。如图1.4.7.2-1中的:成绩。
图形格式
统计图输出支持JPG、GIF、PNG、FLASH四种图形格式。其中JPG格式的图形边缘比较模糊。GIF格式的图形边缘比较尖锐,仅支持256色。PNG格式的图形边缘效果界于JPG和GIF之间是比较理想的一种。如果选择FLASH格式,则统计图在页面上展现时具有FLASH效果。
注意:
报表绘制统计图时为了使曲线看起来光滑,所以对图形做了平滑处理。因此绘制饼图时会产生很多中间色,由于GIF格式最多支持256色,所以饼图在使用GIF格式时,通常会报“Too many colors for a GIF”异常,建议遇到这类异常时不要使用GIF格式。
仪表边框
仪表边框指仪表盘边框的宽度,值为边框与半径的百分比值。仅适用于立体仪表盘。
刻度色宽
刻度色宽指仪表盘着色区的宽度,值为着色区宽度与半径的百分比值。
图中显示数据
图中进行数据标识,有无、统计值、百分比和标题四个选项。
折线粗度
折线统计图及双折线统计图中设置折线的粗细度。
(注:数据点的大小随折线的粗度的改变而发生相应的改变)
线型
折线统计图及双折线统计图中的折线的线型。
图中显示数据格式
如果需要在图中进行数据标识,那么该数据的格式需要进行定义,例如想在图中显示温度可以把数据格式设置为:##°C,如下图。
柱形或条形图间距
柱形图或条形图的柱子之间的间距。
统计值的起始值/统计值的结束值/统计值标签间隔。
有时候统计图的统计值非常大,而不同分类和序列之间的数据差异相对很小。为了能够明显标识出不同分类和系列的数据差别,往往在图中对某一段数据区域进行局部放大,因此需要定义统计值的起始值、结束值和统计值标签间隔。
举例:有一个地区订单数量统计图,每一个地区的订单数量都集中在1000到2000之间,不设置统计值的起始值/统计值的结束值/统计值标签间隔属性,直接画出统计图如下:
如果我们把统计值的起始值设为1000,统计值的结束值设为2000,统计值标签间隔设为100,则画出的统计图如下:
● 注意:统计值的起始值、结束值和统计值标签间隔三个属性要同时设置才起作用。
统计值单位
用来设置统计值的计量单位,有无缩放、自动计算、千、万、百万、千万、亿、十亿、百分之一、千分之一、万分之一、百万分之一等选项。统计值单位举例如下图所示:
统计值最小刻度数
统计值在数轴上显示的刻度最少个数。
网格线风格
网格线风格指统计图上的刻度线风格,可以选择不出现。
标题与图形的间距
图形区与标题之间的距离。
分类轴标签间隔
分类轴各标签之间的间隔。
其他堆积系列
设置将堆积图中的某一系列单独显示,属性值为系列名称。该属性只在统计图类型为堆积图时有效。
网格线位置
设置图形中分类轴和数值轴的网格线位置。
数值轴:
全部:
网格线风格
设置图形中分类轴和数值轴的网格线风格。
标注数据点
折线图中用于标注数据位置的方框和圆点,该属性只在统计图类型为折线图时有效。设置了该属性,相对于每个分类标签,折线上都有一个标注点。
标注数据点的填充色可根据显示外观—>坐标线颜色—>柱形图边框的颜色设置。
标注趋势
是否在折线图中标注前后数据位置变化的趋势。
忽略Null值
值为空的记录是否包含在统计图中。
数据重叠显示
相邻数值或标签重叠时是否显示后一数值和标签。
仪表值刻度
设置是否按照仪表数据来描绘刻度
饼图分离显示
设置是否将饼图中的一扇分离出来显示
绘制数据表
设置是否绘制数据表
显示柱顶统计值
设置是否显示柱顶统计值
颜色渐变
图形是否需要颜色渐变。
三维图形时,设置颜色渐变属性后坐标轴会自动根据坐标线颜色绘制轴平台,显示效果如下:
颜色不变 颜色渐变
图形透明
图形是否需要透明的效果,此选项主要针对三维的图形。
阴影
是否为统计图标注阴影。
凸出边框
在柱形图等图中,凸出统计图的边框。
丢弃[其他]分类
详见仅用前几条数据记录来画统计图小节。
仪表盘刻度位于颜色末端
是否将仪表盘刻度位于颜色末端。
当使用仪表盘来描述温度时则可以不勾选该复选框,因为对温度的划分通常是两者之间的一个范围,而不是一个固定的值。比如-10度为严寒,10度为寒冷,那么使用取两者之间的一个范围时,-10度到0度为严寒,0度到10度为寒冷。
仪表盘刻度不位于颜色
仪表盘刻度位于颜色末端
仪表盘刻度不位于颜色末端
警戒线
对于柱形图和线形图,允许设置警戒线,当统计值等于或大于警戒值时,统计图上会以定义的颜色和线形标识出警戒线。点击警戒线组框中的【添加】按钮,可以添加警戒线,可以设置警戒线的名称、警戒值、线型、警戒线的颜色,粗度等属性。例如我们定义了一条警戒线,当统计数超过10 时就用红色的线标识出来。
预览效果如下:
显示外观:
把统计图属性定义界面切换到“显示外观”标签页,如下图所示:
全图背景色
设置全图区的背景色。
图形区背景色
设置图形区的背景色。
坐标线颜色
设置统计图轴线、图例边框、柱形图边框、饼图引出线的颜色和长度。柱形图边框还可以用来设置折线图中数据点的填充色,默认为透明。
网格线颜色
设置网格线的颜色。只有选择了有网格线时才能设置该网格线的颜色。
● 在excel里仅仅支持256色,而润乾报表支持任意的颜色,因此某些颜色导出excel时可能会没有对应色,此时系统会找个最接近的颜色来代替。
图例位置
设置图例在统计图中的位置,有上边/下边/左边/右边/无共五个选项。
总按系列画图例
正常情况下图例是按照系列来画的,但是系列只有一项时,如果选择该选项,则图例仍然按系列来画,否则图例按照分类轴来画。
多系列图例
单系列时按分类轴画图例 单系列时按系列画图例
图例超链接/图形超链接
设置统计图图例上的超链接。在超链接属性中可能会用到@legend、@category和{APPMAP}。
@legend:指代当前图例的显示值。在超链接中引用@legend,报表引擎运算时会将其替换成当前图例的显示值。
@category:指代当前图例的分类值。在超链接中引用@category,报表引擎运算时会将其替换成当前图例的分类值。
{APPMAP}:指代web应用的相对路径,在超链接中引用{APPMAP},报表引擎运算时会将其替换成web应用的相对路径。
在图形超链接中若超链接为不以=开始的字符串时,报表引擎运算时会把@category、@legend等当成${@category}、${@legen },进行替换运算;若超链接为以=开始的字符串时,报表引擎运算时会把@category、@legend等当成参数,进行表达式运算。
举例一:图形超链接为不以=开始的字符串。
设置统计图图例上的超链接为:{APPMAP}/reportJsp/showReport.jsp?rpx=/订单.rpx&arg1=@category
如果web应用的相对路径为http://localhost: 8001/report,当前图例的分类值为“华北”,运算时报表引擎会自动把{APPMAP}替换成http://localhost:8001/report,把@category替换成“华北”,从而产生的超链接为:
http://localhost:8001/report/reportJsp/showReport.jsp?rpx=/订单.rpx&arg1=华北
在图例超链接中进行表达式运算有两个用途:1、@legend指代当前图例的显示值,如果我们想在超链接中使用当前图例的真实值,那么就要把@legend放到表达式中进行运算,由显示值得出真实值。2、有时地址栏中不支持中文,有中文就会产生乱码,而@legend或@category代表的值是中文时,我们就要对@legend或@category进行编码。
举例二:图形超链接为以=开始的表达式。
设置统计图图例上的超链接为:=’{APPMAP}/reportJsp/showReport.jsp?rpx=/订单. rpx &arg1=’+query(‘select 供应商ID from 供应商 where 供应商名称=?’,@category)
@category代表供应商名称,我们在超链接中需要使用供应商ID,所以图例上的超链接中把@category作为query 函数的参数来获得供应商ID。
举例三:图形超链接传递多个参数
设置统计图图例上的超链接为:{APPMAP}/reportJsp/showReport.jsp? rpx =/订单. rpx&arg1=@category&arg2=@legend&arg3={APPMAP}
如果超级链接中要传递多个参数时,各个参数中间用&符号分隔。
举例四:图形超链接传递中文参数
如果统计图所在的web页面与所链接的web页面的编码方式不同,那么超链接所传递的中文参数就不能在链接的页面上正常显示,所以一般要对超链接传递的中文参数进行转码运算。
设置统计图图例上的超链接为:
=’{APPMAP}/reportJsp/test.jsp?arg1=’+ urlencode(category, ‘GBK’ )+’&bb=’+ urlencode(‘传递的参数’, ‘GBK’ )+’&le=@legend’
统计图所在的页面的编码格式为GBK,而链接的test.jsp的编码方式为utf-8,这时我们就要对所传递的参数使用urlencode函数进行转码运算,这样才能保证传递的参数在test.jsp页面上的正常显示。
超链接目标窗口
当超链接被激活时,在目标窗口中打开。
超链接目标窗口有以下三种情况:
1、_self: 当超链接被激活时,在当前窗口刷新显示。
2、_blank: 当超链接被激活时,在新窗口中刷新显示。
3、目标窗口名: 指定窗口名, 当超链接被激活时,在指定窗口中刷新显示。
统计图配色方案
选择统计图颜色的配色方案,用户可直接使用报表提供的配色方案,也可以通过“工具”->“统计图配色方案” 修改已有的或自定义新的配色方案。
左边距/右边距/上边距/下边距
用来设置统计图在全图区的位置。
刻度长度
设置坐标轴的刻度长度。
3D厚度
设置3D轴宽度占序列宽度的百分比。
分类间隔
设置类别间的间隔占序列宽度的百分比。
系列间隙
设置序列间的间隔占序列深度的百分比。
饼图旋转
设置饼图纵轴占横轴的长度百分比。
饼图厚度
设置饼型图的高度占半径的百分比。
字体设置
设置包括标题、横轴、纵轴标题、标签等字体、颜色、大小、旋转角度等属性。如果在非中文操作系统下,必须安装相应的中文安装包。如果这里用到的字体操作系统不支持,会导致统计图出不来。
本菜单项的功能是帮助用户快速定义条形码。条形码是一种信息代码,用特殊的图形来表示数字、字母信息和某些符号。它是由一组宽度、反射率不同的条和空按一定的编码规则组合起来,用以表示一个完整数据的符号。
选中需要设为条形码的单元格,点击 报表-条形码,或者 右键菜单-条形码,将弹出条形码属性设置界面,在该界面中可根据需要设置合适的条形码属性,如下图所示:
设置好条形码的属性后,点击【确定】按钮,就可在选中的单元格中插入条形码。
类型
条形码的码制类型,有Code39码、Code128码、CodaBar码、Ean13码、Ean8码、UPCA码、QRCode码和OldQRCode共八种。
1、Code 39 : Code39是一种可供使用者双向扫描的分布式条形码,支持英文数字表达,最大优点是码数没有强制的限定,可用大写英文字母码,检验码可以忽略不计,长度是可变化的,通常用“*”号作为起始、终止符。目前Code39常用于工业、图书、以及票证自动化管理上。
2、Code 128: 表示高密度数据, 字符串可变长,符号内含校验码。有三种不同版本: A, B, and C 。字符集A:包括所有大写字母、数字字符、标点字符、控制字符(ASCII值为00-95的字符)以及7个特殊字符。字符集B:包括所有大写字母、数字字符、标点字符、小写字母字符(ASCII值为32-127的字符)以及7个特殊字符。字符集C:包括100个数字(00-99)以及3个特殊字符。在用字符集C时,用一个符号字符表示2位数字。终止字符都是:Stop。Code 128常用于工业、仓库、零售批发。
3、CodaBar:CodaBar是一种长度可变的连续型自校验数字式码制。 数据内容有21个字符,10个数字0~9,以及.)"+","-", "*" ,"/" ,"$","." ,":"等7个特殊符号,加上A, B, C, D四个英文字母。其中A,B,C,D只用作起始符和终止符。常用于仓库、血库和航空快递包裹中。
4、Ean13:EAN13是比较通用的一般终端产品的条形码协议和标准,码标准码共13位数,系由「国家代码」3位数,「厂商代码」4位数,「产品代码」5位数,以及「校正码」1位数组成。主要应用于超级市场和其它零售业。
5、Ean8:EAN缩短码共有8位数,包括「国家代码」2位数,「产品代码」5位数,及「校正码」1位数。当包装面积小於120平方公分以下无法使用标准码时,可以申请使用缩短码。
6、UPCA:UPCA是最早大规模应用的条码,其特性是一种长度固定、连续性的条码。UPCA仅可用来表示数字,故只支持数字0-9,有一位检查码,是EAN码的前身。UPC的特性:仅提供数字编码,限制位数12位、需要检查码,主要应用:超市与百货业。
7、QRCode:QRCode是一种正方形的矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
8、OldQRCode:OldQRCode仅为报表4的用户兼容保留,尽量不要使用,将来可能取消该选项。
格式
条形码就是一个图片,在此可设置图片的格式:JPG/GIF/PNG。JPG格式的图形边缘比较模糊。GIF格式的图形边缘比较尖锐,仅支持256色。PNG格式的图形边缘效果界于JPG和GIF之间是比较理想的一种。
JPG格式 GIF格式 PNG格式
字符集
设置条码内容的字符集,有UTF-8、GBK和ios-8859-1共三种字符集类型。
Logo来源、Logo值/表达式
Logo仅支持RQCode类型(二维码)时有效,用来为二维码中间添加图片。
Logo来源支持URL路径、表达式两种方式。
当Logo来源为URL路径时,Logo值是图片文件的路径。当Logo来源为表达式时,Logo表达式的计算结果需为图片,如二进制流。
版本号
仅支持OldQRCode,不同的版本号所对应的数据容量不同,OldQRCode码从版本1到版本40共有四十个版本。版本1数据容量最小,版本四十容量最大。
排错率
仅支持OldQRCode,排错率即是指二维码图标被遮挡多少后,仍可以被扫描出来的能力。排错率越高,则二维码图片能被遮挡的部分越多。
二维码排错率用字母表示,排错能力等级分为:L、M、Q、H四级:
L 7%
M 15%
Q 25%
H 30%
尺寸
仅支持OldQRCode,二维码的尺寸根据二维码的内容而定,如果是文字信息,就需要大一些,因为二维码生成的时候字符越多,二维码就越密,越密的话就需要大一些才不会影响扫描效果,具体多大,要具体情况具体处理。
字体
条形码的字符注的字体。
字号
条形码的字符注的字大小。
显示文字
条形码是否显示字符注。
内容
条形码所表示的数据。
注意:这个属性是条形码的核心,如果没有数值,该条形码就没有存在的意义了。“内容”属性可以是常数、单元格、参数或者含单元格、参数的表达式。如果数值为单元格、参数或者含单元格、参数的表达式时,务必在数值前加等号。如:=A2。
本菜单项的功能是帮助用户设计第三方各种类型的统计图,例如百度Echarts。关于Echarts统计图的使用目前主要针对熟悉Echarts统计图并且可以独立编写js脚本画图的用户,可让用户通过润乾报表将报表数据传入Echarts图形。以便帮助用户灵活处理各种数据,绘制各种类型的Echarts统计图,使报表中的信息更直观的展现。
模板的使用:
安装产品后在【安装根目录】/chart目录有缺省提供的图形模版,熟悉Echarts图形使用的用户可在此基础上直接传递报表数据,使图形能根据动态数据灵活展现。
以标准漏斗图为例,打开模板后,模板内容如下所示:
<!--
Echarts2——标准漏斗图
左侧参数列表数据类型举例说明:
dataname:['展现','点击','访问','咨询','订单']
datavalue:[60,40,20,80,100,60,40,20,80,100],数据顺序依次为[漏斗图展现,漏斗图点击,漏斗图访问,漏斗图咨询,漏斗图订单,金字塔展现,金字塔点击,金字塔访问,金字塔咨询,金字塔订单]
text:字符串
subtext:字符串
-->
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id='${id}' style="width:${width}px;height:${height}px"></div>
<!-- ECharts单文件引入 -->
<script type="text/javascript">
var names = ${dataname};
var values = ${datavalue};
var mydata = [];
var temp=0;
var clen=names.length;
var vsum=[];
var str="";
for( var i = 0; i < 2; i++ ) {
str="";
str+="[";
vsum=values.slice(temp,temp+clen);
temp+=names.length;
for( var j = 1; j < names.length+1; j++ ) {
str += "{value:"+vsum[j-1]+",name:'"+names[j-1]+"'}";
if (j>0 && j<names.length)
{
str+=",";
}
if (j==names.length)
{
str+="]";
}
}
mydata[i]=str;
}
// 使用
require(
[
'echarts',
'echarts/chart/funnel'
],
function (ec) {
// 基于准备好的dom,初始化echarts图表
var myChart = ec.init(document.getElementById('${id}'));
option = {
… …
… …
… …
// 为echarts对象加载数据
myChart.setOption(option);
}
);
</script>
打开模板后,可通过上述红色部分内容了解到该图形的名称以及通过左侧传递的各个参数的数据类型。润乾报表安装包中所自带的模板都提供了如上所述的参数说明,方便用户根据自己的需要在左侧传入不同参数值。
JS模板的基本使用
以柱形图为例,模板使用步骤如下:
1、选中需要设为统计图的单元格,点击 报表-第三方图形 菜单项,或者 右键菜单-第三方图形,在图形编辑窗口中点击 打开模版 按钮,缺省会直接指向【安装根目录】/chart目录,用户也可自行切换到模版的存放路径。
2、选择模板后,需对应参数名在左侧参数列表表达式中添加分类、系列、系列值。
参数列表中的参数值可以引用报表数据,在表达式中使用C1{}的引用方式获取报表扩展单元格数据为参数赋值,参数类型为数组。在js中需以${参数名}的方式获取参数值,如下:
3、设置好统计图的属性,点击【确定】按钮,设计器中选中的单元格就自动的插入了统计图。通过web预览查看第三方图形即可。
从模板的基本使用方法中可以看到,报表数据可以通过参数的形式动态传递给echarts模板,为了方便初学者和简单需求的用户能更快看到效果,我们提供了大量的echarts模板,用户只需要给模板参数传递合适的参数值,就能快速看到可视化效果。
这些模板里的参数需要传递什么形式的参数值,可以参考对应模板的参数注释说明,和我们demo应用中的实例。至于更高级的使用,期待做出更完美的效果,还需要有一定js基础的前端开发人员深入学习第三方图形。
注意:
由于第三方图形为其他开发者开发与维护,所以图形内容会不断更新修改。例如百度Echarts,通过以下介绍能够清晰地了解百度Echarts在润乾报表部署的步骤和流程。
1、从http://echarts.baidu.com/doc/start.html 中下载最新的build文件夹。
2、根据新下载的build对应的Echarts版本,相应的将build文件夹内容替换[安装根目录]/report/web/webapps/demo/raqsoft目录下的echarts2或echarts3文件夹内容,重启服务即可。
修改已有JS模板
如需对已有模板的图形进行调整,可直接在js脚本中进行修改,修改完成后可将模板另存为,方便以后再次使用时不用重新编辑模板。
以柱形图为例,通过参数控制统计图中工具栏的显示,并且将修改后的模板另存为,操作步骤如下:
1、选中需要设为统计图的单元格,点击 报表-第三方图形 菜单项,或者右键菜单-第三方图形,在图形编辑窗口中点击打开模版按钮,缺省会直接指向【安装根目录】/chart目录,用户也可自行切换到模版的存放路径。
2、选择模板后,需对应参数名在左侧参数列表表达式中添加分类、系列、系列值。
3、添加参数控制柱形图中工具栏的显示,缺省工具条在js中是通过” show: true”的方式控制的,true为显示,false为不显示。如想通过参数动态控制工具条的显示,可以手动在左侧添加参数实现即可。
如下图所示,左侧添加toolboxshow参数,参数名可随便定义,但不可与其他参数重名,右侧使用${参数名}进行引用。
4、设置好统计图的属性,点击【确定】按钮,设计器中选中的单元格就自动的插入了统计图。toolboxshow参数值设置为false,不显示统计图中的工具条。web预览如下:
5、双击统计图单元格,点击 另存为模板,输入文件名,将当前统计图的js模板另存为方便下次使用时通过 打开模板 直接使用。
模板参数类型
第三方图形可通过润乾报表传递不同数据类型参数,如字符串,数值,序列等。如需在右侧js模板内容中动态获取报表数据,可通过${参数名}格式获取,如${arg1}。点击刷新按钮可将右侧所有为${}格式的参数显示在参数列表中。
左侧参数值可为任意类型的参数。目前有三个固定参数,id(图形的唯一编号)、 width(图形宽) 、height(图形高),程序会自动填写,不会列出到左边参数面板。
通用参数类型说明:
字符串类型:可直接填写字符串值或返回值为字符串的表达式
序列:通过A3{}引用方式获取的报表数据,参数类型为数组,该引用方式通常可用于对分类、系列、系列值的取值,也可通过数据集.字段名获取,如ds2.product。
json串:可通过润乾报表提供的json函数对数据集做转换处理。具体json函数使用方法可以参见《程序员参考》1.9小节的json()函数说明。
自定义模板
目前润乾报表安装包提供了部分echarts图形模版,并且在模板中对数据做了灵活引用的处理,方便了初学者入手,对效果要求不太高的用户也基本满足,但如需对图形样式属性做修改或调整,或者所需图形在已有模版中不存在,需自定义模板,这都需要前端开发人员通过学习echarts官方说明去进一步完善。
在此我们介绍一下自定义模板时关于html转js模板以及对报表各种数据传递的处理的基本方法,请参见下面章节所讲内容。
HTML转js模板
如所需模版在已有模版中不存在,可直接将从Echarts官网获取的html示例手动转为js模版即可。以韦恩图为例,具体步骤如下:
步骤1:
html内容:
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>ECharts</title>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="height:400px"></div>
<!-- ECharts单文件引入 -->
<script src="dist/echarts.js"></script>
<script type="text/javascript">
// 路径配置
require.config({
paths: {
echarts: 'dist'
}
});
// 使用
require(
[
'echarts',
'echarts/chart/venn'
],
function (ec) {
// 基于准备好的dom,初始化echarts图表
var myChart = ec.init(document.getElementById('main'));
option = {
title : {
text: '访问 vs 咨询',
subtext: '各个数据的集合'
},
tooltip : {
trigger: 'item',
formatter: "{b}: {c}"
},
toolbox: {
show : true,
feature : {
mark : {show: true},
dataView : {show: true, readOnly: false},
restore : {show: true},
saveAsImage : {show: true}
}
},
calculable : false,
series : [
{
name:'韦恩图',
type:'venn',
itemStyle: {
normal: {
label: {
show: true,
textStyle: {
fontFamily: 'Arial, Verdana, sans-serif',
fontSize: 16,
fontStyle: 'italic',
fontWeight: 'bolder'
}
},
labelLine: {
show: false,
length: 10,
lineStyle: {
// color: 各异,
width: 1,
type: 'solid'
}
}
},
emphasis: {
color: '#cc99cc',
borderWidth: 3,
borderColor: '#996699'
}
},
data:[
{value:100, name:'访问'},
{value:50, name:'咨询'},
{value:20, name:'公共'}
]
}
]
};
// 为echarts对象加载数据
myChart.setOption(option);
}
);
</script>
</body>
步骤2:
下面是一个通用的js模版,可以直接将上面html中红色部分的option内容替换到下面的option中,并且需将模板中require中的图形名和html中require中的图形名保持一致即可。
<div id='${id}' style="width:${width}px;height:${height}px"></div>
<script type="text/javascript">
// 使用
require(
[
'echarts',
'echarts/chart/scatter'
],
function (ec) {
// 基于准备好的dom,初始化echarts图表
var myChart = ec.init(document.getElementById('${id}'));
var option = {
};
// 为echarts对象加载数据
myChart.setOption(option);
}
);
</script>
步骤3:
自定义完成的js模板内容:
<div id='${id}' style="width:${width}px;height:${height}px"></div>
<script type="text/javascript">
// 使用
require(
[
'echarts',
'echarts/chart/venn'
],
function (ec) {
// 基于准备好的dom,初始化echarts图表
var myChart = ec.init(document.getElementById('${id}'));
option = {
title : {
text: '访问 vs 咨询',
subtext: '各个数据的集合'
},
tooltip : {
trigger: 'item',
formatter: "{b}: {c}"
},
toolbox: {
show : true,
feature : {
mark : {show: true},
dataView : {show: true, readOnly: false},
restore : {show: true},
saveAsImage : {show: true}
}
},
calculable : false,
series : [
{
name:'韦恩图',
type:'venn',
itemStyle: {
normal: {
label: {
show: true,
textStyle: {
fontFamily: 'Arial, Verdana, sans-serif',
fontSize: 16,
fontStyle: 'italic',
fontWeight: 'bolder'
}
},
labelLine: {
show: false,
length: 10,
lineStyle: {
// color: 各异,
width: 1,
type: 'solid'
}
}
},
emphasis: {
color: '#cc99cc',
borderWidth: 3,
borderColor: '#996699'
}
},
data:[
{value:100, name:'访问'},
{value:50, name:'咨询'},
{value:20, name:'公共'}
]
}
]
};
// 为echarts对象加载数据
myChart.setOption(option);
}
);
</script>
WEB预览效果:
自定义模板的用户通过上述步骤可以将html改为润乾报表可用的js模板文件,但如需在润乾报表中对js中的数据做灵活处理,还需要用户先了解html图形中所需的数据结构类型,然后通过对左侧参数列表传递过来的参数做处理而获取最终js模板所需的数据。
Echarts官方例子中的数据一般都是直接在html写死或者通过json文件传递,本文档将举例介绍序列和json数据类型的参数传递,具体如下:
以标准气泡图为例进行JS代码说明:
Echarts标准气泡图HTML:
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div style="width:800px; border:2px solid red"><!--插件图外面的盒子决定里面的宽度-->
<div id="main" style="height:400px"></div>
</div>
<script src="dist/echarts-all.js"></script>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts图表
var myChart = echarts.init(document.getElementById('main'));
function random(){
var r = Math.round(Math.random() * 100);
//alert("a"+(r * (r % 2 == 0 ? 1 : -1)));
return (r * (r % 2 == 0 ? 1 : -1));
}
function randomDataArray() {
var d = [];
var len = 100;
while (len--) {
d.push([
random(),
random(),
Math.abs(random()),
]);
}
return d;
}
option = {
tooltip : {
trigger: 'axis',
showDelay : 0,
axisPointer:{
show: true,
type : 'dashed',
lineStyle: {
type : 'dashed',
width : 1
}
}
},
legend: {
data:['scatter1','scatter2']
},
toolbox: {
show : true,
feature : {
mark : {show: true},
dataZoom : {show: true},
dataView : {show: true, readOnly: false},
restore : {show: true},
saveAsImage : {show: true}
}
},
xAxis : [
{
type : 'value',
splitNumber: 4,
scale: true
}
],
yAxis : [
{
type : 'value',
splitNumber: 4,
scale: true
}
] ,
series : [
{
name:'scatter1',
type:'scatter',
symbolSize: function (value){
return Math.round(value[2] / 5);
},
data: randomDataArray()
},
{
name:'scatter2',
type:'scatter',
symbolSize: function (value){
return Math.round(value[2] / 5);
},
data: randomDataArray()
}
]
};
// 为echarts对象加载数据
myChart.setOption(option);
</script>
如上所示html文件中series:[]部分为需要处理的内容,其中scatter1和scatter2是两个系列,如不通过js中添加脚本进行处理,那么则需要手动在js的series部分追加scatter3,scatter4…..系列,操作比较麻烦。因此我们在js中添加了脚本处理数据,方便用户只需要在左侧参数部分传入数据即可,右侧则会自动根据分类系列系列值进行拼接字符串。最终将拼接好的串加到serices:[]中。
注意:
目前有三个固定宏,id(图形的唯一号)、 width(图形宽) 、height(图形高),程序会自动填写,不会列出到左边参数面板。
JS具体实现思路:
处理前:
处理后:
scatter.toSeries为js文件中添加的方法如下:
var scatter={
toSeries : function()
{
var series=${series};//['scatter1','scatter2']
var slen=${series}.length;
var vsum=[];
var value=${value};//[[58,345,600][200,-20,255]];
var temp=0;
var str="[";
for(var i=0;i<slen;i++)
{
if (i>0)
{
str+=",";
}
vsum[i]=value.slice(temp,temp+slen);
var random=Math.round(vsum[i][2] / 5);
temp+=slen;
str += "{name:'"+series[i]+"',type:'scatter',symbolSize: "+function (value){return Math.round(value[2] / 5);}+",data: ["+vsum[i]+"]}";
}
str+="]";
return str;
}
}
步骤1:
首先了解系列中data的数据类型,不同的画法中需要不同类型的数据,如[21,45,21]或者[[23,12][76,34][4,90]]。标准气泡图所需的数据类型为[[23,3,12][76,34,104][4,59,90]],因此左侧参数传递的数据值需为[[23,3,12][76,34,104][4,59,90]]这样的数据,系列和分类值分别为成员为单值的序列即可。个别图形不需要分类,因此左侧分类参数不添加即可。
可在报表中将datavalue数据处理好,直接在参数表达式中使用。
步骤2:
获取左侧参数传递过来的数据,通过循环系列逐一拼接系列串
上述方法的具体处理是通过画法中所需的系列值和data数据决定,不是一成不变,需根据不同的数据值灵活运用。
将json数据传递给js模板
以地图-城市空气质量图为例进行json数据传递说明:
Echarts地图-城市空气质量图HTML数据内容为:
如上所示html文件中data:[]部分为需要处理的内容,其内容为json串,如通过js脚本拼接会比较麻烦。因此润乾报表提供了json函数,专门针对echarts图形中需要传递json数据时使用。方便用户只需要在左侧参数表达式中使用json函数处理数据传递即可,右侧可直接通过参数获取json内容,最终将拼接好的串加到data:[]中。操作如下:
步骤1:
ds2数据集内容为:
步骤2:
添加参数表达式,并且在右侧js模板中引用参数
上述步骤中数据集和参数表达式的内容是通过画法中所需data数据决定的,不是一成不变,需根据不同的json数据值灵活运用json函数。具体json函数使用方法可以参考《程序员参考》1.9小节中的json()函数说明。
本菜单项的功能是为选中的单元格编辑属性值和表达式。
选中要设置表达式的单元格,单击 报表-表达式,或 右键菜单-表达式,或使用快捷键Ctrl+E,或双击单元格可打开“表达式编辑”界面,如下图所示:
如果是编辑属性值,直接在上面所示的界面中编辑属性值,编辑完成后,点击【确定】按钮即可。
如果需要编辑表达式,选中上面的“表达式”单选框,将弹出如下所示的界面:
在“报表表达式”的编辑区中输入表达式,表达式中可以使用系统定义的数据集、参数、系统内置的一些函数和运算符。常数主要用于获取报表属性中下拉框的代码值。表达式编辑完成后,点击【确定】按钮即可。
有关表达式前面是否写等号的问题,请参考《程序员参考》报表表达式注意事项 一节。
本菜单项的功能是用于快速定义子报表。
子报表的概念:
在业务逻辑中,常常会出现一张报表由多张子报表组成,这多张子报表与主报表之间可能有业务联系,也可能完全没有联系,我们称这种报表为复合报表。
在润乾报表中,由多张报表组成的报表称为主报表,其含有的报表称为子报表。子报表总是位于主报表的某个单元格中,该单元格可以是合并格。
子报表本身也可以是复合报表,因此,子报表可以一层一层的嵌套下去。
定义子报表:
选中要插入子报表的单元格,点击 报表-子报表,或者 右键菜单-子报表,打开“子报表单元格属性定义”界面。
图1.4.11.2-1子报表单元格属性定义界面
点击【定义子报表】按钮,弹出报表属性编辑界面,如下图所示:
点击【增加】按钮,在子报表列表框中自动添加一个子报表,可以编辑子报表的名称及子报表的路径。如下图所示:
可以定义多个子报表,编辑完成后在上图中点【确定】按钮回到“子报表单元格属性定义”界面。如图1.4.11.2-1子报表单元格属性定义界面所示。
在“请选择子报表”下拉框中选择该单元格要插入的子报表名称。
选择引用方式:引入/嵌入。
根据实际的需要,通过点击【增加】按钮,为子报表增加参数。在参数列表中的“参数”列编辑参数的名称(注意:该参数需是在子报表中定义过的),在参数列表中的“对应值表达式”列编辑该参数在主报表中的值表达式。在参数列表中选中一个参数,点击【删除】按钮可以删除该参数。点击【重置】按钮可以删除参数列表中的所有参数,以重新编辑参数。设置完成后点击【确定】按钮,即可将子报表插入到选中的单元格中。如下图所示:
子报表的引用方式:
子报表的引用方式分为嵌入式和引入式。
嵌入式
嵌入式主子报表的特点是在单元格中嵌入子报表,形成格中嵌表的模式,子报表和主报表的格线可以不对齐,子表间格线也不对齐。 嵌入式的子报表扩展后,是个独立的报表,因此子表源格一直保留着,主报表可以访问子报表的值。
引入式
引入式子报表的特点是主报表单元格根据子报表的行数列数,双向同时扩展,子报表有几行几列,主报表中就扩展出几行几列,子报表占用主报表的空白行列,格线严格对齐。引入式的子报表扩展后,和主报表形成了一个统一的二维矩形单元格,因此子报表的源格不保留,此时主报表不能访问子报表的值。
本菜单项的功能是用于设置某一单元格的数据类型和单元格数据值。
选中某一单元格,点击 报表-数据类型,或者 右键菜单-数据类型,将弹出数据类型定义界面,如下图所示:
● 单元格的类型:普通格、HTML和富文本。
普通格
文本类型是单元格默认的数据类型,我们在报表单元格里使用最多的就是这种类型。如果单元格的类型为“文本”,系统就把单元格中的字符、数字或表达式的计算结果都当成文本来处理。
html
html是超文本标记语言,一个HTML文件不仅包含文本内容,还包含一些标记。 如果报表中需要用到一些标记,但单元格不支持这种标记,这时就可以把单元格的类型设置为“html”类型,在单元格中嵌入html标记,通过html类型可以在单元格中显示单元格本身不支持的标记信息。html类型还有一个用途是可以在单元格中嵌入隐藏的javascript函数,如果报表中多处都用到同一个js函数,我们可以把一个隐藏单元格设置为html类型,在此单元格中定义js函数,其他单元格可以引用,这样给用户的报表设计带来了很大方便。
● 举例:在报表中插入html的map标记
1、选中要设置成html格式的单元格,点击 报表-数据类型,或者 右键菜单-数据类型,弹出格子数据类型定义界面,选择类型为:HTML。
2、在内容编辑框中输入html标记,如上图所示。
3、点击【确定】按钮,报表中插入html标记如下所示:
富文本
富文本数据类型的格式主要采用类Html的格式,但是只支持字体相关属性的设置,下面具体介绍一下富文本类型的使用方法。
1、对Html语法的支持
富文本支持html标签如下:
①字体标签:<font></font>,其中包括各种字体属性:字体(face)、字色(color)、字号(size),各个属性可以同时使用在一个标签用法中。
注意:富文本标签中的“字体”并不能自由定义,它定义的是字体的网页字号,只能在一号到七号间选择,相对应的实际字号为8磅到36磅。
②粗体标签:<b></b>标签内文字的字体加粗
③斜体标签:<i></i>标签内文字的字体变斜体
④下划线标签:<u></u>标签内文字加下划线
⑤上标标签:<sup></sup>标签内文字变为上标
⑥下标标签:<sub></sub>标签内文字变为下标
⑦段落标签:<p></p>标签内文字为一个段落,可以在该标签内设置文本之间的行间距
注意:段落标签,不支持word以及Excel的导出。
另外,如果有容易产生混淆的情况,需要使用“<”“&”等字符,可以如同Html中同样使用“>”、“&”等。
2、对Style的支持
支持部分在font标签中使用的style。支持style中的下列属性:字体(font-family),字色(color),字号(font-size),粗体/非粗体(font-weight:bold/ font-weight:normal),斜体/非斜体(font-style:italic/ font-style:normal),有下划线/无下划线(text-decoration:underline/ text-decoration:none),在同一个style中可以使用一个或者多个属性。
富文本数据类型的单元格,在web端浏览时,按照Html语法由浏览器解析相应代码,因此,代码必须符合Html语法规则。
● 举例:在报表中使用富文本实线上下标格式
1、选中要设置成html格式的单元格,点击 报表-数据类型,或者 右键菜单-数据类型,弹出格子数据类型定义界面,选择类型为:富文本。
2、在内容编辑框中输入富文本内容,如上图所示。
3、保存该报表,点击【预览】按钮,显示如下:
● 举例:在富文本中使用<p></p>标签
在单元格A2中设置富文本,但不使用<p></p>标签,在单元格B2中设置富文本并且使用<p></p>标签,对比两个单元格,可以看出两个标签<p></p>中设置的行间距不同。
1、选中要设置成富文本的单元格,点击 报表-数据类型,或者 右键菜单-数据类型,弹出格子数据类型定义界面,选择类型为:富文本,单元格内容设置如下:
同时行高也可以使用html的字号和像素,例如:<p style="line-height:2"></p>;<p style="line-height:20px"></p>。
2、在IDE中,点击【预览】按钮,显示如下:
本菜单项的功能是用于为单元格设置图片。
选中某一单元格,点击 报表-图片,或者 右键菜单-图片,将弹出图片定义界面,如下图所示:
● 图片类型:图片文件、表达式和自定义。
图片文件
单元格的类型是图片,此图片可以是任何的图片文件,单元格的数据值表达式是图片文件的路径。
● 举例:在报表中插入图片文件
1、选中要插入图片的单元格,点击 报表-图片,或者 右键菜单-图片,弹出格子数据类型定义界面,选中图片文件选项。
2、在内容编辑框中编辑图片文件的路径。可以点击【选择】按钮,弹出打开文件对话框,在此选择图片文件的路径信息,或者直接在内容编辑框中输入图片文件的路径。如下图所示:
3、点击【确定】按钮,报表中插入图片的预览效果如下所示:
在“表达式”的编辑区中输入表达式,计算结果需为图片,如二进制流。表达式中可以使用系统定义的数据集、参数、系统内置的一些函数和运算符。表达式编辑完成后,点击【确定】按钮即可。
自定义
自定义图片可通过“自定义类”和“dfx文件”两种方式。
1) 自定义类
用户可通过实现ICustomGraph接口,编写自定义类画图,在自定义窗口中引用自定义类,加载参数设置参数值。
详细说明请参考《程序员参考》5.7.2小节。
2) dfx文件
引用.dfx文件通过调用集算器文件生成的画法来绘制统计图,参数列表会自动将dfx中定义的参数列出。.dfx文件内容如下所示:
概念:
数据图层主要是用来实现电子签名,单元格水印效果,电子公章等功能的。
效果如下图所示:
属性:
在数据图层中需要设置图层、配置类型、图层宽度、图层高度及URL或表达式五个属性。
图层
选择图层的显示方式,分为前景图和背景图两种。
数据图层可以做背景图,这样就可以实现图片文件上编辑文字的效果。
数据图层也可以做前景图,这时单元格中的内容就会被数据图层覆盖掉。
配置类型
配置类型分为URL与自定义类两种。如果用户在报表中使用的图层一个图片文件,就选择配置类型为“URL”, 如果用户在报表中使用的图层自己写的一个Java类画的图就选择配置类型为“自定义类”。
图层宽度
设置图层的宽度。像素为单位。
当图层宽度与图层高度均为0时,图片显示为原尺寸大小;
当图层宽度为0,高度不为0时,则以图层高度为新尺寸,按照图片的比例计算出图层宽度。
图层高度
设置图层的高度。像素为单位。
当图层宽度与图层高度均为0时,图片显示为原尺寸大小;
当图层高度为0,宽度不为0时,则以图层宽度为新尺寸,按照图片的比例计算出图层高度。
URL或表达式
URL或表达式:与“配置类型”选项相对应,URL可以是绝对路径名,也可以是相对路径名。如果是相对路径,在WEB 应用中发布,相对于应用根目录,在设计器中不可用相对路径。如果是表达式,则表达式的计算结果需为图片,如二进制流。
如果是要动态拼接图片路径,可以写表达式,比如:="D:/report/"+arg1
应用举例:
● 举例一:电子签名举例
在需要电子签名的报表中,我们可以通过设置电子签名所在单元格的数据图层来实现,具体设置方法如下:
1. 制作一张报表,如下:
2. 选中D5单元格,右键菜单-数据图层,设置图层为背景图,配置类型为URL路径,设置如下图:
3. 点击确定按钮,在web端浏览,效果如下:
● 举例二:水印效果举例
为了报表的美观性,我们可能需要某些单元格出现水印效果,这时我们就可以通过数据图层来实现,具体方法如下:
1、首先,制作一张报表;
2、接着,设置显示水印效果的单元格的数据图层;
选中A10单元格,右键菜单-数据图层,选择图层为背景图,具体设置如下图:
3、设置完成后,在Web端浏览该报表,效果图如下所示;
● 举例三:电子公章举例
在使用电子签章时,印章图片原图可能会比图层所在单元格大,印章会超出单元格原始区域,但我们要求印章按原图大小显示,并且不会影响印章周围单元格文字的显示,这时我们就需要设置印章单元格的尺寸调整方式为按单元格内容扩大。
1. 制作一合同报表,见下图:
2. 选中J30,右键菜单-数据图层,设置图层为前景图,设置如下图,设置完成后点击【确定】按钮:
3. 设置J30的尺寸调整方式为按单元格内容扩大,见下图:
4. 设置完后,在web端浏览如下:
润乾报表提供了编辑框、密码框、下拉列表框、单选按钮、下拉数据集、复选框、下拉日历、下拉树、异步下拉树、上下载文件等编辑风格。
图1.4.15-1
是否可写:
此选项仅支持参数模版。
设置参数表单参数格是否可写。
编辑风格:
编辑框
设置参数模版某单元格为编辑框,操作如下,选中需要设置的单元格,点击
右键-编辑风格
或者点击菜单栏中的 报表-编辑风格,弹出编辑风格设置窗口,如图1.4.15-1所示。在编辑风格下拉列表框中选择编辑框编辑风格,点击【确定】按钮即可。
设置好编辑框风格的属性后,发布到web上,效果如图所示:
密码框
设置报表模版某单元格为密码框,操作如下,选中需要设置的单元格,点击
右键-编辑风格 或者点击菜单栏中的 报表-编辑风格,弹出编辑风格设置窗口,如图1.4.15-1所示。在编辑风格下拉列表框中选择密码框编辑风格,点击【确定】按钮即可。
设置好密码框风格的属性后,发布到web上,效果如图所示:
下拉列表框
此编辑风格支持参数模版和填报表。
比如性别,通常用1和0代表男、女,可以设置该单元格编辑风格为下拉列表框,操作如下,以参数模版为例选中需要设置下拉列表的单元格,右键-编辑风格 或者点击菜单栏中的 报表-编辑风格 (填报表中对应 填报-编辑风格),弹出编辑风格设置窗口,如图1.4.15-1所示。
在编辑风格下拉列表框中选择下拉列表框编辑风格,然后在
位置点击 【设置】按钮,系统弹出下拉列表框编辑窗口。
允许多选:如果选择了此项,则允许从下拉列表中选择多个值。如图所示:
允许编辑:如果选择了此项,可以对下拉列表进行编辑,可以输入显示值
允许空值:如果选择了此项,下拉列表框可以为空。
● 注意:“允许编辑”属性能够正确使用的前提条件是下拉列表框没有选择“允许多选”属性。如果下拉列表框允许多选,那么不可以输入显示值和输入下拉选项以外的值,只有在单选的条件下才可以。
● 注意:下拉列表的显示值中不能有英文逗号和分号。因为显示值对应着下拉列表的选择项,下拉列表的不同选择项之间在系统内部是以英文逗号或分号间隔的,如果某一显示值包含了逗号或分号,那么系统在处理时就会把逗号或分号前后拆成两个选择项。
点击【增加】按钮分别在代码值和显示值中输入内容如上图所示。0和1是存入数据库的代码,男、女是显示在页面上的内容。点击【确定】按钮即可。
设置好下拉列表框风格的属性后,发布到web上,我们这里设置下拉列表框为单选。效果如图所示:
● 注意:下拉列表框的单元格不能使用自动换行属性,否则会导致下拉属性不可用。
单选按钮
有些参数模版,我们会用到单选按钮,列出多个选择项,用户只能选择其中的一项。如在人员表单中,分别用1和0代表男、女,用户要么选择男要么选择女。要设置参数表某单元格为单选按钮,操作如下,选中需要设置的单元格,点击 右键-编辑风格 或者点击菜单栏中的 报表-编辑风格,弹出编辑风格设置窗口,如图1.4.15-1窗口所示。
在编辑风格下拉列表框中选择单选按钮编辑风格,然后在
位置点击【设置】按钮,系统弹出单选按钮编辑窗口。
可以在下面的列数框中输入单选按钮的列数。点击【增加】按钮分别在代码值和显示值中输入内容如上图所示。0和1是存入数据库的的代码,男、女是显示在页面上的内容。点击【确定】按钮即可。
勾选【使用数据集】按钮后则切换至【DS】tab页,选择数据集、显示列和代码列,如下图:
设置好单选按钮风格的属性后,发布到web上,效果如图所示:
单选按钮
填报表专用。
在使用填报表时,我们会用到单选按钮,需要列出多个选项,用户只能选择其中一项。例如考卷中的判断题,用户只能选择对或者选择错,这里就可以设置选项列为单选按钮,如下面的示例:
A2单元格类型为维度格,表达式:=pd.id(NO),字段名称:pd.NO
B2单元格类型为数值格,字段名称:pd.EXAM_CONTENT
C2单元格类型为数值格,字段名称:pd.ANS
B2、C2单元格“是否可编辑表达式”属性值均为false。
选中需要设置的单元格C2,右键菜单选择【编辑风格】或单击主菜单中的【填报】->【编辑风格】,弹出“编辑风格”窗体,在“编辑风格”下拉框中选择“单选按钮”风格类型。
点击【设置】按钮,弹出单选按钮对话框,配置数据表、显示列、数据列、过滤表达式、列数。如下图所示:
设置好单选按钮风格的属性后,发布到web上,效果如图所示:
使用单元按钮编辑风格的填报表,数据处理中的数据取数表与数据回填表不是同一个数据表,例如上例中的数据来源表为pd.txt文件,表结构如下:
数据来源脚本:
数据去向脚本:
提交后的结果保存在pd_save.txt文件中,结果如下:
当取数表与回填表来自数据库表时,报表单元格设置不变,数据处理中的配置如下:
数据来源脚本:
数据去向脚本:
表pd为取数表,表pd_save为回填表。
设置参数模版单元格为下拉数据集。下拉数据集的数据可来自于定义好的数据集,或者使用异步加载直接从数据库中获取下拉数据。异步加载适用于要异步加载的数据可用SQL/SQL表达式读取的情况,当需要对异步加载取数SQL传递参数时,表达式可通过使用“=”拼接完整的SQL语句实现。
(一)下拉数据来源于数据集:
对类别名称设置下拉数据集的编辑风格,具体操作如下:
第一步:为参数模板新建一个数据集ds1,获得类别表中类别ID,类别名称。
第二步:设置需要显示下拉数据集的单元格编辑风格。
选中需要设置的单元格,点击 右键-编辑风格 或者 报表-编辑风格,弹出编辑风格设置窗口,如下图所示:
在编辑风格下拉列表框中选择下拉数据集编辑风格,然后在位置点击【设置】按钮,系统弹出下拉数据集编辑窗口。分别在窗口中的数据集、显示列、数据列设置如下内容。如下图所示:
编辑完成后点击【确定】按钮即可。
(二)下拉数据来源于数据库的取数SQL
根据业务需要,有时我们需要通过已经选择的上一级选项,来过滤筛选出下一级的备选项。此时,可使用关联过滤—异步加载来实现。
如上图所示产品名称需通过关联过滤,查询显示出当前类别下的产品名称列表。并且产品名称来源于不同数据库中的产品表,此时则可通过异步加载实现。操作步骤如下:
设置需要关联过滤显示下拉数据集的单元格编辑风格。
选中D1单元格,点击 右键-编辑风格 或者
报表-编辑风格,弹出编辑风格设置窗口,在编辑风格下拉列表框中选择下拉数据集编辑风格,然后在位置点击【设置】按钮。在下拉数据集编辑窗口的【关联过滤】中添加触发关联过滤的单元格名,如下图所示:
在【异步加载】中指定取数SQL,根据类别ID进行过滤。
如下图所示:
如果取数SQL中需要传递参数,可使用以“=”开头的SQL表达式来实现。以传递单值参数为例,操作步骤如下:
在参数模板中定义字符串类型参数arg1:
下拉数据集编辑界面取数SQL表达式,可编辑如下:
参数除了可以传递单值,还可以传递数组,需要用string()函数将数组转换成字符串。以参数arg1是字符串组为例,取数SQL可编辑如下:
使用异步加载时需注意:
数据源名称为空表示用默认数据源;
取数SQL中按数据值列和显示值列的顺序只需选出前两个字段的值,如只有一个字段则真实值和显示值使用同一个;
异步加载无需指定数据集、显示列、数据列、取数表达式、关联过滤表达式;
取数SQL中可用$1,$2...表示触发关联过滤的第一个,第二个...单元格中的参数值,要注意数据类型,比如字符串字段需要加上引号,如 '$1'。
取数SQL使用表达式时,要求SQL语句必须符合数据库的语法查询规则。 编辑完成后点击【确定】按钮即可。
取数表达式:对数据集中满足条件的数据进行筛选,此功能不用于异步加载
空选项文字:只有当【允许空值】勾选时,此处编辑的文字才会显示
允许多选:如果选择了此项,则允许从下拉列表中选择多个值
允许编辑:如果选择了此项,可以对下拉列表进行编辑,可以输入显示值
允许空值:如果选择了此项,下拉列表框可以为空
清除特殊字符:如果选择了此项,可以屏蔽特殊字符对javascript产生影响
● 注意:
(1) 下拉数据集的显示列值不能包含英文逗号和分号。因为显示列值对应着下拉数据集的选择项,下拉数据集的不同选择项之间在系统内部是以英文逗号或分号间隔的,如果某一显示列值包含了逗号或分号,那么系统在处理时就会把逗号或分号前后拆成两个选择项。
(2) 下拉数据集的单元格如果使用自动换行属性,则会导致下拉属性不可用。
(3) 下拉数据集的显示列值中如果包含回车换行,引号之类的特殊字符,可能会在使用“关联过滤”属性后,对javascript产生影响,为了屏蔽这些字符的影响,将“清除特殊字符”选项勾选上即可。
(4) 数据集中如果存在重复的显示值,但是有不同的数据值时,那么选择重复的显示值时,返回对应的数据值;如果输入重复的显示值,那么只能返回重复选项中第一个显示值对应的数据值。
(5) 不使用异步加载时,如需设置关联过滤,需添加触发关联过滤单元格和设置关联过滤表达式。
下拉数据表
填报表专用。
在使用填报表时如果下拉列表中的数据来自于数据表,就可以采用下拉数据表的编辑风格。例如在员工信息表中,员工所属部门可以通过下拉数据表选择所属部门。
设置下拉数据表编辑风格操作如下:
第一步:定义数据表
在填报表中,通过引入dfx文件或者直接编辑脚本,返回填报表一个下拉序表变量,比如下图所示的dept,该变量就是下拉数据表,保存的是部门表中所有部门的编号及名称。如下:
第二步:设置需要显示下拉数据表的单元格编辑风格。
选中需要设置的单元格,点击 右键-编辑风格 或者点菜单栏中的 填报-编辑风格,弹出编辑风格设置窗口,如下图所示。
在编辑风格下拉列表框中选择下拉数据表编辑风格,然后在
位置点击【设置】按钮,系统弹出下拉数据表编辑窗口,如下图所示:
数据表是第一步中所建的dept数据表,显示列对应部门名称,数据列对应部门编号
如果该填报表部门列有空值的情况,那么下拉列表中就找不到匹配的显示值,这时可以设置空选项文字,即该格子数据为空时的显示文字。
编辑完成后点击【确定】按钮即可。
设置好下拉数据表的编辑风格属性后,发布到web上,效果如下图所示:
● 注意:
(1) 下拉数据表的显示列值不能包含英文逗号和分号。因为显示列值对应着下拉数据表的选择项,下拉数据表的不同选择项之间在系统内部是以英文逗号或分号间隔的,如果某一显示列值包含了逗号或分号,那么系统在处理时就会把逗号或分号前后拆成两个选择项。
(2) 下拉数据表的单元格如果使用自动换行属性,则会导致下拉属性不可用。
(3) 下拉数据表的显示列值中如果包含回车换行,引号之类的特殊字符,可能会在使用“关联过滤”属性后,对javascript产生影响,为了屏蔽这些字符的影响,将“清除特殊字符”选项勾选上即可。
(4) 数据表中如果存在重复的显示值,但是有不同的数据值时,那么选择重复的显示值时,返回对应的数据值;如果输入重复的显示值,那么只能返回重复选项中第一个显示值对应的数据值。
复选框
此编辑风格支持参数模版和填报表。
复选框常用在参数模版中,通过页面向其它报表传递参数的情况下,在需要设置复选框单元格的属性中为单元格设置变量名,如:arg_name,这个变量名要与用到该参数的报表中的参数名相同,这样当参数模版提交时,报表会从页面上获取该复选框的状态值做为同名参数值。
以参数模版为例,选中需要设置的单元格,点击 右键-编辑风格 或者点击菜单栏中的报表-编辑风格(填报表中对应 填报-编辑风格),弹出编辑风格设置窗口,如图1.4.15-1所示。
在编辑风格下拉列表框中选择复选框编辑风格,然后在
位置点击【设置】按钮,系统弹出复选框编辑窗口。
开值表示当复选框选中时的状态值,关值表示没选中时的状态值,标题是复选框显示的内容,打印风格表示打印时勾选按钮选中时是打勾或打叉。
编辑完成后点击【确定】按钮即可。
设置好复选框的属性后,发布到web上,效果如图所示:
下拉日历
此编辑风格支持参数模版和填报表
在页面输入时间相关值时,会用到下拉日历。以参数模版为例,选中需要设置为下拉日历的单元格,点击 右键-编辑风格 或者点击菜单栏中的 报表-编辑风格(填报表中对应 填报-编辑风格),弹出编辑风格设置窗口,如图1.4.15-1所示。
在编辑风格下拉列表框中选择下拉日历编辑风格,然后在
位置点击【设置】按钮,系统弹出下拉日历编辑窗口。
在取值类型下拉框中选择下拉日历的取值类型,并根据需要选择是否勾选“可以自主填写日期”(默认不勾选,只能通过日期控件选择日期;如果勾选,除了可以通过日期控件选择日期外还可以在下拉日历单元格中输入日期),点击【确定】按钮即可。
设置好下拉日历的属性后,发布到web上,效果如下图所示:
● 注意:下拉日历的单元格不能使用自动换行属性,否则会导致下拉属性不可用。
² 下拉日历的国际化格式定义:
不同国家不同语言的情况下,要求日期的输入格式不同,比如有些国家要求MM/dd/yyyy,此时解决办法是把lib目录下的datetimeformat.jar打开,找到datetimeformat_zh.properties或datetimeformat_en.properties,编辑其中的日期时间格式即可。
下拉树
此编辑风格支持参数模版和填报表
有时我们在报表或填报表中以树型结构来显示某些信息,这时就用到了下拉树的编辑风格。下拉列表和下拉数据集只能显示一层数据,而下拉树可以显示多层数据。
以参数模版为例,下拉树的实现步骤如下:
数据库表结构如下:
customerType表
typeId |
客户类型编码 |
typeName |
客户类型名称 |
customer表
Customet_id |
客户编码 |
Customer_name |
客户名称 |
customerType |
客户类型编码 |
tel |
联系电话 |
第一步:新建数据集,ds_customerType,得到客户类型编码和名称
第二步:新建数据集,ds_cust,得到客户信息。
第三步:选中需要设置为下拉树编辑风格的单元格,点击 右键-编辑风格 或者点击菜单栏中的 报表-编辑风格(填报表中对应 填报-编辑风格),弹出编辑风格设置窗口,如图1.4.15-1所示。
在编辑风格下拉列表框中选择下拉树编辑风格,然后在
位置点击【设置】按钮,系统弹出下拉树编辑窗口。
选中根节点,点击增加,设置第一层节点如下图所示:
添加第二层节点,设置第二层结点如下图:
在过滤条件一栏里设置表达式:CUSTOMERTYPE==$1 表示数据集ds_cust中的字段CUSTOMERTYPE值要等于第一层节点的数据列值。
可以通过点击 “帮助” 打开过滤条件的帮助窗口,获得输入过滤条件的帮助信息。如下图所示:
编辑完成后点击【确定】按钮即可。
设置好下拉树的属性后,发布到web上,效果如下图所示:
● 注意:
(1) 下拉视树的单元格不能使用自动换行属性,否则会导致下拉属性不可用。
(2) 报表中的数据集对应填报表中的对象名。
(3) 过滤条件中字段的字段类型是字符串时$1需添加双引号,字段类型是数值型时省略双引号。
异步下拉树
此编辑风格支持参数模版
当数据量大时会出现下拉树加载慢的情况,这时就可以使用异步下拉树编辑风格。使用异步下拉树,初始时只加载首层节点的数据,当展开某子节点时,再加载它的子节点数据,不展开的就不加载。SQL语句支持SQL表达式传递参数,需使用“=”拼接完整的SQL语句。
选中需要设置异步下拉树编辑风格的单元格,点击右键-编辑风格或者点击菜单栏中的报表-编辑风格,弹出编辑风格设置窗口,如图1.4.15-1所示。
在编辑风格下拉列表框中选择异步下拉树编辑风格,然后在
位置点击【设置】按钮,系统弹出异步下拉树编辑窗口。
可以通过点击“帮助”打开异步下拉树设计帮助窗口,获得输入首层节点SQL和子层节点SQL的帮助信息。如下图所示:
在数据源名称列表选中数据源后,分别在首层节点SQL和子层节点SQL编辑框中编辑SQL。如下图所示:
编辑完成后点击【确定】按钮即可。
设置好异步下拉树的属性后,结合报表发布到web上,效果如下图所示:
异步下拉树中支持对取数SQL传递参数,具体使用可参考下拉数据集异步加载中取数SQL里参数的用法。
● 注意:异步下拉树的单元格不能使用自动换行属性,否则会导致下拉属性不可用。
上下载文件
此编辑风格支持填报表
在页面录入图片或者附件时,会用到上下载文件。选中需要设置为上下载文件的单元格,点击 右键-编辑风格 或者点击菜单栏中的 填报-编辑风格,弹出编辑风格设置窗口,如图1.4.15-1所示。
在编辑风格下拉列表框中选择上下载文件编辑风格,然后在
位置点击【设置】按钮,系统弹出上下载文件编辑窗口。
在动作下拉框中选择:可以上载下载或仅上载或仅下载或不能上下载,并填写好最大文件长度后点击【确定】按钮即可。
设置好单元格的数据类型为图片或BLOB后,发布到web上,图片效果如下图所示:
● 注意:上下载文件的单元格不能使用自动换行属性,否则会导致上下载属性不可用。
本菜单项的功能是为报表设置密码。
通过菜单 报表-设置密码 打开“设置密码”编辑界面,如下图所示:
原密码
默认情况下,原密码是灰显的,不可编辑。当重置密码或删除密码时,原密码可编辑。
新密码
为报表设置新密码。
重复新密码
重复设置新密码,以保证两次输入密码一致。当删除密码时,重复新密码可设置为空。
填报表专用。
本菜单项的功能是用于为填报表设置数据来源、数据去向和保存对象的旧数据。
文件-新建填报表 打开填报表编辑界面,点击 填报-数据处理,打开“数据处理”编辑界面,可切换到相关的标签页,设置相关的报表数据。“数据处理”编辑界面如下图所示:
数据来源:
在数据处理编辑界面中切换到“数据来源”标签页,设置填报表的数据来源。
如果填报表需要展现数据,可以通过集算器制作dfx文件或者直接编辑脚本,将填报表展现所需的数据通过变量的形式返回给填报表,然后在填报表单元格中就可以通过引用变量名获取数据。通常返回的变量应该是数据集序表,维序列和下拉序表。也可以通过多源SQL,将填报表展现需要的数据以对象的形式返回给填报表,然后在填报表单元格中通过引用对象名获取数据。
如果取数脚本比较简单,可以直接编辑脚本,如果取数脚本可以为多个填报表复用,那么可以将脚本内容制作为一个dfx文件。
数据来源模式包括脚本、DFX文件和多源SQL。
脚本
在脚本编辑区编写脚本,或粘贴写好的脚本,如果脚本中需要传入参数,可在报表文件的参数列表中定义,其中参数名是脚本里定义的参数名。如果取数脚本比较简单,可以直接编辑脚本。脚本只支持10行5列,如果脚本内容过多,可使用DFX文件。
DFX文件
用于设置填报表取数所用到的dfx文件。通过选择文件按钮加载取数dfx文件。
dfx文件可以是绝对路径名,也可以是相对路径名。如果是相对路径,相对于【填报】—>【选项】—>【集算器选项】中设置的寻址路径。使用相对路径时,路径前不需要加反斜杠“/”。
多源SQL
用于设置填报表取数时用到的SQL语句。通过点击【增加】按钮后的向导设置取数SQL语句。
增加
通过【增加】按钮可以新增一个对象,生成取数SQL语句等相关来源信息。
如果SQL中需要传入参数,则需要在【参数】tab页、填报文件的【参数】列表中同时定义参数名。
编辑
通过【编辑】按钮可以修改对象列表中已选中对象的取数SQL定义。
浏览数据
通过【浏览数据】按钮可以查看取数SQL中返回的数据信息。
首列转为序列
用于结果集只有一列时将结果作为序列返回,一般用来做特定查询。
填报相关的sht文件和结果文件的查找顺序依次为:
绝对路径—raqsoftConfig.xml中的input里的home配置路径—web根目录—raqsoftConfig.xml中Esproc里的主目录以及dfx目录列表,找不到报错。
填报相关的dfx文件查找顺序依次为:
绝对路径—寻址路径—主目录,找不到报错。
数据去向:
在数据处理编辑界面中切换到“数据去向”标签页,设置填报表的数据去向。
如果填报表需要往数据库或者文件中回填数据,可以通过集算器制作dfx文件或者直接编辑脚本,将填报表填报后的数据通过变量的形式返回给填报表,然后在保存数据dfx或者脚本中就可以通过引用变量名传递数据。通常返回的变量应该是数据集序表。也可以通过多源SQL,将填报表填报后的数据通过对象的形式返回给填报表,然后在多源SQL的表达式中通过“对象名.字段名”传递数据。
如果回填数据的脚本比较简单,可以直接编辑脚本,如果回填数据的脚本可以为多个填报表复用,那么可以将脚本内容制作为一个dfx文件。
数据去向模式包括脚本、DFX文件和多源SQL。
脚本
在脚本编辑区编写脚本,或粘贴写好的脚本。如果取数脚本比较简单,可以直接编辑脚本。
DFX文件
用于设置填报表回填数据所用到的dfx文件。通过选择文件按钮加载回填dfx文件,回填dfx文件设置绝对路径和查找规则同取数dfx一样。
多源SQL
用于设置填报表回填数据时所用到的SQL语句等。通过点击【增加】按钮后的向导设置回填SQL语句。
增加
通过【增加】按钮可以增加一个对象,并设置回填SQL语句。回填SQL语句中,必须设置主键,在选出的字段中,需要设置数据回填时的表达式,格式为:对象名.字段名。
编辑
通过【编辑】按钮可以修改对象列表中已选中对象的数据回填SQL定义。
注意:如果选出的字段,不设置表达式,则数据回填时会把数据库中原数据置空。
保存对象的旧数据:
在数据处理编辑界面中切换到“保存对象的旧数据”标签页,设置填报表的保存对象的旧数据。
数据来源设置好后,切换到“保存对象的旧数据”标签页,通过提取对象名按钮提取对象名,并且系统默认生成对应的保存旧数据的对象名。如下图所示:
回填数据的dfx、脚本或多源SQL可以通过这两个对象名对比更新数据库或者文件中的数据。
使用向导生成脚本:
通过使用向导生成脚本可以快速生成取数来源、数据去向和保存对象的旧数据。点击使用向导生成脚本按钮,打开脚本编辑向导界面,如下图所示:
通过增加数据集,可选数据集类型包括:数据表、数据文件和维序列。
Ø 数据表
增加数据集时选择数据表类型,要求数据源已连接,界面如下:
在此界面可以设置选出的字段,设置主键,增加计算列,增加检索条件,设置排序方式,设置参数。数据源设置好之后点击确定,系统根据用户配置的数据源信息自动生成数据来源和数据去向脚本。
数据来源脚本如下图:
如果填报表文件的数据集中需要定义参数,那么可以在【使用向导生成脚本】时,在【参数】tab页中添加,也可以在脚本中直接手动添加参数。
数据去向脚本如下图:
保存旧数据的对象名如下图:
Ø 数据文件
增加数据集时选择数据文件类型,通过已经有的文本文件创建数据集,界面如下:
此界面中可以根据文本文件的内容做不同的设置。数据源设置好之后点击确定,系统根据用户配置的数据源信息自动生成数据来源和数据去向脚本。
数据来源脚本如下图:
数据去向脚本如下图:
保存旧数据的对象名如下图:
Ø 维序列
增加数据集时选择维序列类型,可以创建维序列,界面如下:
数据来源脚本如下图:
多源SQL向导:
通过多源SQL向导可以快速生成数据来源、数据去向和保存对象的旧数据。点击多源SQL向导按钮,打开多源SQL编辑向导界面,如下图所示:
通过增加数据集,数据集类型为:数据表
Ø 数据表
增加数据集时选择数据表,界面如下:
在此界面中,需先选择数据表,选出需要的字段,同时需要为选出的字段设置数据回填时的表达式,设置数据表的主键。
在生成SQL语句时,可根据实际需要切换到相关tab页编辑计算列、检索条件、排序等属性。如果SQL语句中需要传入参数,则需要在【参数】tab页和填报文件的【参数】列表中定义参数名。
注意:
1、 如果选出的字段,不设置表达式,则数据回填时会把数据库中原有数据置空;
2、 数据回填时主键不可为空。
其他:
本菜单项的功能是用于给统计表设置基准表。
统计功能用于外部传入需要统计的结果文件列表,按统计表结构的维度进行相应汇总运算后填入相应数值格。
在数据处理编辑界面中切换到“其他”标签页,如下图所示:
基准表:用于设置统计表对应的的填报表,一个统计表只能针对一个填报表设计,即只能统计该填报表模板采集上来的数据。基准表文件设置绝对路径和相对路径,相对路径则相对于配置文件raqsoftConfig.xml中的报表应用资源路径。
公用维处理模式
公共维:单值数据的序表中的维字段,默认会自动拼入到当前Sheet的数据区其他序表中。
自动增加到本页数据区序表中
用于设置把公用维拼接到本页数据区序表中
不增加到序表中
设置公用维不增加到序表中
此选项只针对数据存取为dfx文件或者脚本方式,与自动存取方式无关。
外部维处理模式
外部维:tag标签中定义的outerDim,默认会自动拼入所有Sheet的所有序表中。
增加到所有序表中
设置外部维增加到所有序表中
只增加到所有公用序表中
设置外部维只增加到所有公用序表中
不增加到任何序表中
设置外部维不增加到任何序表中
此选项只针对数据存取为dfx文件或者脚本方式,与自动存取方式无关。
导入导出数据模式
在导入导出填报表时,可以选择导入导出的数据模式为显示值或真实值,如果想要导入导出原始数据就选用真实值,如果想要导出在填报表通过编辑风格等功能处理以后的数据可以选用显示值。
填报表专用。
文件-新建填报表 打开填报表编辑界面,点击 填报-格间校验,打开“格间校验”编辑界面。格间校验为提交时校验,用于对填报表的多个sheet之间设置校验。在多表填报中,往往表与表之间是存在一定关联关系的,以保证填报数据的正确性。比如, sheet1的数据来源于订单,sheet2的数据来源于订单明细,那么sheet1和sheet2之间就存在一致性关系——订单的ID在订单表和订单明细表中必须一致,所以我们需要对这两个sheet定义表间合法性检查。
可支持聚合函数SUM,例如:
● 注意:不能对扩展格进行校验,否则校验时找不到对应数据会报错。
填报表专用。
文件-新建填报表 打开填报表编辑界面,点击 填报-页属性,打开“页属性”编辑界面。如下图所示:
● 页名称:用于给每个sheet命名。
● 基准页:用于给当前页设置对应的基准表中的sheet。
● 注释:用于给每个sheet添加注释。
填报表专用
文件-新建填报表 打开填报表编辑界面,选中某一行或某些行后点击 填报-行属性 或者 右键-行属性,打开“行属性编辑”界面。如下图所示:
用于设置当前选中行的高度。
填报表专用。
文件-新建填报表 打开填报表编辑界面,选中某一列或某些列后点击 填报-列属性 或者 右键-列属性,打开“列属性编辑”界面。如下图所示:
用于设置当前选中列的宽度。
填报表专用
文件-新建填报表 打开填报表编辑界面,点击 填报-单元格校验,打开“单元格校验”编辑界面。如下图所示:
单元格校验为及时校验,用于给当前选中单元格设置校验,当用户输入的数据不符合校验表达式时,报表系统就会自动弹出错误信息,达到合法校验的目的。如下图所示:
选中E2单元格后点击【填报】-【单元格校验】,填写校验表达式和提示。web端在对折扣列的数据填写时会立即进行校验。校验公式采用Excel的风格。
sheet间也可以使用单元格校验,如下图:
填报表专用。
概念:
数据图层主要是用来实现电子签名、单元格水印效果、电子公章等功能的。
效果如下图所示:
属性:
在数据图层中需要设置图层、配置类型、图层宽度、图层高度及URL或表达式五个属性。
图层
选择图层的显示方式,分为前景图和背景图两种。
数据图层可以做背景图,这样就可以实现图片文件上编辑文字的效果。
数据图层也可以做前景图,这时单元格中的内容就会被数据图层覆盖掉。
配置类型
配置类型分为URL路径与表达式两种。如果用户在报表中使用的图层是一个图片文件,则选择配置类型为“URL路径”;如果用户在报表中使用的图层是一个表达式返回的byte数组,那么就需要选择配置类型为“表达式”。
图层宽度
设置图层的宽度。像素为单位。
当图层宽度与图层高度均为0时,图片显示为原尺寸大小;
当图层宽度为0,高度不为0时,则以图层高度为新尺寸,按照图片的比例计算出图层宽度。
图层高度
设置图层的高度。像素为单位。
当图层宽度与图层高度均为0时,图片显示为原尺寸大小;
当图层高度为0,宽度不为0时,则以图层宽度为新尺寸,按照图片的比例计算出图层高度。
URL或表达式
URL或表达式:与“配置类型”选项相对应,URL可以是绝对路径名或相对路径名,也可以将url设置为http路径。如果是相对路径,在WEB 应用中发布,相对于应用根目录,在设计器中不可用相对路径。如果是表达式,则表达式的计算结果需为图片,如二进制流,比如:employee.select(雇员ID==B3).照片。
如果是要动态拼接图片路径,可以写表达式,比如:"D:/report/"+arg1
关于应用举例可参考1.4.14 数据图层 小节所示。