报表查询中参数为空时忽略该条件的设置
报表在做条件查询时可以增加多个条件,用户希望在设置条件时如果某个条件值为空则忽略该条件,取符合其他条件值的数据,例如:
如果城市选择北京,取出北京下的数据,如果该条件不选,则取出所有城市下的数据。
报表设置
一:参数设置
在参数编辑中增加参数:
city:接收城市参数
begin:起始日期
end: 结束日期
二:数据集设置
在 sql 的 where 条件中增加了条件 (订单. 货主城市 =? or ? is null),并在对应的参数表达式中设置了两个 city,表示如果 city 参数有值,取货主城市为该城市的数据,如果参数为空,那么就执行后边的 or ? is null,那么就忽略这个条件了。这里注意,根据参数的设置要求,参数表达式这块的值要和 sql 中的问号要一一对应,也就是 sql 中有几个问号,这里要有几个参数表达式,顺序也要完全一致。
三:报表模版设置
报表模版根据实际需求设置就行:
参数模版设置
参数模版中根据实际需求设置就行,本例中用的下拉数据集,设置允许空值和设置空选项文字就可以:
查看结果
多选条件时设置
如果需要同时选择多个城市查看多个城市下数据,修改报表如下:
参数设置:
将参数 city 的数据类型改成字符串组,用于接收多个城市参数。
数据集设置:
数据集 whrere 条件中,如果需要多选,则 sql 需要写成 货主地区 in (?) 形式,并且在 or ? is null 这个问号对应的参数表达式改成 string(city),使用 string 函数将其转成字符串,否则多选时会报错。
参数模版中下拉数据集那设置允许多选就可以了,这样就可以实现城市多选时查出符合条件数据,如果这个条件为空,取出所有城市下数据。
其他注意事项
当数据库类型为 db2 时,使用 or ? is null 可能会出错,需要更改下 sql 语句中的条件为 cast(? as varchar(10)) is null) ,需要对类型做下转换。