1. 概述
FineReport 中使用函数需要用到很多的操作符,操作符不仅包含很多运算符,还包括一些报表特有的操作符。
1.1 视频教程
2. 运算符类型
运算符用于指定要对公式中的元素执行的计算类型。有默认计算顺序,但可以使用括号更改此顺序。
FineReport 中有四种不同类型的计算运算符:算术、比较、逻辑、连接。
2.1 算数运算符
执行基本的数学运算,如加、减、乘、除等,在公式中使用以下算术运算符:
算数运算符 | 说明 | 操作对象 | 示例 |
---|---|---|---|
+ | 加号 | 数或单元格 | 2+3 |
- | 减号 | 数或单元格 | A1-B1 |
* | 乘号 | 数或单元格 | A1*2 |
/ | 除号 | 数或单元格 | A3/3 |
% | 取余,求余数。除数需要为整数 | 数或单元格 | 5%2为1 |
^ | 乘方 | 数或单元格 | 3 ^ 2=9 |
2.2 比较运算符
可以使用下列运算符比较两个值。使用这些运算符比较两个值时,结果为逻辑值 TRUE 或 FALSE。
比较运算符 | 说明 | 操作对象 | 示例 |
---|---|---|---|
== | 等于 | 数或变量 | A==2 |
!= | 不等于 | 数或变量 | A!=null 即 A 不为空值 |
> | 大于 | 数或变量或单元格 | 3>2 |
< | 小于 | 数或变量或单元格 | A1<2 |
>= | 大于等于 | 数或变量或单元格 | A1>=2 |
<= | 小于等于 | 数或变量或单元格 | A1<=2 |
2.3 逻辑运算符
逻辑运算符 | 说明 | 操作对象 | 示例 |
---|---|---|---|
&& | 条件与,需要两个操作数的值都是 true 时,才取值true | 条件 | 销售额>=10&&销售人数>=2 即如果销售额和销售人数同时满足指定条件则返回 true |
|| | 条件或,只要两个操作数中有一个是 true 取值就为 true | 条件 | 销售额>=10||销售人数>=2 即如果销售额和销售人数满足任一指定条件则返回 true |
! | 取非,即取条件的反面 | 条件 | !A,如果 A 是 true,!A 是 false |
2.4 连接运算符
可以使用 + 运算符对文本字符进行合并。
例如:将文本字段「abc」和「def」拼接在一起,当然可以使用 CONCATENATE,但更简单的方案是直接使用「+」,如下图所示:
3. 其他操作符
操作符 | 说明 | 操作对象 | 示例 |
---|---|---|---|
: | 用于取一段连续范围的单元格 | 单元格 | 如 A1:B3 即取 A1 到 B3 这个单元格集合 |
& | 取单元格所在行列 | 单元格 | &A2 获取单元格 A2 扩展出来的每个数据的位置 |
. | 引用对象或方法 | 对象或方法 | ds1.select(销售员) 数据集 ds1 取出内置 FRDemo 数据库中的「销量」表,返回数据集 ds1 销售员列中的所有值。 详细使用请参见:数据集函数 |
$ | 参数引用符或绝对定位 | 参数或绝对定位 | 层次坐标专用,详情参见:条件汇总 |
# | 列序号 | 列 | ds1.select(#1) 即取数据集第一列数据(注:数据表中的第一列而不是放在报表单元格第一列。) |
${} | 宏定义 | 参数 | 如在 SQL 中SELECT * FROM 销量 ${"where 地区='华东'"},会先计算出 ${} 里面的值,然后拼接出完整的SQL 语句 该示例 SQL其实就是 SELECT * FROM 销量 where 地区='华东' 其他宏定义可参考:函数计算组成和语法 |
Cell[] | 层次坐标操作符 | 单元格 | A2[A1:-1] 详情参见:层次坐标概念 |
$$$ | 表示当前单元格的值即当前值 | 有数据的单元格 | if($$$=0,"",$$$) 表示如果当前值为 0 则显示空,否则显示为当前值 |
\\ | 引用“\”,值即为\ | 单元格 | 如 \" 表示引用 " 号 |
\n | 换行符 | 字符串 | 如字符串 aabb,希望 bb 换行显示,则填写 aa\nbb |
[,] | 定义数组 | 数组 | 例如:=indexofarray(["a","b","c","d"],3) 获取数组中第三个位置的数据即返回值为 c 详情参见:数组函数概述 |
"" | 定义字符串 | 字符串 | |
() | 优先计算 | 单元格 | |
^ | 乘方 | 单元格/数组 | |
~ | FVS可视化看板引用表格数据 决策报表引用表格数据 | 单元格 | 详情参见:FVS获取表格数据 、决策报表数据源 |
! | 跨sheet引用 | 单元格 | 详情参见:图表跨sheet引用单元格数据 |
{} | 过滤 | 单元格/列 | 详情参见:条件计数 |
{单元格} | 获取当前页单元格数据 | 单元格 | 例如 {A2} COUNT({A2}),则表示计算当前页数据行数: |
4. 公式运算的次序
在某些情况下,执行计算的顺序可能会影响公式的返回值,因此,必须了解如何确定顺序以及如何更改顺序以获取所需结果。
4.1 运算符优先级
如果一个公式中有若干个运算符,FineBI 将按下表中的次序进行计算。 如果一个公式中的若干个运算符具有相同的优先顺序(例如,如果一个公式中既有乘号又有除号),则 FineBI 将按照以下方向计算各运算符。
优先级 | 运算符 | 含义 | 使用形式 | 结合方向 |
---|---|---|---|---|
1 | - | 负号 | -表达式 | 右到左 |
2 | ^ | 乘方 | 表达式^表达式 | 左到右 |
3 | * | 乘 | 表达式*表达式 | |
/ | 除 | 表达式/表达式 | ||
% | 取余 | 表达式%表达式 | ||
4 | + | 加 | 表达式+表达式 | |
- | 减 | 表达式-表达式 | ||
5 | > | 大于 | 表达式>表达式 | |
< | 小于 | 表达式<表达式 | ||
>= | 大于等于 | 表达式>=表达式 | ||
<= | 小于等于 | 表达式>=表达式 | ||
6 | =、== | 等于 | 表达式=表达式 表达式==表达式 | |
!= | 不等于 | 表达式!=表达式 | ||
7 | && | 逻辑与 | 表达式&&表达式 | |
8 | || | 逻辑或 | 表达式||表达式 |
4.2 使用括号计算方式
若要更改计算的顺序,需要将公式中要先计算的部分用括号括起来。
例如,下面的公式生成 11,因为在加法之前计算乘法。 该公式先将 2 与 3 相乘,然后再将 1、4 与结果相加。
=1+2*3+4
但是,如果用括号对该语法进行更改,则会先将 1 与 2 相加在一起,然后再用结果乘以 3 ,再加上 4 得到 13。
=(1+2)*3+4