基本概念

在数据集中可以使用参数和宏。

参数和宏,是指被标记出来,从而可以通过传递不同的值动态替换的部分。例如下面的SQL语句中:

SELECT a,b FROM T WHERE x=10 AND y=?XXX

其中的?XXX就标识为使用了一个参数XXX,可以通过传递不同的参数值来对数据进行不同的查询过滤。比如当向参数XXX传入值100时,最终实际执行的SQL语句即为:

SELECT a,b FROM T WHERE x=10 AND y=100

宏是一个字符串,可以包含更复杂的内容。

例如:同一张订单表,有时需要从雇员的角度去看(看某雇员的全部订单),有时则需要从时间角度去看(查看某一年的全部订单)。这时就需要动态的变更查询条件。

select * from demo_orders where ${demo_orders}

其中的${demo_orders}就标识为使用了一个宏。

当需要从雇员A的角度去看该雇员的全部订单时,使用demo_orders.雇员ID=A来替换${demo_orders};

当需要从时间角度去查看2009年的全部订单时,使用demo_orders.date>=1998-01-01 and demo_orders.date>=1998-12-30 来替换${demo_orders}。

参数和宏的区别

  • 参数是一个值,并且具有数据类型;宏是一个字符串。
  • 对于SQL数据集,参数只能用于SQL的where子句中的条件值,而宏可以用于SQL的任何位置。

参数的作用

参数的作用是能够进行值的接收和传递,例如为向SQL语句中传入条件值,或向存储过程传入参数值。

参数的内容

定义参数时,应定义参数的名称、参数描述、数据类型、参数类型、默认值等内容。特别地,复杂SQL数据集中,还需要设置参数表达式。

参数名

参数的名称是唯一区别各个参数的依据。

参数的名称可以随意定义没有限制;其中会话变量参数的名称必须与系统的session会话中的名称保持一致,否则无法获取当前用户的信息。

另外也可以在“描述”列设置参数别名,来对报表中用到的参数名称进行统一显示设置。

参数描述

描述的作用是对参数名的意义或作用进行一些补充说明,没有实际意义。但是当参数显示在通用查询面板中时,描述列将作为参数别名列显示,在查询面板中会作为查询条件的名称显示。

例如:数据集中设置参数area的描述为“地区”: 基本概念 - 图1 通用查询面板中,字段列显示参数的名称,别名列显示参数的描述内容: 基本概念 - 图2

数据类型

参数可以设置所接收参数值的数据类型。需要注意的是:系统会根据所设置的数据类型,对输入的内容进行强制转换。

例如:sql类型数据集中如果设置了一个参数area,其数据类型为字符串,当预览该数据集时,拼入sql的参数值会加上单引号以保证在sql的正确查询。

参数类型

参数共有三种类型: (1)普通参数:参数值由参数表达式计算得到,默认为参数本身,即@参数名。 (2)动态参数:参数值通过参数表达式运算而来。与普通参数的区别为动态参数无法在通用查询中使用。 (3)会话变量:参数值会从会话(session)中获取对应名称的会话变量,在本产品中,可以获取用户ID、角色ID、机构ID的会话变量参数名分别为:sys_UserID、sys_Roles_ForDAUC、sys_Orgs_ForDAUC

参数默认值

对于普通参数,这个值将作为默认值,若外部未传入该参数,则以默认值进行后面的动作。未设置时认为是空值,默认值将传入null。

对于动态参数,这里应该设置动态参数的表达式。未设置时认为是空表达式,其运算结果将为null。设置了表达式则将进行计算得到的结果传入。

对于会话变量,默认值会自动填写。

特别地,复杂SQL数据集中的默认值只为数据集中预览数据使用;实际计算报表时,传入sql的参数是用参数表达式中计算得到的值。

参数表达式

仅复杂SQL数据集中需要设置,默认为参数本身,即@参数名。复杂SQL数据集中,传入SQL的参数值为参数表达式计算后的值。

需要注意,若使用复杂SQL数据集中的普通参数设置通用查询,最终传入SQL的参数值为参数表达式计算得到的值,可能会和报表接收到的参数值不一致。若参数表达式为默认的@参数名,那么报表接收的参数值与传入SQL的参数值才是一致的。

SQL检索数据集中设置参数

在SQL检索数据集中,【检索条件设置】tab页中可以进行参数设置,如下图所示: 基本概念 - 图3

设置好数据集参数后,使用该参数对数据集字段进行数据过滤。即在检索条件中的【条件值或参数】处选择使用参数来向检索条件传递条件值,设置后将以【@参数名】的形式显示在条件值输入框中,如下图: 基本概念 - 图4

复杂SQL数据集设置参数

在复杂SQL数据集中,参数以“?XXX”的形式在SQL语句中进行书写来添加。在SQL编辑器中输入SQL之后,切换至参数tab页,会自动获取SQL中设置的参数,然后进行参数的具体属性设置。

设置参数属性时,需注意此处默认值只为数据集中预览数据使用,预览时直接将默认值拼接在SQL中,不去计算参数表达式中的值;实际计算报表时,传入sql的参数是用参数表达式中计算得到的值。

普通带参数的复杂数据集

1.在"复杂sql"tab页中输入sql语句: select * from demo_orders where 货主地区=?area 基本概念 - 图5

2.切换到参数tab页,系统自动获取到参数area。

数据类型、参数类型、参数表达式默认设置即可,即数据类型“字符串”、参数类型“普通参数”、参数表达式为“@area”;设置默认值为“华北”,供数据预览使用。 基本概念 - 图6

3.预览数据

模糊查询复杂数据集

1.在"复杂sql"tab页中输入sql语句: select * from demo_orders where 货主地区 like ?area

2.切换到参数tab页,设置参数类型为普通参数,默认值设置为%东%,参数表达式按照模糊查询的规则写即可,具体如图所示: 基本概念 - 图7

此处默认值只为数据集中预览数据使用,预览时直接将默认值拼接在SQL中,不去计算参数表达式中的值,如此例中,数据预览时后台SQL为“select * from demo_orders where 货主地区 like %东%”;实际计算报表时,传入sql的参数是用参数表达式中计算得到的值。

3.预览数据。 基本概念 - 图8

多条件值全部查询复杂数据集

1.在"复杂sql"tab页中输入sql语句: select * from demo_orders where 货主地区 in (?area1) or ?area2 is null

2.切换到参数tab页,area1设置数据类型为字符串组,area2设置参数表达式为str(@area1),具体如图所示: 基本概念 - 图9

3.预览数据

输入默认值,预览数据。 基本概念 - 图10 基本概念 - 图11

其他类型数据集中设置参数

对于存储过程、自定义等其它类型的数据集,可以直接在数据集定义界面中通过增加按钮来添加数据集参数。例如下图所示的自定义类型数据集: 基本概念 - 图12