finereport报表设计中模板数据集的sql语句中if的用法_报表工具中动态参数的灵活运用...

报表开发过程中,有的时候我们会觉得普通参数很难满足一些业务需求,比如第二个数据集要引用第一个数据集的结果进行计算,动态控制 SQL 的过滤条件,动态列等,如果您遇到了这种情况,可以尝试使用动态参数即 ${参数名} 的方式来达到我们想要的效果。

那么,什么是动态参数呢?

动态参数一般是依赖于普通参数的具有计算能力的参数,在报表中动态参数我们可以看做是一个占位符,在报表运算之前,系统会全面搜索整张报表定义,将所有 ${参数名} 中的参数名替换成参数值即 动态参数表达式的结果。

下面我们举几个例子,看一下

  1. 首次展现参数值为空,查询全部数据

实现方法:

a. 将数据集中原有的 where 子句部分,用动态参数替换 如下图

更改前 SQL:

SELECT 订单. 订单 ID, 订单. 客户 ID, 订单. 订购日期, 订单. 货主地区, 订单. 运货商, 订单. 运货费

FROM 订单

where 订单. 订单 ID >=10254

更改后 SQL:

760b9515c20f66e63cabc3f11cab9e3c.png

b. 菜单栏中 选择【报表】à 【参数】,新增动态参数,

表达式为:if(bid==null,"",“where 订单. 订单 ID >=”+@bid)

意为:根据参数模板 bid 的参数值是否为空,确定 sql 部分被替换的内容,如下图

723f079847e1f08b89034f5a0261d93d.png

注:bid 为参数模板传递的参数名称

c. 其他,设置按照报表常规操作进行开发设计。

2. 第二个数据集要根据引用第一个数据集的结果进行计算

实现方法:

a. 新增动态参数,表达式为第一个数据集的 sql 语句,如下图

5b44455cf7f3f72bb1fe04434dfcfd78.png

参数表达式:

if(@bid==null || @bid=="" ,

“where 订单 ID in (”+string(split(query(“select 订单 ID from 订单 where 货主地区 =?”,“华中”;“demo”),“,”))+“)”,

“where 订单 ID in (”+string(split(@bid,“,”))+“)”)

意为:如果参数 bid 为空,则根据某个 sql 语句的执行结果进行查询,否则根据 bid 参数值进行数据过滤

b. 数据集部分设置如下:

22584ce8c836cc6d6af566688f13366e.png

c. 其他,设置按照报表常规操作进行开发设计。

3. 动态控制 SQL 的过滤条件

数据集 SQL 中包含多个过滤条件,假设当订单 ID 及货主地区参数值为空时,SQL 语句中去掉这两个查询条件,同时假如其中一个有值则对应字段过滤生效,否则两个参数都有值时,则订单 ID 及货主地区过滤均生效。

注:参数 arg1 对应订单 ID、参数 arg2 对应货主地区

实现方法:

a. 新增动态参数,利用 if() 函数实现上述逻辑判断,如下图

399900d41571298cfd1fd5fa576d05aa.png

参数表达式为:

if(arg1=="" || arg1==null,

if(arg2=="" || arg2==null,“1=1”,“货主地区 =’”+arg2+“’”),

if(arg2=="" || arg2==null,“订单 ID=”+arg1,“订单 ID=”+arg1 +“and 货主地区 =’”+arg2+“’”)

)

b. 数据集部分设置如下:

62bed2a2884a60e8fcaaa1ced60516c9.png

c. 其他,设置按照报表常规操作进行开发设计。

等等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值