参数
参数概述
在设计一张报表时,很少有里面的数据是固定不变的,常常需要根据一些条件来过滤出我们想要的数据,此时就需要通过参数的形式控制报表中的数据。
例如希望制作一张“日订单统计报表”,当希望生成一张“日订单统计报表”时,需要向报表传递日期参数,报表根据接收到的日期参数,生成该日的“日订单统计报表”。 参数可以在数据集和表达式中被引用。
数据集中使用参数
如下图所示,在sql语法里,设置问号的地方就是使用了参数。数据集中不用考虑参数的数据类型,系统会根据报表参数的设置进行自动转换。
在数据集定义的参数设置tab页中,设置了对应的参数,可使用该参数对数据集字段进行数据过滤,如下图所示:
注意:如果sql语句是执行存储过程,而且结果集是通过输出参数来输出的,那么输出参数也用问号表示,和该问号相关的参数写成“@result”
数据集参数
报表中所使用的参数有“报表参数”和“数据集参数”之分,报表参数与数据集参数通过“参数表达式”相联系。
数据集参数是指与sql的位置对应的参数,参数类型与报表参数的分类方式和运算规则相同,普通参数直接传值、动态参数按值表达式进行运算。
使用时具有如下规则:
-
报表为来自V4桌面设计器,而且报表中的数据集参数无参数名,则需按?的先后顺序一一对应(或者说序号列相当于参数名)。系统则自动赋予对应的参数名autonamearg1、autonamearg2、autonamearg3等。
-
V5中数据集参数以?后的参数名进行对应,顺序可不对应,序号列无实际意义,但个数仍必须和问号数保持相同。
-
报表中引用的数据集显示到【参数定义】-【数据集参数】一栏时,同一个数据集的相同的参数只显示一个,不同数据集的相同参数不做处理。
-
在【参数定义】中,数据集参数一栏中的参数为自动获取数据集中定义的参数,故名称、类型、默认值等都不允许修改,但参数表达式是与报表参数形成合理对应关系的枢纽,允许编辑和修改。
-
【参数定义】中,数据集参数一栏中的普通参数在报表预览时并不能为参数传值,需要通过【添加】按钮,添加一个用来为此数据集参数传值的报表参数,方可正确预览报表。添加之后的参数,不允许重复添加。如下图所示:
需要注意的是:
-
当数据集参数的参数表达式不为空,且不与参数名相同时,不能【添加】到报表参数;
-
会话变量和动态参数也不能【添加】报表参数。
数据集参数的更多使用,参见 【数据集管理-参数设置】
报表参数
是指报表运算时需要传值、或动态按表达式进行运算的参数,需要能够与报表使用的数据集形成合理的对应关系,完成数据集的运算。
使用时具有如下规则:
-
当报表来自v4桌面设计器制作的报表时,v4报表中的报表参数可直接反显。
-
V5中多个数据集的报表参数存在同名时,系统会进行校验,当多个同名参数的类型、数据类型均相同时,视作具有相同业务含义的参数,仅显示一个;当参数类型、数据类型至少有一个不同时,系统不允许引入后面的数据集,并给予友好提示。
-
报表引用含有动态宏数据集时数据集宏会自动添加为报表宏,报表宏表达式里的参数就必须存在于报表参数中。
-
只有报表参数可显示在通用查询面板,当【参数定义】中的报表参数设置允许显示在通用查询面板时,可将该参数作为一个查询条件使用,否则不显示。
参数表达式
是指数据集参数与报表参数的对应关系,因为数据集参数是通过报表参数作为入口的。
使用时具有如下规则:
-
参数表达式是属于报表的,不是数据集的,即不同的报表使用同一个数据集时参数表达式也可以是不同的。
- 数据集定义中的参数表达式对数据集本身意义不大,是方便增加成报表参数时自动带过去的默认值,可在报表参数定义界面进行修改,并且参数表达式的保存也是属于报表的,该修改对数据集定义没有影响。
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