1.1 版本
1.2 预期效果
“
参数为空查询全部
”场景下,当数据量较多时,查询全部将会影响性能。其实多数场景下是不需要查询全部的,只要能显示数据,比如显示前一天的数据、显示前一周的数据,即显示某个时间段或时间点的数据。如下图所示:
那参数为空时
显示某个时间段或时间点的数据该如何实现呢?
1.3 实现思路
定义参数时通过公式,条件判断使得参数为空时,查询特定时间点或者时间段的数据。
2.1 准备数据
新建普通报表,新建数据集 ds1,SQL 语句为:
select * from 订单
where 1=1
${if(len(货主地区) == 0,"and substr(订购日期,0,11) = '" + 查询日期 + "'","and 货主地区 = '" + 货主地区 + "'")}
公式解释如下:
where 1=1
表示条件永真,防止没有参数条件时,where 后面没有有效内容导致出错。
${if(len(货主地区) == 0,"and substr(订购日期,0,11) = '" + 订购日期 + "'","and 货主地区 = '" + 货主地区 + "'")}
表示:
定义一个参数「货主地区」,通过 if 语句来根据「货主地区」的值分别执行不同的 SQL 语句:
-
当参数「货主地区」为空时,查询一个特定日期的数据,即又定义了一个参数「查询日期」,SQL 语句相当于:
select * from 订单
where 1=1 and substr(订购日期,0,11) = '某个查询日期 '
,其中 substr 是 SQL 的公式,处理一下数据,将表中的日期数据处理成我们需要的年月日形式。
-
当参数「货主地区」不为空时,SQL 语句相当于:
select * from 订单
where 1=1 and 货主地区 = '货主地区 '
,即查询选定货主地区的数据。
如下图所示:
定义好数据集参数后,使用公式给查询日期一个动态特定的值,比如查询前一天的数据。如下图所示:
注:当前数据集前一天无值,请根据具体数据集定义公式
2.2 设计表格
如下图设计表格,将字段拖入到对应单元格中。
2.3 添加参数控件
1)编辑参数面板,点击「全部添加」,设置下拉框控件的数据字典为订单表中的数据列
货主地区
。如下图所示:
2)修改标签控件的显示值为
货主地区:
。如下图所示:
2.4 效果预览
2.4.1 PC 端
保存模板,点击「分页预览」,效果如下图所示:
2.4.2 移动端
App 及 HTML5 端效果相同,如下图所示:
已完成模板可参见:
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\参数为空查询特定日期的数据.cpt
点击下载模板:
参数为空查询特定日期的数据.cpt