历史版本6 :文本框实现范围查询 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 应用场景

用户在输入空值时查询全部数据,输入单值时查询该值对应数据,输入范围(用任意字符分隔两个数字即可)时查询范围内数据。如下图所示:

注:范围数据的分割符可以使用除数字外的任意字符。
BC903B2D-F269-4852-8F52-06CE9ECAAFD5.GIFimage.png

1.2 实现思路

利用正则表达式匹配捕捉范围输入的值,并将这两个数字代入 SQL 中运算。

1.3 插件安装

实现该功能需要提前安装插件。

点击下载插件:常见函数集合

设计器插件安装方法参照:设计器插件管理

服务器安装插件方法参照:服务器插件管理

2. 示例(一)编辑

2.1 数据准备

新建普通报表,新建数据集 ds1,数据库查询语句为:

select * from 销量 ${if(len(销量)==0,"",if(len(p)==1,"where 销量 ="+销量,"where 销量 between "+indexofarray(p,1)+" and "+indexofarray(p,2)))}

其中参数p需要设置公式默认值:stringfetch($销量,"\\d+")

注:默认值公式的使用可以参见文档:常见函数集合插件,此函数可以返回使用正则表达匹配到的数据,结果为一个数组。

Snag_571ba6f.png

2.2 报表设计

如下图设计报表:

Snag_5770bb3.png

2.3 参数设置

1)将参数销量添加到参数面板,控件类型选择文本控件。如需设置输入规则,可以参考正则表达式文档,此处不做设置。

Snag_577ce38.png


2)设计器菜单栏点击模板>模板参数,设置模板参数p,默认值为公式:stringfetch($销量,"\\d+")

Snag_57a345b.png

2.4 效果预览

1)PC 端

保存报表,点击分页预览,效果如下图所示:

BC903B2D-F269-4852-8F52-06CE9ECAAFD5.GIF

2)移动端

1583826938495759.gif


3. 示例(二)编辑

注:此方法无需安装「常用函数」插件,且支持小数,负数区间查询。

3.1 数据准备及参数控件设置

1) 控件定义,新增文本控件,命名为:range_z

2) 新增数据库查询,数据集命名为ds1,数据库查询语句为:

select * from 销量 ${if(len(range_z)==0,"",if(len(split(range_z,"~"))==1,"where 销量 ="+range_z,"where 销量 between "+indexofarray(split(range_z,"~"),1)+" and "+indexofarray(split(range_z,"~"),2)))}

注:「~」代表数据范围分隔符,可根据实际情况,自行选择合适的分隔符(避开「+-*/等」特殊字符,推荐「~、_等」)

3.2 报表界面设置

如下图设计报表:


3.3 效果预览

1)PC 端

Jun-15-2021 14-15-56.gif

2)移动端

Jun-15-2021 14-24-32.gif

4. 模板下载

已完成模板可参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\范围查询方法优化.cpt

点击下载模板:

范围查询方法优化.cpt

范围查询方法优化版.cpt