数据集中的参数- 数据集管理-数据管理
目录

数据集中的参数

基本概念

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

参数和宏,是指被标记出来,从而可以通过传递不同的值动态替换的部分。例如下面的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}。

 

再例如:同一张订单报表,北京、上海城市的员工需要看各自的订单数据,但是北京城市的订单数据表名称为bj_orders,上海城市的订单数据表名称为sh_orders,SQL语句如下:

select * from ${city}_orders where ${orders}

其中第一个宏${city}用来动态传表名,第二个宏${orders}用来拼条件。如下图所示,使用宏city作为查询条件,当北京城市员工选择city的条件值为bj,便可查询出北京城市的订单数据;上海城市员工选择city的条件值为sh,便可查询出上海城市的订单数据。


 

 参数和宏的区别

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

数据集中参数的介绍

参数的作用

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

参数的内容

定义参数时,应定义参数的名称、参数的表达式、描述、参数类型、数据类型、默认值、是否在通用查询中显示、是否为数据集参数等内容。

数据集参数的说明

参数的类型

参数共有三种类型:
   (1)普通参数:参数值可由外部传入
   (2)动态参数:参数值通过一个表达式运算而来
   (3)会话变量:参数值会从会话(session)中获取对应名称的会话变量,在本产品中,可以获取用户ID、角色ID、机构ID的会话变量参数名分别为:sys_UserID、sys_Roles_ForDAUC、sys_Orgs_ForDAUC

对于数据集本身来说,数据集并不关心参数的类型,它只需要参数值。而由引擎根据不同的参数类型,以不同的方式拿到参数值,再传给数据集。

动态参数和会话变量的详细用法,请见下文中“参数的值”部分。

参数的名称

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

数据集参数的名称可以随意定义没有限制;非数据集参数的名称必须与使用该参数的动态宏或动态参数表达式中所使用的名称保持一致,否则无法找到;会话变量参数的名称必须与系统的session会话中的名称保持一致,否则无法获取当前用户的信息。

另外也可以在“描述”列设置参数别名,来对报表中用到的参数名称进行统一显示设置。详细用法请见下文中的“描述”部分。

参数的数据类型

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

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

参数的默认值

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

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

对于会话变量,默认值为空即可,只要会话变量的名称与系统session中的变量名称相同,即可获取到参数值。

数据集参数的设置

添加参数

在SQL检索数据集中,设置检索条件时,可以进行参数的设置。

勾选sql检索中参数“允许为空”,可实现参数默认值为空时查询所有数据,参数默认值不为空时查询相应数据。

设置好数据集参数后,可以在检索条件中的【条件值或参数】处选择使用参数来向检索条件传递条件值,设置后将以【@参数名】的形式显示在条件值输入框中。


 

用户也可以选择先直接在条件值输入框中手写【@参数名】的方式来添加一个参数,添加后点击参数设置时,将自动被系统获取然后进一步设置改参数的类型、默认值等属性。

在复杂SQL数据集中,参数以“?XXX”的形式在SQL语句中进行书写来添加。例如:

一个查询需求为:从T表中查询a、b字段,并以xxx、yyy、zzz字段作为过滤条件(其中xxx固定取10,yyy和zzz接受外部传入的值)。

这种情况下就可以使用数据集参数,具体做法为将数据集的SQL语句定义为:

SELECT a,b FROM T WHERE xxx=10 AND yyy=?y AND zzz=?z

然后可以在参数页面进行参数的具体属性设置,进而实现数据集可分别接受y和z对应的参数值实现过滤。

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


 

是否在通用查询中显示

设置参数时可选择是否在通用查询中显示,勾选代表将在通用查询面板中显示该参数,用户可将该参数设置为查询条件,接收用户输入的条件值作为参数值。

例如下图所示,对参数勾选了在通用查询面板中显示后,即可在通用查询面板中的参数与宏条件组下选择参数作为查询条件:


 

会话变量和动态参数不允许显示在通用查询面板中,因此是否在通用查询中显示的复选框会灰色不可用状态。

通用查询中的使用,详见通用查询中使用参数和宏

参数描述

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

例如:数据集中设置参数emID的描述为“雇员ID”:


 

通用查询面板中,字段列显示参数的名称,别名列显示参数的描述内容:


 

 

非数据集参数说明

非数据集参数指的是复杂sql数据集中,并未在数据集的sql语句中以?XXX形式定义的参数,而是在动态参数或动态宏的表达式中使用的参数,作用是让使动态参数或动态宏的值计算更加灵活。

非数据集参数示例

示例1:希望实现通过参数传入不同的值给动态宏来控制查询的条件

1.书写sql如下:

select * from demo_orders where ${orders} and ${tiaojian}

2.设置tiaojian为条件宏


 

3.设置orders为动态宏,并且宏表达式为:if(@arg1=="1","订单ID='"+ @arg2+"'",  "货主地区='"+ @arg2+"'")

上面在orders宏表达式中以@标识的就是非数据集参数,即arg1和arg2两个非数据集参数,系统将自动解析得到这两个非数据参数显示在宏表达式的下方,用户可以进一步设置这两个非数据集参数的类型、默认值等属性。


 

4.数据预览:


 

示例2:希望使用复杂SQL制作一张订单的发货情况查询表,输入某个日期便可查询出该日期所在的那一周的发货情况

1.书写sql如下:

select * from demo_orders where ${tycx} and 订购日期>?begin and 订购日期<?end

2.设置条件宏tycx:


 

3.系统自动获取到sql语句中的两个begin和end参数,这两个参数是属于数据集参数,可将其设置为动态参数类型,并设置参数值的计算表达式,在表达式中以符号@使用了非数据集参数arg1,如下图:


 

4.下方的非数据集参数列表中,自动解析得到了动态参数中的arg1,可以为arg1设置参数类型、数据类型、默认值,如下图:


 

5.数据预览效果如下: