参数
参数
本菜单项的功能是用于定义在报表中用到的参数。
在我们设计一张报表的时候,很少有里面的数据是固定不变的,常常需要根据一些条件来过滤出我们想要的数据。这就需要通过参数的形式控制报表中的数据。例如日报表,当我们希望生成一张日报表时,首先需要向报表传递日期参数,然后报表才会根据我们传递进去的日期参数,生成该日的日报表。 参数可以在数据集和表达式中被引用。
-
sql语句中使用参数
如上图所示,在sql语法里,需要用到参数的地方写上问号,不用考虑参数的数据类型,程序中会自动转换。然后在参数tab页中按照问号顺序,写入参数名或含参数的表达式,如下图所示:
如果sql语句是执行存储过程,而且结果集是通过输出参数来输出的,那么输出参数也用问号表示,和该问号相关的参数写成“@@result”
-
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、 call("demo","{call ResultSet (?,?,?)}","@@result","000001",a2)
-
表达式中使用参数
直接在表达式中引用参数名,把参数作为变量来使用,如果参数名和字段名或其他名称相重复,那么在参数名前加@符号,如 @参数名
举例:="从 "+str(@starttime)+" 到 "+str(@endtime)
点击 配置-参数 ,可打开参数编辑界面,如下图所示:
点击【增加】按钮,可添加一个参数定义,你可以编辑参数的名称、描述、数据类型、精度、小数、允许空值、格式、值表达式、参数类型、编辑风格等属性;在参数列表中选择一个参数,点击【删除】按钮,可删除该参数;通过点击【上移】/【下移】按钮,可调整参数列表中参数的位置。编辑完点击【确定】按钮即可。通过点击【复制】按钮,可复制选中的参数,按住ctrl键,可复制多个参数;通过点击【粘贴】按钮,可将复制的参数添加到参数配置界面。
-
名称
名称可以使用默认的,也可以根据需要自己编辑,数据集和表达式中引用参数时,用的就是它的名称。比如:starttime
-
描述
描述可以使用默认的,也可以根据需要自己编辑,主要用来标识该参数的含义。比如:起始时间。
-
数据类型
参数是一个变量,因此有数据类型。支持的数据类型有:整数,长整数,短整数,大整数,浮点数,双精度数,数值,实数,字符串,日期,时间,日期时间,布尔值,长整数组,短整数组,大整数组,浮点数组,双精度数组,数值组,日期组,时间组,日期时间组,字符串组,自动。参数的默认数据类型是字符串。
其中长整数组,短整数组,大整数组,浮点数组,双精度数组,数值组,日期组,时间组,日期时间组,字符串组属于数组类型,可用于一次性传入一组参数。数组类型的参数应用非常广泛,可以在sql中使用,也可以在单元格中使用,也可以灵活运用于报表的不规则分组、扩展等。数组型参数录入时,多个值之间用英文逗号分隔,例如:1,2,3,4等。
获得数组型参数的元素个数:count(argName),其中argName是个数组参数。
获得数组型参数中第二个元素:argName[2]。
数组型参数由于是个数组集合,因此可以象集合表达式一样直接写入单元格进行扩展。
有的报表分组时,对于分为几组,分为哪几组是不确定的,这个时候将参数类型设置为相应的数组类型,就可以通过每次输入的参数值来动态控制分组。
-
举例:定义参数arg_1,参数类型为字符串组,在某一单元格中编辑=arg_1,并将该单元格设置为横向扩展。 如果参数赋值为高中,专科,本科,硕士, 则该单元格横向扩展为; 如果参数赋值为小学,初中,高中,则该单元格横向扩展为 。
-
-
值
在这可以设置该参数的缺省值,也可以不设置。
-
编辑风格
如果报表中包含语义层,在定义参数时会读取语义层里定义好的编辑风格。语义层中的编辑风格是一种编辑风格和显示格式的预置,类似于Word中“样式”的预置,语义层中定义的参数可以绑定一个编辑风格,在该参数被使用时,编辑风格和显示格式会自动套用在参数上,而不用用户手动设置。
在语义层设计器中,选择“编辑风格”,右侧区域中可以看到该语义层文件包含的编辑风格。点击工具栏中的“追加”按钮可以新增一个编辑风格。
在类型下拉选项中选择所需要的类型后,双击配置栏,即可弹出相应类型的配置框。双击显示格式栏,即可弹出格式编辑框设置显示格式。
假如我们这里增加密码、下拉日历和下拉框编辑风格,如下图所示
-
举例一:定义一个密码风格的参数:password
预览效果如下:
-
举例二:定义一个下拉日历风格的参数:birthday
预览效果如下:
-
举例三:定义一个下拉列表风格的参数:sex
预览效果如下:
注意 在子报表、sql语句、存储过程等等中用到的参数,都必须首先在这里定义。
-
参数的类型有普通参数、动态参数和会话变量。
-
普通参数
普通参数直接将输入的参数值传给报表进行运算。如果输入的参数值不做任何变化直接传给报表进行计算,我们就可以定义参数类型为普通参数。
-
动态参数
动态参数是一个表达式(不用等号开头),报表运算时先解析该表达式,然后将表达式计算出的结果作为参数值传给报表进行运算,用动态参数的时候要注意参数的数据类型。动态参数适用于需要动态解析表达式的场合。
-
举例:体会普通参数和动态参数的区别
通过下面的例子看两者的区别,首先定义参数,如下图所示:
三个参数的参数类型和数据类型不同,请注意看一下,设计的报表如下图所示:
为便于查看其中的区别,三个单元格的背景色做了不同的设置,预览效果如下图:
通过这张表可以看出普通参数与动态参数、动态参数之间数据类型不同时的区别。
-
-
会话变量
会话变量是指和用户个人信息相关的一些变量,比如用户名、岗位、部门、职位、角色等等,有了会话变量,就可以识别这个人的身份,知道这个人拥有哪些权限。用户在登录报表设计系统时,系统会读取该用户的会话变量,并且传递给语义层,当用户基于语义层设计报表时,系统会利用会话变量生成一些过滤条件,并把这些过滤条件强制叠加到报表中,这些过滤条件可以过滤掉这个用户不该看到的数据。于是,多个不同的用户基于同一个语义视图设计报表,却能够保证不同的人看到不同的数据。会话变量主要应用于语义层的权限控制。
会话变量的值不要求用户自己输入
如下所示定义了三个参数,name和password都是普通类型的参数,SessionPro是会话变量类型的参数。
运行时只要求输入name和password的值,不要求输入SessionPro的值。如下图所示:
-
举例:由会话变量控制用户的权限
假如定义了一个会话变量SessionPro,用于用户远程登录到报表设计器时的权限控制。
如果王伟是销售员,他输入正确的用户名和密码登录到远程设计器后,系统会自动的从seesion里面获取王伟的身份标识信息,然后把标识信息赋给会话变量SessionPro,当王伟打开销售报表时,他只能看自己的销售记录,系统利用会话变量生成一些过滤条件,并把这些过滤条件强制叠加到报表中,这些过滤条件可以过滤掉其他销售员的销售记录,只留下王伟的销售记录,从而达到权限控制的目的。
王伟看到的销售报表如下:
如果王伟是销售经理,那么他可以查看所有销售员的销售记录,他输入正确的用户名和密码登录到远程设计器后,系统会自动的从seesion里面获取王伟的销售经理身份标识信息,然后把标识信息赋给会话变量SessionPro,当王伟打开销售报表时,系统读取会话变量的值,看到是销售经理那么就不再叠加强制的过滤条件到报表中,这时王伟可以看到所有销售员的销售记录。
销售经理看到的销售报表如下:
-