1. 单元格设置
1.1 扩展性
1.1.1 扩展的方向
扩展是有方向的,您可以选择记录是依次从上至下的显示,即纵向扩展(行方向的扩展);或者是依次从左到右的显示,即横向扩展(列方向的扩展);当然你也可以 选择不扩展,在一个单元格中显示。
-
纵向扩展
-
横向扩展
-
不扩展
1.1.2 父格设置
子格的扩展属性会随着父格的扩展属性变化,当单元格左侧或上方相邻的单元格具有扩展属性时,单元格默认其左侧相邻单元格为其左父格,默认上方相邻的单元格为其上父格。
父格的设置有 3 种:不设置,默认设置和自定义设置,如下图所示:
对于自定义设置,可以自己输入父格或者点击下图的按钮,点击想要的单元格,它会自动返回单元格的行和列,如下图所示:
1.1.3 可伸展性
有时我们会遇到:可扩展的单元格其左侧的单元格,并不会像普通的插入那样按常态分为新的行,而是整体被拉大的效果。即展示单元格中的内容时是不伸展展示,且要让其不随子格或同级别单元格的扩展而被拉大。对于单元格的可伸展性,可分为:纵向可伸展性与横向可伸展性。下面就对其单元格的横向伸展性作简单介绍。
如:
图中可见,上面的单元格数据,均是随中间部分的数据都被拉大了,而这时希望上侧的单元格,不受其中间的单元格内容影响,则可选中不需要受影响的单元格,在报表主体右侧的单元格属性-扩展-高级中取消横向可伸展的勾选即可:
效果图如下:
1.2 父子格设置
1.2.1 功能介绍
FineReport 设计报表时,选中单元格后,单元格的父格会有「蓝色箭头」。如下图所示:
FineReport 支持两种类型的父子格设置。
-
左父格:单元格之间存在纵向扩展的关系时,设置左父格。
-
上父格:单元格之间存在横向扩展的关系时,设置上父格。
1.2.2 应用场景
父子格是跟单元格扩展息息相关的概念,单元格的扩展是针对具体的某一个单元格,当报表主体中绑定了多个单元格时,这些单元格在扩展时是否存在联系,其扩展方向是否会相互影响呢?
以「地区」和「销售员」这两个字段为例,这两个字段之间存在层级关系,每个地区下面会有多个不同的销售员。我们希望这两个字段在单元格扩展时,能够表现出他们之间的层级关系,也就是让这两个字段的数据能够分组展示。FineReport 使用父子格设置来实现这种效果。
图示中「地区」字段为父格,「销售员」字段为子格。设置方法在下面的示例中详细说明。
1.2.3 示例
在设计器中设置子格的左父格或上父格时,下拉框有三种设置项:「无」,「默认」,「自定义」。
下面以单元格纵向扩展时设置左父格为例,详细介绍父子格设置时三种设置项各自的应用场景和效果。
-
无
-
「无」就是不设置单元格的父格,该单元格扩展时不考虑单元格之间的分组关系。
-
选中 B2 单元格,右边属性面板选择「单元格属性>扩展」,扩展方向采用默认设置「纵向扩展」,左父格设置为「无」。
-
报表效果如下图所示:
-
默认
-
当单元格左侧或上方相邻的单元格具有扩展属性时,单元格默认其左侧相邻单元格为其左父格,默认上方相邻的单元格为其上父格。
-
「默认」就是指将数据列拖拽至单元格中时,该单元格会默认将其相邻上方横向扩展的单元格或者左侧纵向扩展的单元格当做上父格或者左父格。
-
注意1:必须是相邻的同行或者同列单元格,不是相邻的需要自定义设置。
-
注意2:其单元格的左侧相邻单元格不具有扩展属性时,会依次向左或向上寻找具有扩展属性的单元格,来确定它的父格。
-
选中 B2 单元格,右边属性面板选择「单元格属性>扩展」,扩展方向采用默认设置「纵向扩展」,左父格设置为默认。由于 B2 左侧单元格 A2 是纵向扩展的,因而 B2 单元格默认的左父格为A2。
-
报表效果如下图所示:
-
自定义
-
单元格之间存在扩展关系,但是它们不相邻无法使用默认设置时,通过「自定义」来设置它们之间的父子格关系。
-
A2 单元格和 B3 单元格不相邻,但是它们之间仍然存在纵向扩展的层级关系。选中 B3 单元格,右边属性面板选择「单元格属性>扩展」,扩展方向采用默认设置「纵向扩展」,左父格自定义为 A2 单元格。
-
报表效果如下图所示:
1.3 单元格扩展
1.3.1 功能介绍
FineReport提供了三种单元格扩展方向。
-
纵向扩展:单元格中字段的数据纵向扩展,在不同单元格中展示。
-
横向扩展:单元格中字段的数据横向扩展,在不同单元格中展示
-
不扩展:单元格中字段的数据不扩展,所有数据在一个单元格中展示。
1.3.2 应用场景
数据集中的字段拖入到单元格后,如果不进行单元格扩展,字段下的数据会在一个单元格中集中展示。
通过设置单元格扩展功能,可以让一个字段下的不同数据在多个单元格中展示。
1.3.3 示例
-
数据准备
-
新建数据集 ds1,数据库查询对话框中写入 SQL 查询语句:SELECT * FROM 销量,取出「销量」表中的所有数据。如下图所示:
-
-
将数据集 ds1 中的「销售员」字段拖入到A1单元格,A1单元格字体居中,添加黑色边框和黄色背景。如下图所示:
-
纵向扩展
-
选中 A1 单元格,右边属性面板选择「单元格属性>扩展>扩展方向」,由于数据集中的字段拖入到单元格后,默认就是纵向扩展,所以直接使用默认的扩展方向纵向扩展。如下图所示:
-
- 点击「预览」按钮,选择「分页预览」,在浏览器中查看单元格纵向扩展的效果。如下图所示:
-
横向扩展
-
选中 A1 单元格,右边属性面板选择「单元格属性>扩展>扩展方向」,扩展方向设置为「横向扩展」。如下图所示:
-
-
-
点击「预览」按钮,选择「分页预览」,在浏览器中查看单元格横向扩展的效果。如下图所示:
-
-
不扩展
-
选中 A1 单元格,右边属性面板选择「单元格属性>扩展>扩展方向」,扩展方向设置为「不扩展」。如下图所示:
-
-
点击「预览」按钮,选择「分页预览」,在浏览器中查看单元格不扩展的效果。如下图所示:
1.4 单元格样式
1.4.1 概述
选中单元格,在右侧选择「单元格属性>样式」,可设置单元格自定义样式或预定义样式,如下图所示:
注意:样式只控制单元格的显示效果,对单元格的实际值没有影响。
1.4.2 自定义样式
选中单元格后,点击「单元格属性>样式」,默认设置为自定义样式,用户可对文本样式、单元格样式和对齐方式进行设置,如下图所示:
-
文本
-
格式
-
可对数字、时间等数据,设置显示格式,如下图所示:
-
数字样式
格式符 | 定义 | 示例 |
0 | 占位格式符,不足补 0 | 格式:0.0实际数据:1、2.2、3.33显示数据:1.0、2.2、3.3 |
# | 占位格式符,不足不补 0 | 格式:0.#实际数据:1、2.2、3.33显示数据:1、2.2、3.3 |
-
要求: 保留3位小数, 如 2.1, 5.67835
-
0: 2.100, 5.678
-
#: 2.1 5.678
-
-
设计器中内置的一些常用格式,如下图所示:
-
用户也可手动编辑,自定义相关格式,例如:
-
格式:#0.0m
-
实际数据:1、2.2、3.33
-
显示数据:1.0m、2.2m、3.3m
-
-
货币样式
-
货币部分 ¤0 表示在整数前面加一个¥,其 ¤#,##0.00 跟数字部分原理类似。
-
-
百分比样式
-
百分比中,可选择显示小数后多少位,也可以自己进行添加位数以及其他字符。如下图所示:
-
注意:百分比样式中,取小数位数时,遵循奇进偶不进规则。
-
-
日期型样式
-
日期型中可以设置日期的显示样式,例如希望日期型的数据显示成「20110101」这样的格式,则设置样式为「yyyyMMdd」即可,日期样式如下图所示:
-
注意1:月份必须为大写的 M ,小写的 m 无法识别。
-
注意2:设置日期格式时可手动输入。
-
-
字体
-
字体部分设置可以选择字体类型、字形、字体大小、颜色、下划线、删除线、阴影、上下标。其中上下标默认为既无上标也无下标,如下图所示:
-
-
注意1:由于 Chrome 浏览器的限制,在 Chrome 浏览器下查看报表,最小字体为 9,就算设置了更小号的字体也会显示为 9。
-
注意2:IE 浏览器 10 及 11 版本支持阴影效果,其余版本不支持阴影效果。
-
单元格
-
边框
-
对于单元格的边框,可设置内外边框的线条样式和颜色。如下图所示:
-
注意:单元格设置边框后,最终显示效果和浏览器渲染方式有关,同一设置,不同的浏览器可能会表现出不同的效果。
-
用户也可点击工具栏上的边框按钮,对单元格边框进行自定义设置,如下图所示:
-
背景
-
单元格背景可以选择纹理和图片以及设置颜色
-
-
对齐
-
基本对齐
-
对齐方式是指单元格中文本的对齐方式,可分别设置水平对齐和垂直对齐方式,如下图所示:
-
水平对齐:靠左、居中、靠右、分散对齐、默认。默认数字右对齐,非数字左对齐。
-
垂直对齐:靠上、居中、靠下。默认居中。
-
-
高级对齐
-
1 图片布局
-
单元格内容为图片时,可设置图片布局为:默认、平铺、拉伸、适应,如下图所示:
-
-
2 文本控制
方式 定义 自动换行 不调整字体大小根据单元格大小显示,显示不完就自动换行 单行显示 不调整字体大小根据单元格大小显示,显示不完就不再显示 单行显示(调整字体) 调整字体大小默认一行显示完所有文字 多行显示(调整字体) 调整字体大小默认多行显示完所有文字 -
单元格文本控制格式有四种:自动换行、单行显示、单行显示(调整字体)、多行显示(调整字体)。如下图所示:
-
-
-
注意:单元格必须已设置自动调整行高,再设置自动换行才有效果的。仅设置自动换行是没有效果的。
-
-
3 文本方向
-
文字排列方式有三种:自定义角度、文字竖排(从左向右)、文字竖排(从右向左),如下图所示:
-
-
注意1:除了自定义角度为 0 时,其他情况下,浏览器端预览时,单元格内容以图片格式显示。
-
注意2:特殊字符也能实现文字竖排。
-
4 缩进
-
用户可设置单元格文字左右缩进距离,默认左右各缩进 2px。如下图所示:
-
-
5 间距
-
用户可设置单元格段前间距、段后间距、行间距,如下图所示:
-
段前间距:单元格内文字的段前距。
-
段后间距:单元格内文字的段后距。
-
行间距:单元格内每行文字之间的距离。
-
-
预定义样式
-
选中单元格后,点击「单元格属性>样式」,选择预定义样式,即可显示出设计器内置的所有预定义样式,如下图所示:
-
注意:FineBI 工程未内置预定义样式,所以设计器远程连接 BI 服务器时,没有工程自带的预先定义好的样式。
1.5 数据显示方式
功能简介
在客户端的浏览器中,查看报表的效果都是通过对基础数据进行加工而来的。制作一张报表模板,首先需准备报表所需的基础数据。基础数据的来源方式有多种,可来源于数据库表、视图、存储过程,或是其他文本文件如Excel等等,详细请查看 数据集 ,不管数据来源于哪种方式,经过哪些预处理,最终都是返回如下图所示的一张或是多张二维表:
拥有了这些基础数据后,我们就可以对这些数据进行再加工,让其显示出我们所需的样式。其数据的显示方式有三种分别为:列表、分组、汇总,如下图:
1.5.1 列表
如上图,制作的报表展示出来的数据与数据集数据完全相同,即数据集中的每条记录无论是否重复都原封不动的展示出来,此为清单式明细列表。 在设计器中的设置方式如下:
可看到设为列表的数据列,以“S”表示,其对应英文 select。
1.5.2 分组
分为普通分组、相邻连续分组和高级分组,如下我们对比看下三者使用的不同情景。
-
普通分组
-
如上图所示,将数据列中相同项合并为一组显示的方式,我们称为分组显示。
-
设计器中的设置方式如下:
-
相邻连续分组
-
像这样只有连在一起的相同数据才进行合并的方式,我们称为相邻连续分组。
-
设计器中的设置方式如下:
-
该分组方式的优点为:它一般是配合 SQL 中已排好序的列,对其实现的分组,这样实现的分组性能比普通分组会好一点,可解决分组慢的问题。
-
-
高级分组
-
高级分组又分条件分组和公式分组,点击自定义出现如下界面:
-
1.5.3 汇总
对于表中的数值类型字段,我们可以设置其聚合方式,如:可以对销量字段,根据地区与销售员进行汇总求和;或计算出某地区某销售员所有产品的平均销量、最大销量、最小销量、产品个数等等。这些都属于数据的汇总。
在设计器中的设置如下对销量进行数量汇总:
并将 E2单元格的父格设置为 B2,销量就可以按照销售员进行求和,如下:
预览效果如下图所示:
2. 数据列属性
2.1 概述
当单元格内容为数据列时,选中单元格,右侧「单元格元素」面板就会出现数据列属性设置框,或者双击单元格也可弹出数据列属性设置对话框,如下图所示:
2.2 基本
数据列的基本属性包括「选择数据列、父格设置、数据设置、扩展方向」四类设置,如下图所示:
-
选择数据列
-
「选择数据列」就是指将数据集中的字段与单元格绑定,在参数绑定数据列 章节中描述了通过拖曳的方式选择数据列,这里我们是通过下拉框选择来选择数据列,如下图所示
-
-
父格设置
-
父格设置就是指父子格设置 ,既可在扩展属性中设置,也可以在数据列基本设置中设置,操作方式都一样。
-
-
数据设置
-
数据设置就是指修改数据显示方式。
-
-
扩展方向
-
扩展方向就是指扩展属性中的可伸展性,分为纵向扩展、横向扩展和不扩展。
-
2.3 过滤
选中单元格,选择报表主体右侧「单元格元素」面板中的「过滤条件>编辑」按钮或者双击单元格,选择过滤,就可以设置单元格的过滤条件,如下图所示:
-
父格条件
-
默认选中「将父格子作为过滤条件」,适用于父子格来自于同一个数据集。
-
将父格作为过滤条件意味着在满足当前单元格条件的同时首先要以父格为条件,子格将继承父格的过滤条件,即如果父格设置了过滤,子格不需要再设置相同条件的过滤。
-
-
普通条件
-
「普通条件」即对该单元格所在数据集的数据列定义过滤条件,只有某个数据列满足条件时,当前单元格的数据才会被选出来。
-
其中过滤条件由「可选列」、「操作符」、条件 组成,可以为各种形式,用户根据不同需要设置即可。「可选列」为当前单元格数据列所在的数据集的所有数据列,操作符为一些文字化的运算符,条件支持多种形式。如下图所示:
-
-
在制作报表时,若因某种需要使得数据集中的某些数据列无数据列名(即字段名为空),而这数据列拖入报表中展示数据是无影响可以正常显示数据的。但若该字段名为空且要作过滤时,设置过滤后,发现其过滤条件却是是无效的,此时可选择「列序号」作为「可选列」的条件,如下图所示:
-
条件中除一些如字符串、整型、日期等数据类型外,还包括公式、单元格、参数、数据列,其中公式、单元格、参数比较常见,数据列是指当前模板可用的所有数据集中的数据列。选择数据列,即需要满足的条件值为数据列中的所有值,当是多个值时,就以多个值过滤。
-
-
公式条件
-
若不是对数据列添加过滤条件,或者需要对数据列进行操作后再设置过滤条件,此时可以使用「公式条件」。
-
点击定义,出现公式编辑页面,如下图:
-
2.4 高级
-
选中单元格,选择报表主体右侧「单元格元素」面板中的「高级」或者双击单元格,选择高级,就可以对单元格进行高级设置,如下图所示:
-
排列顺序
-
设置数据列的排列顺序,包括「升序、降序、不排序」三种情况。
-
-
结果集筛选
-
设置结果集的显示,如显示前 N 个、后 N 个等。
-
-
自定义显示
-
自定义显示单元格的值,如可以输入 FineReport 公式修改单元格的显示值。默认值为「$$$」,代表单元格本身的值。
-
-
数据库中存储的数据为「FR 帆软软件」,将数据列拖曳至 A1 单元格。
-
双击 A1 单元格,选择高级,在自定义显示中插入公式:replace($$$,"FR","FineReport"),将 FR 替换为 FineReport,如下图所示:
-
-
-
保存模板,点击「分页预览」,数据显示为「FineReport 帆软软件」,如下图所示:
-
-
-
注意:如引用该单元格值,引用的自定义显示后的值,而非原实际值。
-
例:A1 单元格的实际值为「FR 帆软软件」,自定义显示后的值为「FineReport 帆软软件」,B1 单元格引用 A1 单元格的值为「FineReport 帆软软件」。
-
-
可伸展性
-
数据的伸展性,分为「横向可伸展」和「纵向可伸展」。
-
-
补充空白数据
-
补充空白数据,可以设置数据倍数,例如设置数据倍数为 10,不足 10 条的数据会自动补足到 10 条。如下图所示:
-
2.5 数据列常用过滤条件
2.5.1 过滤条件中使用nofilter
nofilter 的含义为不过滤,通常用于某个条件不成立的情况下过滤条件无效。
if(len($area)==0,nofilter,$area) 表示参数 area 为空,则不过滤,若不为空则以参数值进行过滤。如下图所示:
2.5.2 对某一列进行处理后再过滤
通常用于某列值比较特殊,截取该列的值中的某一部分进行过滤的情况。
比如我们要设置过滤订单 ID 前三位为left(订单ID,3)= 103`,意为从左边开始截取前三位等于 103 的值,在公式中可以直接使用列名,如下图所示:
2.5.3 过滤条件的与或
通常用于根据不同的情况使用不同的过滤条件。
例如:货主地区等于 area and 货主省份等于 province and 货主省城市等于 city ,当三个过滤条件都满足时过滤数据,如下图所示:
当货主地区为华东,货主省份为山东,货主城市为青岛,查询数据如下图所示:
3. 参数应用
3.1 参数入门
3.1.1 参数简介
参数指在设置或赋值不同的数值来实现一个目标结果,这些数值就是参数。为满足不同客户的使用需求,FR 设计器中引入了参数的概念。在FR 设计器中使用参数动态地过滤数据,实现用户与数据的实时交互。
-
参数可实现功能如下:
-
参数查询:指需要获取不同条件下数据。例如查询某地区的销售额,那么“地区”就可以作为一个参数来使用,传入不同的地区,就会有不同的结果展现出来。
-
实现参数查询步骤:
-
定义参数:设置参数名称,添加参数,根据实际应用场景的需要选择不同类型的参数。
-
参数添加控件:控件是参数实现查询的载体,选择控件类型,通过将控件和参数绑定,实现在控件中输入参数值,能够过滤并查询出用户想要查看的数据。
-
设置参数面板样式:通过设置参数界面中控件的位置,参数面板的位置,背景色等等来改变控件栏的展示效果。
-
-
3.2 参数命名
3.2.1 必须遵循的命名规则
1)不能以数字、$ 符号开头。
2)变量名只能是字母 (26个字母大小写都可)、数字 (0-9)、下划线(_)、(@) 或中文的组合,并且之间不能包含空格。
3)变量名中不能含有 ? * . - +/等字符和空格(如 ab--cd 这种格式)。
4)变量名建议不要使用编程语言的保留字,比如 true、false 等保留字。
5)变量名建议不要使用系统参数名称,否则会因为优先级调用系统参数,而非用户定义的参数,另外还可能存在引发系统参数紊乱的风险。系统参数内容可查看:系统参数
6)参数名称建议不要过长,过长可能会超过浏览器 url 长度限制导致预览出现问题。
3.2.2 经典命名规则
1)匈牙利命名法
该命名法是在每个变量名的前面加上若干表示数据类型的字符。基本原则是:变量名=属性+类型+对象描述。如i表示 int,所有i开头的变量名都表示 int 类型。s 表示 String,所有变量名以s开头的都表示 String 类型变量。
2)骆驼命名法
正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。驼峰命名法跟帕斯卡命名法相似,只是首字母为小写,如 userName。因为看上去像驼峰,因此而得名。
3)帕斯卡命名法,即 pascal 命名法
做法是首字母大写,如 UserName。
3.3 参数面板
3.3.1 组件设置
新建一张普通报表,进入参数面板,参数面板的属性如下图所示:
-
属性
-
「属性」Tab 下,参数面板的各设置项介绍如下表所示:
设置项 说明 组件名称 可自定义组件名称 标签名称 可自定义标签名称 背景 参数的默认背景色为灰色用户若需要参数界面的风格和报表风格相同或达到其他效果,可自定义参数面板的背景,其效与 纸张背景 效果相同 点击查询前不显示报表内容 1)勾选「点击查询前不显示报表内容」按钮在定义参数的情况下,直接预览则不显示报表,需要用户手动点击「查询」按钮,查询报表。2)不勾选「点击查询前不显示报表内容」按钮需给参数设置默认值,取消勾选「点击查询前不显示报表内容」按钮,点击预览,即可自动使用参数的默认值进行首次查询并展示报表。 注:设置「点击查询前显示报表内容」的同时要给参数设置默认值,否则在首次展示时会根据空值进行过滤 显示位置 参数界面的显示位置可以设置为靠左、居中以及靠右显示注:参数界面的显示位置以参数界面的宽度来靠左、靠右或者居中,而不是浏览器的页面宽度 尺寸 可自定义参数面板的设计宽度注:在参数面板中添加控件后,若最右侧控件所处的位置横坐标大于要修改的参数面板的「设计宽度」,则修改不成功
-
-
事件
-
参数面板的「事件」Tab 页如下图所示:
-
-
事件介绍
-
可为参数面板添加初始化后事件和点击事件:
-
-
初始化后事件:预览模板之后触发。
-
点击事件:是点击参数面板任意地方之后触发。
-
初始化后事件示例
-
新建普通报表,参数面板中添加「下拉框控件」,参数面板添加「初始化后事件」,如下图所示:
-
-
JavaScript 如下所示:
alert("123")
-
保存模板,点击「分页预览」,如下图所示:
3.3.2 调整参数界面大小
-
调整高度
-
在参数界面面板中,可以设置参数在 B/S 端的高度,如下图所示:
-
-
-
灰色部分为参数界面的边界,可以通过拖动灰色部分来调整参数界面的高度。
-
-
调整宽度
-
从属性表里面调整参数界面的宽度,默认设计宽度为 960,如下图所示:
-
3.3.3 隐藏参数面板
参数面板在预览时,可点击「显示隐藏按钮」对参数面板进行隐藏,如下图所示:
若用户需要整个参数面板完全隐藏(包括小箭头),在 URL 后面拼接参数 &__pi__=false,刷新预览,如下图所示:
注意:使用此方法后,普通报表将无法获取到给参数面板中控件赋的默认值。
3.4 参数分类
3.4.1 模板参数
-
概述
模板参数是只适用于当前报表的参数,需要与数据列的过滤条件结合使用。先通过数据集取出所有数据,再在报表中设置模板参数,在数据查询时使用模板参数过滤出有用的数据,适用于数据量小的情况。数据量大的情况,建议使用数据集参数进行过滤。
-
功能简介
-
文本框中输入「华东」,点击查询,只查询出报表中华东地区的销售信息。
-
-
示例
-
数据集准备
-
新建数据集 ds1,数据库查询对话框中写入 SQL 查询语句:SELECT * FROM 销量,取出销量表中的所有数据。如下图所示:
-
-
-
-
表格样式设计
-
A1~C1 单元格写入表格标题信息,选中 A1~C1 单元格,右侧属性面板选择「单元格属性>样式」,样式下拉框选择「预定义样式」,给标题设置一个「Head」类型的样式。如下图所示:
-
-
-
-
将数据集中的字段拖入到对应单元格中,选中 A2~C2 单元格,将字体居中,选中 A1~C2 单元格,给表格整体添加预定义样式默认的天蓝色内外框。如下图所示:
-
-
-
选中 C2 单元格,右侧属性面板选择「单元格元素>基本」,数据设置下拉框选择「汇总>求和」。如下图所示:
-
-
定义模板参数
-
菜单栏选择「模板>模板参数」,弹出模板参数设置对话框。如下图所示:
-
-
模板参数对话框点击增加按钮,新建一个模板参数,双击该参数将它重命名为「地区」,设置默认值为字符串「华东」。点击确定完成模板参数的定义。如下图所示:
-
如果想要修改模板参数名称,只能通过双击原名称进入编辑状态后进行修改,修改完后点击「确定」即可,如下图所示:
-
参数添加控件
-
点击参数面板的「编辑」按钮,进入参数面板编辑界面。如下图所示:
-
-
右上角控件设置面板会显示没有添加控件的参数,点击「地区」或者点击「全部添加」,将参数的默认控件添加到参数面板。如下图所示:
-
注意:参数与控件是通过参数名称进行绑定的,也就是说当控件名称与参数名称一致时,参数与控件就进行了绑定,即在 Web 端给控件赋值就相当于给参数赋值。
-
参数「地区」的默认控件添加到参数面板后,效果如下图所示:
-
注意:如果不想点击「全部添加」或「参数」快捷添加默认控件,也可以直接从控件栏中将控件拖拽到参数面板中,修改控件的名称与参数名称一致,即可将控件与参数进行绑定。
-
点击自定义控件的「编辑」按钮,选择「文本控件」类型,让用户自行输入参数值。如下图所示:
-
将查询按钮往左边拖拽,形成紧凑式布局,让控件面板更加美观。再次点击参数面板的「编辑」按钮,完成参数面板的设置。如下图所示:
-
数据过滤
-
设置好控件后还不能实现根据文本框中输入的参数值查询指定地区的销售信息。因为表格的数据来源于数据集,数据集中的数据是将数据库表中的数据全部取出来的,所以需要给表格添加「数据过滤条件」,才可以查询出控件输入的参数值的信息。
-
双击 A2 单元格,在弹出的数据列对话框中选择「过滤」,添加一个普通条件,设置数据列为地区,操作符为等于,值类型修改为参数类型,选择 $地区,点击「增加」按钮,点击「确定」。即将地区单元格与参数绑定起来。如下图所示:
如果参数为空展示所有数据:
过滤条件使用公式: if($area = '',NOFILTER,$area)
3.4.2 数据集参数
-
概述
-
类似通信、监控行业,每天都有海量数据生成,数据库表中总数据量非常大,而报表中往往只要获取当天的几百条数据就可以了。
-
如果使用模板参数,就需要先取出所有数据,再进行过滤,取数+过滤,将消耗大量时间,极大影响报表的查询效率。而数据集参数在数据库查询时就已经完成了数据过滤,所以使用数据集参数设计的查询报表会比使用模板参数的效率高。
-
-
功能简介
-
定义数据集时,通过在 SQL 语句中添加 ${para}格式的内容即可定义数据集参数。定义完成后,用$参数名即可引用,使用方法和模板参数一致。如下图所示,下拉框选择「华东」,点击查询,只查询出报表中华东地区的销售信息。
-
-
使用说明
-
数据集 SQL 查询语句中可以使用参数宏 ${}动态地生成过滤条件,${} 执行结果与 SQL 语句拼接起来形成最终的查询语句,传递给数据库执行。SQL 语句中可以使用多个 ${},定义多个参数使用。
-
使用${} 定义参数时,{ }内写入的内容即为定义参数的内容,其中可以使用 FineReport 所有内置的函数,如 if 函数、len 函数等。{ }中除了 FineReport 内置的函数名、常量、字符串拼接语法外,其他变量就是数据集参数。
-
如:SELECT * FROM 销量 where 地区 = '${area}' 中定义的数据集参数为 area。
-
带有数据集参数的 SQL 语句写好后,点击数据集定义界面「预览」按钮时,若显示出定义的数据集参数。则表明数据集参数定义成功。如下图所示:
-
在参数位置输入值后点击确定,参数值就会代入 SQL 语句中,查询出数据。
-
-
-
如下给出几种常见的应用方式,用户在使用时按实际场景调整即可。注意,因为数据集参数用在 SQL 查询语句中,所以在使用时,特别要注意语法和对应数据库类型的 SQL 语法匹配。
-
-
简单应用
-
如要定义一个地区参数,通过此参数过滤数据。新建数据集时,就可以在 SQL 查询语句中定义一个数据集参数 area:SELECT * FROM 销量 where 地区 = '${area}'
-
SQL 语句中,其他内容都是确定的,唯有 area 不确定,当 area 对应不同值时,数据集也将查询出不同地区的数据。
-
如果要实现多选查询,就可以结合 SQL 语句 in 的用法定义一个参数,如:SELECT * FROM 销量 where 地区 in ('${area}')
-
输入参数值时注意要和数据库语法一致,如查询华东华北的数据 SQL 语法为 SELECT * FROM 销量 where 地区 in ('华东','华北'),输入的参数值形式应该为 华东','华北,这样加上定义时的 ('${area}') 就会拼接成正确的语法 '华东','华北'。
-
-
带公式的应用
-
定义数据集参数时,可以使用 FineReport 所有内置函数。如需要定义一个地区参数,当地区为空时,查询所有地区的数据;当地区值不为空时,查询对应地区的数据:
-
SELECT * FROM 订单 where 1=1 ${if(len(area) == 0,"","and 货主地区 = '" + area + "'")}
-
定义时,先使用函数 len 获取参数的长度,然后使用 if 函数进行判断
-
如果 area 参数的长度为 0,则内容为空,SQL 拼接后为 SELECT * FROM 订单 where 1=1;
-
如果 area 参数的长度不为 0,则将字符串 and 货主地区 = '、参数area、'拼接成一句 SQL ,如area的值为华东,那么参数定义部分的执行结果为and 货主地区='华东',完整的 SQL 语句就变成:SELECT * FROM 订单 where 1=1 and 货主地区='华东'
-
-
定义多个参数
-
如果在数据过滤中,需要多个过滤条件,则可以定义多个数据集参数,如:
-
SELECT * FROM 订单 where 1=1 ${if(len(area) == 0,"","and 货主地区 = '" + area + "'")} ${if(len(province) == 0,"","and 货主省份 = '" + province + "'")}
-
其中使用了两次 ${},定义了两个数据集参数 area 和 province
-
-
嵌套应用
-
定义数据集参数时,也可以通过一些逻辑判断嵌套定义多个数据集参数。如:
-
SELECT * FROM 销量 where 1=1 ${if(len(area)!=0," and 地区='"+area+"'",if(len(product)=0,""," and 产品='"+product+"'"))}
-
if 函数是 FineReport 内置的公式,变量 area 和 product 是数据集参数,如果len(area)!=0,即 area 参数不为空,即以
-
SELECT * FROM 订单 where 1=1 and 货主地区='area'查询,如地区为空,则要判断 len(product),若product参数为空,则不拼接任何查询条件,即查出所有,否则以 SELECT * FROM 订单 where 1=1 and 产品='product' 查询。
-
-
示例
-
定义数据集参数
-
新建数据集 ds1,数据库查询对话框中写入 SQL 查询语句 SELECT * FROM 销量 WHERE 地区='${area}',相当于在数据库查询语句中定义一个数据集参数area。点击右下角「刷新」按钮,下方数据集参数管理面板会显示已经新建好的数据集参数area,设置它的默认值为华东。点击「确定」,即同时完成了数据准备和定义数据集参数的工作。如下图所示:
-
-
-
表格样式设计
-
如下图所示设置表格样式,其中给表格选择预定义样式 Head类型的样式,标题字体自动居中。如下图所示:
-
-
将数据集中的字段拖入到对应单元格中,字体居中,给表格整体添加预定义样式默认的天蓝色内外框。如下图所示:
-
选中 C2 单元格,右边属性面板选择「单元格元素>基本」。数据设置下拉框选择汇总>求和。如下图所示:
-
参数添加控件
-
点击参数面板的「编辑」按钮,进入参数面板设置界面。如下图所示:
-
-
右上角控件设置面板会显示没有添加控件的参数,点击 「area 」或者点击「全部添加」,将参数的默认控件添加到参数面板。如下图所示:
-
注意:参数与控件是通过参数名称进行绑定的,也就是说当控件名称与参数名称一致时,参数与控件就进行了绑定,即在 Web 端给控件赋值就相当于给参数赋值。
-
-
参数area的默认控件添加到参数面板后,效果如下图所示:
-
注意:如果不想点击「全部添加」或「参数」快捷添加默认控件,也可以直接从控件栏中将控件拖拽到参数面板中,修改控件的名称与参数名称一致,即可将控件与参数进行绑定。
-
-
-
点击自定义控件的「编辑」按钮,选择下拉框控件类型,让用户通过下拉框选择参数值。如下图所示:
-
-
要想报表预览时点击「下拉框」可以出现参数值的选项,则需要设置下拉框的数据字典为销量表下的地区字段。
-
参数面板选中「下拉框控件」,右边属性面板选择「属性>数据字典」,点击数据字典「编辑」按钮,弹出数据字典设置对话框。数据字典的类型设置为数据库表,数据库为 FRDemo ,选择数据库表为销量,列名实际值和显示值都为地区。如下图所示:
-
注意:控件绑定数据字典时,当数据集中有和控件同名的参数时,不要使用,否则将造成循环引用,使得模板出错,如此处 ds1中有地区字段,和参数名同名 。
-
点击「标签控件」,将控件值命名为地区:。如下图所示:
-
将查询按钮往左边拖拽,形成紧凑式布局,让控件面板更加美观。再次点击参数面板的「编辑」按钮,完成参数控件的设置。如下图所示:
4. 参数控件应用
4.1 控件与参数的绑定方式
-
在使用参数控件时,当已经完成全局参数、模板参数或数据集参数设置后,编辑参数面板,选择全部添加即可添加与参数绑定的参数控件,如下图所示:
-
编辑参数面板,选择需要的控件,设置参数控件的名称为对应的参数名也可以完成控件与参数绑定。例如:设置模板参数为货主地区,编辑参数面板,拖入下拉框控件,设置控件名称为货主地区。如下图所示:
4.2 文本控件
-
应用场景
-
参数面板处可以通过该控件输入文本信息,键入查询参数,如下图所示:
-
如何添加
-
将参数面板控件工具栏中的「文本控件」拖入到参数面板中,如下图所示:
-
-
属性设置
-
「文本控件」的属性设置界面如下图所示:
-
各属性设置项的详细介绍如下:
4.3 标签控件
-
应用场景
-
如何添加
-
将参数面板控件工具栏中的「标签控件」拖入到参数面板中,如下图所示:
-
-
属性设置
-
「标签控件」的属性设置界面如下图所示:
-
-
各属性设置项的详细介绍如下:
4.4 查询按钮控件
-
应用场景
-
「查询按钮」本质上也是一个按钮控件,但相比按钮控件,多了查询的功能。即「查询按钮」就是一个内置了查询功能的按钮控件。「查询按钮」只可应用在参数查询场景中,添加按钮后,点击按钮即可触发查询。如下图所示:
-
-
如何添加
-
一般定义了参数之后,参数面板默认会显示出添加的参数,点击即可添加一组参数查询控件,其中就包括了「查询按钮」。如下图所示:
-
-
除了以上自动添加的方式,用户还可以通过拖入的方式添加。如下图所示:
4.5 下拉框控件
-
应用场景
-
添加方式
-
将「下拉框控件」拖入到参数面板中,如下图所示:
-
属性设置
4.6 下拉复选框控件
-
应用场景
-
添加方式
-
将参数面板控件工具栏中的「下拉复选框控件」拖入到参数面板中,如下图所示:
-
-
属性设置
4.7 日期控件
-
应用场景
-
报表中添加日期查询控件,可以查询指定日期区间内的报表数据。如下图所示:
-
添加方式
-
将参数面板控件工具栏中的「日期控件」拖入到参数面板中,如下图所示:
-
-
属性设置
4.8 数字控件
-
应用场景
-
参数面板处可以通过该控件输入数字信息(整数、负数、小数),键入查询参数,如下图所示:
-
-
添加方式
-
属性设置