1. 概述
1.1 版本
报表服务器版本 | 功能变更 |
---|---|
11.0 | - |
1.2 应用场景
当用户需要对表中的同一字段实现多值查询时,可以使用文本域控件。
当文本域控件内容为空时,查询全部数据;有多个订单 ID 时,查询结果为多个订单 ID 的信息。如下图所示:
1.3 实现思路
用户可通过两种方法实现文本域控件多值查询。
示例一:添加模板参数,单元格设置过滤条件实现。
示例二:使用数据集参数在数据查询的时候即可实现过滤。
2. 示例一:模板参数实现
2.1 新建模板
新建一张普通报表。如下图所示:
2.2 准备数据
新建数据库查询 ds1,SQL 语句为:SELECT * FROM 订单。如下图所示:
2.3 设计报表
A1-G1 单元格输入文本内容,A2-G2 单元格拖入相应的数据列,自行设计报表样式。如下图所示:
2.4 添加模板参数
点击菜单栏「模板>模板参数」,添加一个模板参数order。如下图所示:
2.5 参数绑定控件
1)进入参数面板编辑界面,点击右侧的「全部添加」,即可将参数添加至参数面板。如下图所示:
2)参数绑定文本域控件。如下图所示:
3)调整文本域控件的大小及「查询」按钮的位置。如下图所示:
2.6 添加过滤条件
1)双击 A2 单元格,点击「过滤」,类型选择「公式」。
2)点击「定义」,输入公式:IF(LEN($order)==0,INARRAY($$$,Split($order, "\n"))=0,INARRAY($$$,Split($order, "\n"))>0),点击「增加」和「确认」。如下图所示:
注:公式表示如果文本域内容为空,则查询全部数据;否则,将文本域里的文字,按照换行符进行分割,每行为一个查询值,并匹配当前单元格内容是否为文本域控件中输入的其中一个值。
2.7 设置隔行变色
1)选中 A2 单元格,点击右侧的「条件属性」,添加一个条件属性。
2)属性选择「背景」,颜色选择紫色,设置为「当前行」。
3)类型选择「公式」,点击「定义」。输入公式: row() % 2 = 0,点击「增加」。如下图所示:
3. 示例二:数据集参数实现
3.1 新建模板
同 2.1 节,此处不再赘述。
3.2 准备数据
新建数据库查询 ds1 ,输入SQL 语句:SELECT * FROM 订单 where 1=1 ${if(len(order)>0," and 订单id in ('" +replace(order, "\n","','")+ "')","")},如下图所示:
注:SQL 语句首先判断文本域控件是否有内容,有内容时,通过 in 查询文本域控件中以换行输入的订单 ID 的数据,并使数据在数据集中过滤;无内容时,则不添加过滤条件,查询全部数据。
3.3 设计报表
A1-G1 单元格输入文本内容,A2-G2 单元格拖入相应的数据列,自行设计报表样式。如下图所示:
3.4 参数绑定控件
同 2.5 节,此处不再赘述。
3.5 设置隔行变色
同 2.7 节,此处不再赘述。
4. 效果预览
1)PC端
PC端效果如 1.2 节所示。
2)移动端
移动端效果如下图所示:
5. 下载模板
点击下载示例一模板:示例一模板参数实现.cpt
点击下载示例二模板:示例二数据集参数实现.cpt
6. 注意事项
问题描述
有时用户输入的文本中含有多余内容,此时直接查询将会无法显示数据。
解决方案
若用户输入的文本中含有多余内容,则需要排除掉多余内容,只留下有效内容:订单ID。如下图所示:
具体步骤如下所示:
1)在参数面板再次添加一个文本域控件,控件名称为KKK,控件值为字符串。如下所示:
2)原来的文本域控件order ,控件值设置为「公式」,输入公式:JOINARRAY(MAPARRAY(split($KKK,"\n"),INDEXOFARRAY(split(item,"-"),2)),"\n") 。如下图所示: