历史版本12 :计算入门指南 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

本文介绍如何在 FineReport 中使用计算功能。

将告诉用户何时可使用计算、如何使用公式编辑器。

如果刚接触 FineReport 的用户,不了解函数,则非常适合从这里着手。

2. 为什么使用计算编辑

通过计算,可以根据数据源中已存在的数据创建新数据,并对数据执行计算。

这样可以执行复杂的分析,并且可以引用计算结果进行可视化模板制作。

3. 何时使用计算编辑

计算允许利用数据源中已存在的数据创建新数据。

有很多原因,可以使用函数进行计算。可能包括:

下面给出使用计算的情景。

2.1 数据源中缺少分析所需的数据

内置 FRDemo 数据表「S订单明细」中有「单价」、「数量」、「进价」、「折扣」字段,但需要计算每个订单ID的「利润」以及所有订单 ID 的「平均利润」,则可以使用类似于以下内容的公式计算,如下图所示:

利润:C2 * (B2 - D2) * (1 - E2)

平均利润:average(F2)

2022-11-17_10-43-44.gif

结果如下图所示:


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公式