参数- 参数与宏-Web报表设计器
目录

参数

参数概述

在设计一张报表时,很少有里面的数据是固定不变的,常常需要根据一些条件来过滤出我们想要的数据,此时就需要通过参数的形式控制报表中的数据。

例如希望制作一张“日订单统计报表”,当希望生成一张“日订单统计报表”时,需要向报表传递日期参数,报表根据接收到的日期参数,生成该日的“日订单统计报表”。 参数可以在数据集和表达式中被引用。

数据集中使用参数

如下图所示,在sql语法里,设置问号的地方就是使用了参数。数据集中不用考虑参数的数据类型,系统会根据报表参数的设置进行自动转换。

在数据集定义的参数设置tab页中,设置了对应的参数,可使用该参数对数据集字段进行数据过滤,如下图所示:

注意:如果sql语句是执行存储过程,而且结果集是通过输出参数来输出的,那么输出参数也用问号表示,和该问号相关的参数写成“@result”

数据集参数

报表中所使用的参数有“报表参数”和“数据集参数”之分,报表参数与数据集参数通过“参数表达式”相联系。

数据集参数是指与sql的位置对应的参数,参数类型与报表参数的分类方式和运算规则相同,普通参数直接传值、动态参数按值表达式进行运算。

使用时具有如下规则:

需要注意的是:

数据集参数的更多使用,参见 【数据集管理-参数设置】

报表参数

是指报表运算时需要传值、或动态按表达式进行运算的参数,需要能够与报表使用的数据集形成合理的对应关系,完成数据集的运算。

使用时具有如下规则:

参数表达式

是指数据集参数与报表参数的对应关系,因为数据集参数是通过报表参数作为入口的。

使用时具有如下规则:

query/query2/call/call2函数中使用参数

sql语句中使用问号,然后在sql语句后面用逗号分隔,跟上参数或含参数的表达式,有几个问号就跟几个。

如果sql语句是执行存储过程,而且结果集是通过输出参数来输出的,那么输出参数也用问号表示,和该问号相关的参数写成“@@result“。

举例:

1、query2("exercise","SELECT max(amount) FROM contract WHERE contract.signdate >? and contract.signdate <?", starttime, endtime)

2、 call("{call ResultSet (?,?,?)}","@@result","000001",a2)

3、 call2("demo","{call ResultSet (?,?,?)}","@@result","000001",A2)

表达式中使用参数

直接在表达式中引用参数名,把参数作为变量来使用,如果参数名和字段名或其他名称相重复,那么在参数名前加@符号,如 @参数名

举例:="从 "+str(@starttime)+" 到 "+str(@endtime)

参数定义

点击 报表属性-参数定义,可进入参数编辑界面。

在【参数定义】中,数据集参数一栏中的参数为自动获取报表引用的数据集中已定义好的参数,故名称、类型、默认值等都不允许修改,但参数表达式是与报表参数形成合理对应关系的枢纽,允许编辑和修改。

可为报表添加多个报表参数,设置报表参数的名称、描述、数据类型、精度、小数、允许空值、格式、值表达式、参数类型、编辑风格等属性;在参数列表中选择一个报表参数,还可以通过相应按钮进行参数的删除、上移/下移、复制、粘贴。参数计算的顺序为从上到下,所以后面的参数可以引用前面参数的值,而前面参数的值不能引用其后面的参数。

在报表中添加参数,都是报表参数。可以勾选“通用查询”列的复选框,将其设置为通用查询条件,实现报表展现页面上的数据查询。具体用法参见:通用查询

参数编辑界面如下图所示:

参数名

名称可以使用默认的,也可以根据需要自己编辑,数据集和表达式中引用参数时,用的就是它的名称。比如:starttime

参数描述

描述可以使用默认的,也可以根据需要自己编辑,主要用来标识该参数的含义。比如:起始时间。

数据类型

参数是一个变量,因此有数据类型属性,支持常用的数据类型。

其中数组类型参数,可用于一次性传入一组参数。数组类型的参数应用非常广泛,可以在sql中使用,也可以在单元格中使用,也可以灵活运用于报表的不规则分组、扩展等。数组型参数录入时,多个值之间用英文逗号分隔,例如:1,2,3,4等。

获取数组型参数的元素个数:count(argName),其中argName是个数组参数;获取数组型参数中第二个元素:argName[2]。

数组型参数由于是个数组集合,因此可以象集合表达式一样直接写入单元格进行扩展。

有的报表分组时,对于分为几组,分为哪几组是不确定的,这个时候将参数类型设置为相应的数组类型,就可以通过每次输入的参数值来动态控制分组。

举例:定义参数arg_1,参数类型为字符串组,在某一单元格中编辑=@arg_1,并将该单元格设置为横向扩展。

如果参数赋值为高中,专科,本科,硕士, 则该单元格横向扩展为如果参数赋值为小学,初中,高中,则该单元格横向扩展为

在这可以设置该参数的缺省值,也可以不设置。

报表参数的引用方法如下:“=@参数名”

在单元格中输入:=@arg3


 

参数类型

参数的类型有普通参数、动态参数和会话变量。

普通参数直接将输入的参数值传给报表进行运算。如果输入的参数值不做任何变化直接传给报表进行计算,我们就可以定义参数类型为普通参数。

动态参数是一个表达式(不用等号开头),报表运算时先解析该表达式,然后将表达式计算出的结果作为参数值传给报表进行运算,用动态参数的时候要注意参数的数据类型。动态参数适用于需要动态解析表达式的场合。

会话变量是指能够从web服务器的session会话中读取信息的参数变量,比如用户名、岗位、部门、职位、角色等等。通过会话变量的使用,就可以在报表中识别用户的身份,进而控制用户的报表权限。例如用户在登录系统时,系统会设置该用户的会话变量,通过在报表中接收会话变量并生成一些特定的过滤条件,把这些过滤条件使用到报表的数据集或者表达式中,过滤掉这个用户不该看到的数据。

系统中提供了以下会话变量供用户使用:

1.用户ID: sys_UserID

2.机构ID: sys_Orgs_ForDAUC

3.角色ID: sys_Roles_ForDAUC