报表工具中动态参数的使用方法和场景

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

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

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

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

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

实现方法:

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

更改前 SQL:

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

FROM 订单

where 订单. 订单 ID >=10254

更改后 SQL:

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

表达式为:if(bid==null,"",“where 订单. 订单 ID >=”[email protected])

意为:根据参数模板 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,“,”))+“)”)

意为:如果参数 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. 其他,设置按照报表常规操作进行开发设计。

等等。

原文地址:https://www.cnblogs.com/xiaohuihui-11/p/12054295.html

时间: 2024-10-07 07:51:36

报表工具中动态参数的使用方法和场景的相关文章

报表工具中动态参数的灵活运用

报表开发过程中,有的时候我们会觉得普通参数很难满足一些业务需求,比如第二个数据集要引用第一个数据集的结果进行计算,动态控制 SQL 的过滤条件,动态列等,如果您遇到了这种情况,可以尝试使用动态参数即 ${参数名} 的方式来达到我们想要的效果. 那么,什么是动态参数呢? 动态参数一般是依赖于普通参数的具有计算能力的参数,在报表中动态参数我们可以看做是一个占位符,在报表运算之前,系统会全面搜索整张报表定义,将所有 ${参数名} 中的参数名替换成参数值即 动态参数表达式的结果. 下面我们举几个例子,看

mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)

这篇文章主要介绍了mysql中max_allowed_packet参数的配置方法,以及查看max_allowed_packet参数当前值的方法,需要的朋友可以参考下 MySQL根据配置文件会限制Server接受的数据包大小.有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置: 复制代码 代码如下: show VARIABLES like '%max_allowed_packet%'; 显示的结果为: 复制代码 代码如下: +------

SQL Sever 2008配置工具中过程调用失败解决方法

刚刚装了VS2013,然后打开数据库时,无论如何也连不上.打开数据库配置,出现如下界面: 上网搜了,试了很多方法,像什么把windows\system32\wbem下的framedyn.dll复制到system32目录下,还有照一个老外说的,下什么更新补丁,都没用!! 想重装SQL2008,结果运行安装程序,变成了英文版(以前装显示的是中文的),而且安装根目录选不了!巨想死! 万念俱灰下,打开360,卸载了一个叫"Microsoft SQL Server 2012LocalDB",重新

MySQL中limit使用动态参数的解决方法(拼接SQL字符串语句来执行SQL)

官方好像说过limit已经在5.6版本上支持了动态参数,但是测试时依然还是不行. 那么要解决limit动态参数唯一能做的就是使用字符串SQL拼接的形式,然后再进行执行. 一般有以下方式解决: 1.存储过程拼接 2.函数拼接 3.视图里拼接 4.当前查询的session中使用 其实上面都是同一个意思,就是使用一个变量存取这个SQL,然后再执行这个变量. 样例: set @stmt = concat('select * from ',table_name,' limit ?,?'); prepare

报表工具的动态数据源实现

有时候我们需要用参数动态指定数据源,或将多数据源连接为单数据源,或向子报表.table控件动态传入数据源名.对于此类需求,报表工具经常要借助高级语言实现或牺牲安全性以降低复杂度,尤其是BIRT.Jasper等单源报表. 使用免费的集算器可以弥补这一不足.集算器封装了丰富的结构化计算函数,支持动态解析表达式,支持多数据源混合计算,书写简单脚本就能实现动态数据源.集算器还提供了简单易用的JDBC接口,报表工具可将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果. 集算器与报表工

Java基础---Java中带参数返回值方法的使用(四十)

Java 中带参带返回值方法的使用 如果方法既包含参数,又带有返回值,我们称为带参带返回值的方法. 例如:下面的代码,定义了一个 show 方法,带有一个参数 name ,方法执行后返回一个 String 类型的结果 调用带参带返回值的方法: 运行结果: 代码: import java.util.Arrays; public class HelloWorld {    public static void main(String[] args) {  HelloWorld hello = new

PL/SQL开发中动态SQL的使用方法

一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使用动态SQL来实现. 首先我们应该了解什么是动态SQL,在Oracle数据库开发PL/SQL块中我们使用的SQL分为:静态SQL语句和动态SQL语句.所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象.而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根

C语言中可变参数的使用方法

[温馨提示: 以下内容均来自网友的无私奉献或书本的摘抄,在此表示感谢!] 我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,其定义为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法: printf("%d",i); printf("%s",s); printf("the number is %d

【原】iOS中动态添加属性的方法——关联(e.g. 向Category添加成员变量)

想到要如何为所有的对象增加实例变量吗?我们知道,使用Category可以很方便地为现有的类增加方法,但却无法直接增加实例变量.不过从Mac OS X v10.6开始,系统提供了Associative References,这个问题就很容易解决了.这种方法也就是所谓的关联(association),我们可以在runtime期间动态地添加任意多的属性,并且随时读取.所用到的两个重要runtime API是: OBJC_EXPORT void objc_setAssociatedObject(id o