本菜单项的功能是用于定义报表中用到的数据集。
数据集的概念:
数据集是一个二维的视图,是报表的数据来源。数据集可以通过数据库的SQL查询获得,也可以来自其他异构的数据文件。报表运算引擎不关心数据集的数据来自哪里,始终基于数据集的数据来运算报表。
数据集的定义:
点击 报表à数据集,或者使用快捷键 F11,可打开数据集设置界面,如下图所示:
在上面的界面中,【增加】按钮用于添加一个数据集;【删除】按钮用于删除数据集列表中选中的数据集;【上移】、【下移】可以改变数据集在数据集列表中的位置;【编辑】按钮可以修改数据集列表中选中的数据集定义;【浏览数据】按钮可以查看数据集包含的数据信息;【别名】按钮可以为记录集中的字段起别名,当从数据源取字段时,很多情况都是英文字段,这时可以通过数据集字段中文标题设置界面,给每个英文字段名附上中文名,我们在制作报表时,从数据集取字段名时可以使用中文名了,这样给不熟悉数据集里英文字段具体含义的用户带来了便利,当数据集类型为内建数据集时,不用设置中文名称,可直接修改字段名为中文即可;【转为内建】按钮可以把外部数据集转为内建数据集,所谓内建数据集是指报表中的数据是存储在报表模板中的。通过点击【复制】按钮,可复制选中的数据集,按住ctrl键,可复制多个数据集;打开其他报表,通过点击【粘贴】按钮,可将复制的数据集添加到其他报表的数据集配置界面。
也可以通过 文件à新建报表 向导在制作报表的步骤中新建数据集,如下图所示:
在数据集类型列表中可以任意选择一个数据集类型新建报表,也可以直接点击生成空白报表生成一张空白报表。
注意:如果选择的是SQL数据集,并且该数据集有参数,需先点击“添加报表参数”添加参数。
数据集类型:
系统提供了多种类型的数据集供用户使用,有SQL检索、集算器、脚本数据集、文件数据集和内建数据类型。
表示数据集的数据来自数据库,它是通过SQL语句到数据库中检索满足一定条件的数据,从而形成一个数据集。但这种类型的数据集并不要求用户自己写SQL语句,而是通过图形化的向导界面由用户去选择检索条件由系统自动的生成SQL语句,这种类型的数据集适用于那些对SQL语句不太熟悉的用户。
● 举例:以订单表和订单明细表为例来建立一个SQL检索数据集。
1、在图1.4.2.2-1 所示的数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框,如下图所示:
2、选择“SQL检索”数据集类型,点击【确定】按钮,进入SQL编辑器界面,如下图所示:
3、选择“指定模式”,并通过“可选表名”框和“选中表名”框之间的箭头,在可选表名中选择数据表到选中表名中,也可以通过双击表名选择数据表。
4、切换到“数据字段”标签页,首先通过数据表下拉框选择对应的数据表,下面会列出对应数据表的可选字段,然后通过两个列表框之间的箭头,选择可选字段到选中字段中,也可以通过双击字段名选择字段。
5、切换到“计算列”标签页,通过编辑界面中间的箭头,选择所需要的字段到“计算列”编辑框中,自己编辑表达式。
比如:ORDERDETAILS表中有UNITPRICE与NUMBER字段,希望在数据表里直接取出ORDERDETAILS的UNITPRICE与NUMBER的乘积,则可以在计算列中编辑:ORDERDETAILS.UNITPRICE * ORDERDETAILS.NUMBER as TotalAmt,如下图所示:
6、切换到“检索条件”标签页,通过编辑界面中间的箭头,选择所需要的字段到检索条件编辑框中,自己编辑表达式。SQL语句中可以使用参数,在sql语法里,需要用到参数的地方写上问号。
比如:如果希望从ORDERS表里取出ORDERDATE是某一时间段内的订单,则可以在检索条件中编辑检索条件:ORDERS.ORDERDATE > ? AND ORDERS.ORDERDATE < ?。如下图所示:
7、切换到“排序”标签页,通过编辑界面中间的箭头,选择需要进行排序的字段到排序字段框中。
8、切换到“语法”标签页可以看到编辑好的SQL语句。在SQL语法里,需要用到参数的地方系统后自动写上了问号,比如我们在前面编辑的检索条件,用到了两个问号。如下图所示:
9、切换到“参数”标签页,按照问号顺序,写入参数名或含参数的表达式(不用等号开头)。在这里不用考虑参数的数据类型,程序中会自动转换。如下图所示:
数据集记录行设置:用于控制数据集的按行取数。
起始行和结束行:用于人为控制数据集的行数。如果您的报表数据量比较大时,可以通过参数传递来改变起始行和结束行。一般来说,起始行和结束行都是输入参数,通过参数来控制行号,如果输入常数没什么意义。
记录阈值:针对大数据量生成数据集时,往往会长时间无响应。设置一个阈值(int),实际获得记录数超过阈值时中止运算。默认0,表示没有限制。
预警阈值:勾选后,先获得记录数,判断后未超阈值再生成数据集;不勾选,直接生成数据集,在生成过程中超过阈值,中断,数据集被置空。
注:对于大数据集,阈值相关的设置是无效的。
10、点击【确定】按钮,回到数据集设置界面。如果字段名为英文时希望给数据字段设置中文标题,可点击【别名】按钮,按照字段顺序为每个字段设置中文标题,然后在制作报表时直接使用中文名即可。
11、如果不想使用缺省数据集名称,可以手动编辑数据集名称,还可以选择不同数据源,最后点击【确定】按钮,完成数据集定义。
集算器类型数据集是指数据集中的数据是从集算器文件中获取到的,集算器文件的运算结果可以通过return语句或者不写(不写时最后一个语句如果是赋值格,则会自动被返回)返回用作ReportLite的数据集。
集算器类型数据集界面如下:
SPL文件:通过SPL文件后面的按钮,选择集算器文件(文件后缀为.splx/.spl/.dfx)。
集算器文件路径可以是绝对路径和相对路径。相对路径是相对于【工具】à【选项】à【集算器选项】中配置的寻址路径,该属性对应于 raqsoftConfig.xml中的Esproc里的splPath路径。使用相对路径时,路径前不要加斜杠“/”。
缓存文件名对应的变量:缓存文件名对应的变量对应集算器文件中的缓存文件变量
数据管理方式:分为缓存和SPL自管理。
缓存—基于缓存文件取数
SPL自管理—通过自定义SPL取数。
参数:如果集算器文件中定义了参数,系统在参数列表中自动加载集算器文件中的参数名。参数列表中参数名对应集算文件里定义的参数名。参数值可以使用值,还可以使用报表参数,使用报表参数时可以对报表的参数通过表达式(这里使用报表的表达式语法)计算出结果传递给集算文件作为参数。
注意:
当数据集用于大报表,并且需在集算器数据集中自定义缓存文件时,需将缓存文件名对应的变量设置为集算器中的缓存文件变量。
● 举例:
集算器文件的内容如下:
1、在数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
2、选择“集算器”数据集类型,点击【确定】按钮,进入集算器数据集编辑界面,如下图所示:
3、点击SPL文件后面的按钮,选择集算器文件
系统在参数列表中自动加载集算器文件中的参数
4、点击【确定】按钮,生成数据集
关于集算器数据集的更多用法,可参考《教程》集算器数据集小节。
●注意:能够作为数据集类型被使用的集算器文件,如果用的是报表当前连接的数据源,程序有自动连接数据库机制,集算器文件中可以直接使用db.query()。如果用的不是报表当前连接的数据源,首先集算器文件中必须通过connect(”db”)函数建立数据连接,再进行查询,最后通过close()函数关闭该连接。
例如:下边的SPL使用的数据源与报表使用的数据源相同,则直接使用db.query()来进行查询:
可直接在脚本编辑区添加计算表达式,通过return语句或者不写(不写时最后一个语句如果是赋值格,则会自动被返回)将结果集返回到ReportLite数据集中,脚本编辑区的表达式语法需遵循集算器语法。
脚本数据集界面如下:
缓存文件名对应的变量:当数据集用于大报表时,用于设置缓存文件的文件名,方便在脚本中调用缓存文件。
注意:
当数据集用于大报表时,脚本必须返回游标。
● 举例:
1、在数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
2、选择“脚本数据集”数据集类型,点击【确定】按钮,进入脚本数据集编辑界面,如下图所示:
在脚本编辑区编写脚本,或粘贴写好的脚本(粘贴时,选中某单元格后点击粘贴按钮),如果脚本中需要传入参数,可在报表文件的参数列表中定义,其中参数名是脚本里定义的参数名。
3、点击【确定】按钮,生成数据集。
●注意:脚本数据集与集算器数据集相同,如果用的是报表当前连接的数据源,程序有自动连接数据库机制,可以直接使用db.query()。如果用的不是报表当前连接的数据源,首先必须通过connect(”db”)函数建立数据连接,再进行查询,最后通过close()函数关闭该连接。
文件数据集
文件数据集是指数据集的数据是从文件中获取到的,支持txt、xls、xlsx、csv、btx(集文件)、ctx(组表文件)六种类型文件。
使用btx(集文件)和ctx(组表文件)类型文件时,目前仅支持读取基表数据。
文件数据集界面如下:
文件:文件名,支持绝对路径或相对路径。使用相对路径时,路径前不需要加斜杠“/”。相对路径是相对于工具à选项à文件中的应用资源路径,该属性对应配置文件raqsoftConfig.xml中<Report>里home属性的路径。
工作表:当文件类型是Excel文件时,用于选择同一个Excel文件的不同Sheet工作表。
字符集:Text文件、CSV文件的字符集。字符集类型包括:GBK、UTF-8。
第一行是标题:文件中的第一行内容是否作为标题
预览时重新选择文件:数据集在浏览数据或者设计器进行预览时,可以在弹出的重新选择数据集文件对话框中重新选择数据集文件。
如果字符串外有引号则先剥离,包括标题部分: 是否删除字符串最外层的引号
分隔符:Text文件字段间的分隔符。分隔符类型包括:制表符( TAB )、逗号( , )、空格、竖线( | )、短横线( - )、下划线( _ )。
注意:CSV文件字段间的分隔符仅支持逗号。
起始行/结束行:当文件类型选择Excel文件后,页面中会出现起始行和结束行,用于对Excel文件的行数进行筛选。
使用文件数据集时,有时文件的数据量很大,为了避免将不需要的数据加载到内存,数据量过大造成内存溢出,可采用如下方法,以减小计算得到的数据集。
有用字段:选择文件,选取需要用到的字段。
聚合:对需要做统计的字段进行聚合运算。
过滤:对符合条件的记录进项筛选,过滤条件中不支持使用参数。过滤条件需满足布尔表达式,多个布尔表达式之间可使用逻辑运算符,如:&&,|| 。
分组:选择需要分组统计的字段。
注:“分组”需要与“聚合”一起使用,单独使用“分组”不起作用,得到的结果会与原始数据一样。
显示:生成的数据集中需要显示的字段。
● 举例:用orders.txt建立一个文件数据集。
1、在图1.4.2.2-1 所示的数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
2、选择“文件数据集”类型,点击【确定】按钮,进入文件数据集编辑界面,如下图所示:
3、点击按钮选择orders.txt;也可以输入orders.txt文件的路径,例如:【工具】à【选项】文件tab中的应用资源路径设为C:\raqsoft\reportlite\demo且orders.txt位于demo文件夹时,文件设置为orders.txt即可。
4、选择文件对应的【字符集】类型,默认是GBK。【第一行是标题】默认为勾选。选择字段间的【分隔符】,默认是制表符(TAB)。此时文件数据集编辑界面,如下图所示:
5、选出有用字段,设置聚合运算、过滤条件、分组字段,数据集显示字段。
选出有用字段,ORDERID、EMPLOYEEID、FREIGHT:
对FREIGHT做求和统计:
设置过滤条件:ORDERID < 10300
根据EMPLOYEEID分组:
选出生成数据集的字段:
点击“确定”按钮,一个文件数据集就创建好了。
内建数据集是指数据集的结构和数据都存入报表模板,运算报表的时候不需要从数据源取数了。可以使用户快速的体验建立报表的过程,用户只需在报表设计器中定义一个内建数据集,录入一些数据就可以在报表中使用了,这样给用户的体验过程带来了极大的方便。也可以用于报表的跟踪调试,当报表预览结果和您预想的结果不符合时,可以把数据集转为内建,然后把报表模板发给技术支持人员,方便支持人员跟踪调试。
内建数据类型数据集界面如下:
● 举例:创建一个包含Name和Age的内建数据集。
1、在图1.4.2.2-1 所示的数据集设置窗口中点击【增加】按钮,弹出数据集类型对话框。
2、选择“内建数据集”类型,点击【确定】按钮,弹出“内建数据集”窗口,在此窗口中我们可以定义内建数据集包含的字段和数据值。在“字段”标签页定义内建数据集包含的字段,点击右边的【增加】按钮,在左边的字段列表中就会增加一个字段的定义,可以修改字段名和字段的数据类型。假设我们定义Name和Age两个字段,如下图所示:
3、切换到“数据”标签页,点击右边的【增加】按钮,可以添加字段对应的数据值。如下图所示:
我们也可以把Excel文件中已有的数据复制粘贴到内建数据集中。首先复制Excel文件中的数据值,在内建数据集的“数据”标签页点击右边的【粘贴】按钮即可把Excel文件中的数据粘贴到内建数据集中。
4、点击【确定】按钮,一个内建数据集就建好了。
可以把一个外部数据集转为内建数据集也可以把内建数据集还原为外部数据集。
在图1.4.2.2-1 所示的数据集设置窗口中选中数据集列表中的一个数据集,点击右边的【转为内建】按钮,即可把外部数据集转为内建数据集。如下图所示:
从上图中我们看到ds1转为内建数据集后,右边的【转为内建】按钮变成了【还原】按钮。选中数据集列表中的ds1,点击【还原】按钮,ds1内建数据集就还原成了它最初的“SQL检索”数据集类型。如下图所示:
● 把内建数据集还原为外部数据集,要求内建数据集最初是由外部数据集转化而来的,不能是用户自己建的内建数据集,如果是用户自己建的内建数据集不能还原为外部数据集合。