目录

数据集中的宏

宏具有比参数更灵活的功能。目前只有复杂SQL数据集可以设置宏。

使用宏时,在SQL语句的任意位置写上宏的标记“${宏名称}”即设置了一个宏。当在SQL中写好宏后,切换到复杂SQL数据集的宏配置tab页时,系统可以自动获取到sql中的宏,以进行更进一步的详细配置。

目前根据实现的功能不同,将复杂SQL数据集中的宏分为条件宏、普通宏、动态宏,下面详细介绍。

条件宏的作用

条件宏出现在SQL语句的条件子句的位置。通过配置条件宏对应的数据表和字段,在针对该数据集使用通用查询时,可通过条件宏生成一组查询条件(一个查询模块),并根据用户填写的条件值,生成一个条件子句,替代SQL语句中的条件宏。

在一个SQL语句中,“WHERE”关键字后面的子句为条件子句,where后面可以根据需要设置多个条件宏。

在条件子句固定的情况下,可以使用参数动态的改变条件值;而当条件子句需要动态变化时,则可以通过配置条件宏来动态的变更条件。

例如:

SQL语句中的条件宏:select * from demo_orders where ${orders}

定义和替换条件子句后:select * from demo_orders where demo_orders.货主地区=华北

注意:

1.使用当前复杂SQL数据集制作的报表中需要设置通用查询时,必须为复杂SQL数据集定义条件宏。

2.定义条件宏时,勾选数据表的哪些字段,在通用查询中便可以使用哪些字段设置为查询条件。

3.复杂数据集sql语句中使用表别名时,在条件宏设置中表别名要和sql中的表别名一致。

4.复杂数据集sql语句未使用表别名时,在条件宏可以不设置表别名如果要设置的话只能是真实表名不能随便定义表别名。

5.一个条件宏可以定义为多个数据表、多个字段。

6.条件宏不会显示在通用查询面板中,不可作为查询条件使用。

条件宏的设置

由于复杂SQL数据集中的SQL语句变化多样,不遵循特定规则,并不能自动解析出条件宏中可以或不可以使用哪些表和字段作为条件。因此为了在通用查询中可以生成相应的条件,需要进行条件宏的条件配置,具体是设定在通用查询中该条件宏对应可用的数据表和字段。

在复杂SQL数据集中,需要为每个条件宏设置其可用的表和字段,以供通用查询使用。

 

示例

例如:复杂SQL数据集输入的SQL语句如下,其中定义了条件宏${orders}:

select * from demo_orders where ${orders}

在宏配置tab页下进行设置宏类型维条件宏,并进一步该条件宏中的数据表与字段:

当使用该复杂SQL数据集制作报表时,如果需要通过通用查询设置查询条件,则通用查询中可以从条件宏设置的表字段中选择字段设置为条件,例如设置:发货地区=华北,通用查询界面中可设置如下:

经过上面通用查询的设置后,可产生条件宏orders的值:

demo_orders.发货地区=华北

最终在报表展现时,复杂SQL数据集中的条件宏orders将进行SQL语句中的宏值替换,形成如下SQL:

select * from demo_orders where demo_orders.发货地区=华北

 

普通宏的作用

普通宏,可以放在sql的任意位置。

例如:

 

普通宏的设置

例如:复杂SQL数据集输入的SQL语句如下,其中定义了宏${diqu}:

select * from demo_orders_${diqu}

切换到宏配置tab页后,系统自动获取到diqu宏,手动进行宏的类型为普通宏,并进行默认值设置:

 

通用查询应用普通宏

复杂SQL数据集中定义的普通宏可以设置是否在通用查询面板中显示,当设置为显示时还可以进一步设置编辑风格。设置好后,在使用该复杂SQL数据集制作报表时,即可使用通用查询面板将普通宏设置为查询条件使用。

勾选“通用查询面板中显示”,该普通宏将会显示在通用查询面板中作为一条查询条件使用,并且所设置的编辑风格直接反显。

不勾选““通用查询面板中显示”,该普通宏则不能在通用查询面板中使用显示。

动态宏的作用

动态宏和普通/条件宏的主要区别在于普通/条件宏是直接将宏值传到报表中计算,动态宏是把传进来的宏值当成表达式进行计算,然后再把计算得到值做为宏值传到报表中。

动态宏的设置

例如:复杂SQL数据集输入的SQL语句如下,其中定义了两个宏${userID} 和 ${tuser}:

SELECT * FROM  t_user where ${userID} and ${tuser}

切换到宏配置tab页后,系统自动获取到userID和tuser宏,手动设置userID为条件宏,tuser宏为动态宏。

定义tuser宏的表达式为:

if(@sys_UserID=="root","1=1","user_id='"+@sys_UserID+"'")

编辑完成并【确定】,界面下方可自动获取到tuser宏表达式中以@标识的参数名称,用户可设置参数的类型、表达式、数据类型、默认值等。

动态宏中使用的参数一般为非数据集参数,使用时参数必须以@符号开头进行标识。

参数和宏的数据类型

在直接编写SQL的时候,对于不同数据类型的,需要有不同的写法。
    例如,在表T1中,字段a为数值类型,字段b为字符串类型,则以字段a和b进行过滤时,SQL应该写为:

SELECT * FROM T1 WHERE a=数值型条件值 AND b='字符串型条件值'

此外,对于一些特定的数据类型,不同数据库会有不同的写法。
    例如,在表T2中,字段c的数据类型为日期,则以字段c进行过滤时,不同数据库应该有不同的写法:

 MySQL: SELECT * FROM T2 WHERE c='日期型字符串条件值'
 Oracle: SELECT * FROM T2 WHERE c=TO_DATE('日期型字符串条件值', 'YYYY-MM-DD')

然后在复杂SQL数据集中,编写带参数的SQL语句时,就不需要考虑字段的类型了,因为底层会负责做相应的翻译,而SQL的写法变为:

 SELECT * FROM T1 WHERE a=? AND b=?
SELECT * FROM T2 WHERE c=?

与参数相比较,宏没有数据类型上的差异,宏只能是字符串。