finereport报表设计中模板数据集的sql语句中if的⽤法_报表⼯
具中动态参数的灵活。。。
报表开发过程中,有的时候我们会觉得普通参数很难满⾜⼀些业务需求,⽐如第⼆个数据集要引⽤第⼀个数据集的结果进⾏计算,动态控制SQL 的过滤条件,动态列等,如果您遇到了这种情况,可以尝试使⽤动态参数即 ${参数名} 的⽅式来达到我们想要的效果。
那么,什么是动态参数呢?
动态参数⼀般是依赖于普通参数的具有计算能⼒的参数,在报表中动态参数我们可以看做是⼀个占位符,在报表运算之前,系统会全⾯搜索整张报表定义,将所有 ${参数名} 中的参数名替换成参数值即 动态参数表达式的结果。
下⾯我们举⼏个例⼦,看⼀下
1. ⾸次展现参数值为空,查询全部数据
实现⽅法:
a. 将数据集中原有的 where ⼦句部分,⽤动态参数替换 如下图
更改前 SQL:
SELECT 订单. 订单 ID, 订单. 客户 ID, 订单. 订购⽇期, 订单. 货主地区, 订单. 运货商, 订单. 运货费
FROM 订单
where 订单. 订单 ID >=10254
更改后 SQL:
b. 菜单栏中 选择【报表】à 【参数】,新增动态参数,
表达式为:if(bid==null,"",“where 订单. 订单 ID >=”+@bid)
意为:根据参数模板 bid 的参数值是否为空,确定 sql 部分被替换的内容,如下图
注:bid 为参数模板传递的参数名称
c. 其他,设置按照报表常规操作进⾏开发设计。
2. 第⼆个数据集要根据引⽤第⼀个数据集的结果进⾏计算
实现⽅法:
a. 新增动态参数,表达式为第⼀个数据集的 sql 语句,如下图
参数表达式:
if(@bid==null || @bid=="" ,
“where 订单 ID in (”+string(split(query(“select 订单 ID from 订单 where 货主地区 =?”,“华中”;“demo”),“,”))+“)”,
“where 订单 ID in (”+string(split(@bid,“,”))+“)”)
sql自学难吗意为:如果参数 bid 为空,则根据某个 sql 语句的执⾏结果进⾏查询,否则根据 bid 参数值进⾏数据过滤
b. 数据集部分设置如下:
c. 其他,设置按照报表常规操作进⾏开发设计。
3. 动态控制 SQL 的过滤条件
数据集 SQL 中包含多个过滤条件,假设当订单 ID 及货主地区参数值为空时,SQL 语句中去掉这两个查询条件,同时假如其中⼀个有值则对应字段过滤⽣效,否则两个参数都有值时,则订单 ID 及货主地区过滤均⽣效。
注:参数 arg1 对应订单 ID、参数 arg2 对应货主地区
实现⽅法:
a. 新增动态参数,利⽤ if() 函数实现上述逻辑判断,如下图
参数表达式为:
if(arg1=="" || arg1==null,
if(arg2=="" || arg2==null,“1=1”,“货主地区 =’”+arg2+“’”),
if(arg2=="" || arg2==null,“订单 ID=”+arg1,“订单 ID=”+arg1 +“and 货主地区 =’”+arg2+“’”)
)
b. 数据集部分设置如下:
c. 其他,设置按照报表常规操作进⾏开发设计。等等。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论