报表数据集参数表达式的应用

     润乾报表数据集类型为SQL检索,存储过程,复杂SQL时,数据集可以接收报表参数,并将其传递给sql或存储过程,该功能使得生成数据集的sql根据参数不同动态变化。参数表达式功能进一步增加了应用的灵活性,在接收到参数还未传递到sql前,利用参数表达式,对参数进行预处理或者再加工,增加了生成数据集的灵活性和可控性。

 

  下面列举出参数表达式的几个典型应用。

1. 模糊查询
参数表达式支持表达式拼接,利用该特性将参数拼接成含有通配符的字符串。
关于sql中通配符的介绍:
_    与任意单字符匹配
%    与包含一个或多个字符的字符串匹配
[ ]  与特定范围(例如,[a-f])或特定集(例如,[abcdef])中的任意单字符匹配。
[^]  与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。
举例:
取产品表中产品名称中含有输入参数(productid)的记录
参数:productid 字符串
数据集sql:
SELECT *  FROM 产品 WHERE  产品.产品名称  like ?
参数表达式:
'%'+@productName+'%'
 
 
2. 类型转换
如果数据库字段的数据类型和报表参数的数据类型不一致,在参数表达式中利用润乾函数可以轻松完成数据类型的转换,把和数据库类型一致的参数值传递给sql。
润乾提供了多种类型转换函数如date(),dateTime(),float(),int(),str()等。
举例:
查询雇员生日大于指定输入日期的雇员记录,数据库中出生日期为日期型,报表参数birhday类型为字符串型。
参数:birthday 字符串
数据集sql:
SELECT *  FROM 雇员 WHERE  雇员.出生日期 >?
参数表达式:
date(@birthday)
 
 
3. 多值匹配
根据用户输入的多个条件完成多值的匹配查询,需要和sql中的in关键字配合使用。一般要完成多值匹配,参数表单页面会提供多选功能(可参数表单的多选功能实现)。
举例:
筛选出类别id在指定的多个类别id中的产品记录,如果未指定类别id返回所有的产品记录。
参数:category 字符串组
数据集sql:
 SELECT * FROM 产品 WHERE  产品.类别ID in (?) or ? is null
数表达式:
@category
str(@category) 
 

注意,上面利用类型转换函数将第二个传递的参数转为字符串,如没有以上转换在用户输入多个类别id查询时,执行sql会报错。控制台打印如下sql
SELECT * FROM 产品 WHERE  产品.类别ID in (?,?,?,?) or ?,?,?,? is null
这说明sql执行时会根据字符串组category的成员个数把每个成员对应成一个?,所以需要把sql语句中第二个?对应的参数转换成字符串,无论category有几个成员,str(@category)都只会返回一个字符串,这样才能完成参数个数的匹配。

4. 子查询
当数据集的sql涉及到多表关联和复杂的逻辑往往会使得数据集sql变得非常冗长并且难懂,借助参数表达式可将一部分查询逻辑封装在参数中,使得数据集sql变得简化易于理解。如将子查询定义在参数表达式中,在sql语句中只出现对主表的查询,简化了sql,逻辑上更清晰。
举例:
查询订单表中含有指定产品id(多个)的订单记录。查询涉及订单及订单明细表,产品id为订单明细字段,通过子查询查询订单明细表,筛选出符合条件的订单ID。
参数:productid 字符串组
数据集sql:
SELECT * FROM 订单 WHERE  订单.订单ID in (?)
参数表达式:
query("select 订单ID from 订单明细 where 产品ID in (?)",@productid)
 
 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值