历史版本1 :下拉复选框实现多值查询 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

一、问题描述编辑

平时大家在设置参数控件时,经常会遇到这样的问题,多选几个指标值后,报表执行(sql)报错,但如果只选一个指标值却没有任何问题。为什么会这样呢?

二、解决思路编辑

我们可以查看执行日志,分析sql问题所在,逐步解决!

三、解决方案编辑

以 /WebReport/ReportServer?reportlet=demo/parameter/multivalue.cpt 为例:

首先删除A5单元格的过滤条件,将数据集ds1:SELECT * FROM 库存 修改成 SELECT * FROM 库存 WHERE 仓库 = '${选仓库}'

初始化参数选择[仓库1,仓库3]  2个指标

复选框控件的默认分隔符是,

要实现最终的效果SELECT * FROM 库存 WHERE 仓库 in ('仓库1’,’仓库3') ;

 

问题一:

直接执行SELECT * FROM 库存 WHERE 仓库 =’ ${选仓库}’   无报错无数据!

查看日志(请参考:查看日志)发现sql是这样执行的:SELECT * FROM 库存 WHERE 仓库='仓库1,仓库3' ;

语法上没有问题但不符合我们的效果。

 

问题:

首先我们需要把原sql中的=替换成in

SELECT * FROM 库存 WHERE 仓库 in ‘${选仓库}’

执行查询,报错!

检查日志,发现sql是这样执行的:SELECT * FROM 库存 WHERE 仓库 in  '仓库1,仓库3'

少前后()和指标中间的’,’

 

问题:

修改sql中的参数添加前后()

SELECT * FROM 库存 WHERE 仓库 in  (‘${选仓库}’)

执行查询,不报错了,但是没有数据。

检查日志,发现sql是这样执行的:SELECT * FROM 库存 WHERE 仓库 in  ('仓库1,仓库3')

语法上没有问题,但不是我们想要的结果

注意:('仓库1,仓库3')('仓库1’,’仓库3')的区别

 

问题:

现在我们无法从再在sql上修改了我们想想如果控件是以’,’作为分隔符那我们的问题应该就解决了。

修改参数默认分隔符

选择 参数->属性->高级->分隔符将原来的,修改成’,’

222
再次执行查询,有数据了!

检查日志执行sql:SELECT * FROM 库存 WHERE 仓库 in ('仓库1','仓库2')

和我们的期望语句一致问题解决

注:多选复选框出现的问题,无非就是上面几种情况,当遇到问题后请仔细检查相关设置,比对执行sql语句,问题定当迎刃而解!