下面就通过图表(长尾)FineReport来简单介绍一下。
工具/原料
- 图表(长尾)FineReport7.1.1
- 大小:148.2M 适用平台:windows/linux
模糊查询
- 1
模糊查询语法
模糊查询是利用“_”表示单个字符和“%”表示任意个字符进行匹配的。一些常见的格式如下:
Select * from 表名 where 列名 like '%'; //查询出全部
Select * from 表名 where 列名 like 'x'; //完全匹配查询
Select * from 表名 where 列名 like '_x'; //右为x,前面有一位字符
Select * from 表名 where 列名 like '__x'; //右为x,前面有两位位字符
Select * from 表名 where 列名 like 'x___'; //左为x,后面有两位位字符
Select * from 表名 where 列名 like '%x'; //右为x,前面可以有任意位字符
Select * from 表名 where 列名 like 'x%'; //左为x,后面可以有任意位字符
Select * from 表名 where 列名 like '%x%'; //中间为x,左右都可以有任意位字符
结合参数的模糊查询(用${name}代表上述的x):
Select * from 表名 where 列名 like '${name}';
Select * from 表名 where 列名 like '%${name}';
以此类推。
- 2
示例:使用模糊查询实现参数为空选出全部
新建工作簿,增加数据集ds1,sql语句为:SELECT*FROM 销售 WHERE 地区 like '%${area}'
效果查看
点击数据集面板中的预览按钮,会弹出参数对话框,如果输入“华东”,只会显示出华东地区产品销售情况:
- 3
如果不输入参数值,则会显示出所有地区的产品销售情况
END
动态表和动态条件
- 1
动态数据表
若数据库中存在两张表结构相同,只是数据量不同,如何实现不同的人根据需要选择不同的表进行查看,从而提高查询效率呢?
- 2
实现思路
在定义数据集时,通过if函数来判断参数的值从而来实现调用不同的数据表,如直接将SQL语句定义成:SELECT * FROM ${if(aa=1,'订单','订单1')},即若参数aa=1时,查询的是订单表,若aa!=1时,查询的是订单1表。
- 3
动态条件
若您对表中的数据进行过滤时,查询条件是不确定的,有时候想用A列进行过滤,有时候想用B列进行过滤,此时要如何实现呢?
实现思路
在定义数据集时,将条件定义为参数,如SQL语句定义成:SELECT * FROM TableName ${Condition}。
- 4
示例
打开模板
打开模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\DynamicSQL\DynamicSQL.cpt。
修改数据集
将数据集修改为:SELECT * FROM 订单 ${Condition}。
修改参数界面
将参数界面的控件名称修改为Condition即可。
效果查看
保存模板点击分页预览,输入动态的查询条件如:where 货主地区='西南',便可以获取货主地区为西南的数据了,效果如下图:
END
参数引用
- 1
参数的主要作用是实现用户与数据的实时交互,即进行数据的过滤;
除了过滤数据外,我们还能在很多情况下使用参数,比如在单元格中引用参数来实现动态标题、根据参数值的不同显示不同等等。
总之,只要可以使用公式的地方,都可以通过“$参数名”来引用参数来实现各种逻辑结果:
- 2
示例—引用参数实现动态标题
如下图效果,地区选择华北,报表标题就显示华北销售额,选择华东就显示华东销售额,即标题根据地区参数的变化而变化:
- 3
打开报表
打开报表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\Parameter\Parameter_2.cpt
- 4
公式中引用参数
我们可以直接在公式中通过$para来引用参数,para为参数名,如下调整模板,合并A1至C1单元格,输入公式=$地区 + "销售额":
这样公式的值就会根据参数动态的改变了。
注:FineReport报表中支持输入公式的地方均可以引用参数,参数引用直接使用$para即可将参数值传递过来。
END
参数为空选择全部
- 1
在使用参数进行过滤时,选择某个参数值后就会根据选择的值进行过滤,但是如何实现如下图效果即不输入参数值时能够查询处数据表中的全部值呢?
由于参数的定义有两种方式,因此下面我们分别介绍下参数为空选出全部值的做法。
- 2
方法一:通过数据集参数
2.1 实现思路
在定义数据集时,通过使用if函数判断参数的值是否为空,若为空就不过滤参数,若不为空就进行参数过滤。
2.2 示例
打开模板
打开模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\DynamicSQL\DynamicSQL.cpt。
修改数据集
将数据集修改为:SELECT * FROM 订单 where 1=1 ${if(len(area) == 0,"","and 货主地区 = '" + area + "'")} ${if(len(province) == 0,"","and 货主省份 = '" + province + "'")}。
注:where 1=1表示条件永真,防止没有之后的参数条件时,where多出而导致出错;len(area)==0表示参数area为空;货主地区='"+area+"'表示取参数值。
${if(len(area) == 0,"","and 货主地区 = '" + area + "'")} 表示若参数area为空就不进行过滤,若不为空则货主地区等于参数值。
修改参数界面
将参数界面修改为如下样式:
- 3
参数控件设置
设置参数area的控件类型为下拉框,数据字典选择数据库表,数据库为FRDemo,数据表为订单,实际值与显示值的列名都选择货主地区。
设置参数province的控件类型也为下拉框,数据字典为数据库表,数据库为FRDemo,数据表为订单,实际值与显示值的列名都选择货主省份。
效果查看
点击分页预览,不输入参数值后,直接点击查询,效果如上图
- 4
方法二:通过报表参数
3.1 实现思路
在给数据列设置过滤条件的时候,同样使用if函数进行判断。
3.2 示例
打开模板
打开模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\ParaNull\ParaNull.cpt。
修改数据集
将数据集修改为查询订单表的数据即:SELECT * FROM 订单。
报表参数设置
点击模板>报表参数,添加两个报表参数,分别为area和province。
过滤条件设置
点击A2单元格,选择格子上方的过滤按钮,给A2单元格增加如下图所示的过滤条件:
注:nofilter表示不过滤,if(len($area)==0,nofilter,$area)表示参数area为空,就不过滤,若不为空则以参数值进行过滤;if(len($province)==0,nofilter,$province)意义相同。
- 5
效果查看
点击分页预览,不输入参数值后,直接点击查询效果如上图。
END