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

目录:

1. 问题描述编辑

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

2. 解决思路编辑

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

3. 解决方案编辑

%FR_HOME%\WebReport\WEB-INF\reportlets\demo\parameter\复选框多值查询.cpt为例:

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

初始化参数:在参数的默认值处填写仓库1,仓库3

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

要实现最终的效果SELECT * FROM 库存 WHERE 仓库 in ('仓库1’,’仓库3') 或  SELECT * FROM 库存 WHERE 仓库 in (1,2,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语句,问题定当迎刃而解!