1. 概述
本文介绍如何在 FineReport 中使用计算功能。将告诉用户何时可使用计算、如何使用公式编辑器。如果刚接触 FineReport 的用户,不了解函数,则非常适合从这里着手。
1.1 视频教程
2. 为什么使用计算
通过计算,可以根据数据源中已存在的数据创建新数据,并对数据执行计算。
这样可以执行复杂的分析,并且可以引用计算结果进行可视化模板制作。
3. 何时使用计算
计算允许利用数据源中已存在的数据创建新数据。
有很多原因,可以使用函数进行计算。可能包括:
2.1 数据源中缺少分析所需的数据
内置 FRDemo 数据表「S订单明细」中有「单价」、「数量」、「进价」、「折扣」字段,但需要计算每个订单ID的「利润」以及所有订单 ID 的「平均利润」,则可以使用类似于以下内容的公式计算,如下图所示:
利润:C2 * (B2 - D2) * (1 - E2)
平均利润:average(F2)
结果如下图所示:
2.2 想要在组件中转换数值
例如可能要将字符串「2021/02/07星期三」转换为时间型,输入公式:TODATE("2021/02/07星期三","yyyy/MM/ddEEE","zh"),如下图所示:
2.3 想要设置图表样式颜色
例如设置表格隔行变色。
详情参见:隐藏行后隔行变色
4. 函数计算支持的使用位置
4.1 在公式编辑框中使用函数
FineReport 中可以使用「公式编辑器」的位置有如下几个:
使用位置 | 图示 |
---|---|
条件属性 | 示例:隔行/列设置背景色 |
数据字典 | 示例:数据字典 2.4 节 |
筛选过滤 | |
填报设置提交条件 | |
图表标题 | |
图表轴定义 | |
定义图表单元格数据源 | |
报表页眉与页脚 | |
单元格内容提示 |
4.2 在 SQL 编辑框中使用函数
4.2.1 SQL 中使用普通函数
在 SQL 中使用公式,可以将公式放在 ${} 中,例如参数为空返回全部的SQL语句:
SELECT * FROM 订单 where 1=1 ${if(len(area) == 0,"","and 货主地区 = '" + area + "'")} ${if(len(province) == 0,"","and 货主省份 = '" + province + "'")}
注:SQL中支持使用自定义函数,但无法正常使用「查看执行SQL」功能。
参数/公式 | 说明 |
---|---|
area 和 province | 自定义的参数 |
if(len(area) == 0,"","and 货主地区 = '" + area + "'") | 如果len(area)!=0,即 area 参数不为空,比如说 area 的值为华东,那么 IF 语句的执行结果为and 货主地区='华东',然后再把这句话拼接到 SQL 语句当中,SQL 语句就变成: SELECT * FROM 订单 where 1=1 and 货主地区='华东' and 货主省份='江苏' |
4.2.2 SQL 中使用 SQL 函数
SQL 语句其实是字符串。因此可以从数据库调用一个 SQL 语句作为字符串进行取数。此时即用到 SQL函数,例如公式:
=sql("FRDemo","SELECT * FROM 销量 ",1,1) 输出结果为华东
同时也可以把这个字符串用在 SQL 公式中作为字符串执行,因此创建数据集时可以定义为:SELECT * FROM where 地区='${sql("FRDemo","SELECT * FROM 销量 ",1,1)}'
也就是 SELECT * FROM where 地区='华东'。
4.3 在 JS 编辑框中使用函数
作为一款 B/S 产品,browser 端的 JavaScript 是必不可少的。
如何在 JS 编辑框中使用公式详情参见:在JS中使用FR公式