1. 概述编辑
1.1 版本
FineBI 版本 | JAR 包 | 功能变动 |
---|---|---|
5.1.11 | 2021-04-02 | 实时数据公式校验加强 |
1.2 应用场景
函数计算格式 已经说明在 FineBI 中使用函数的计算组成以及基础的计算语法,但有时用户也会遇到书写公式报错的问题,可根据提示完成公式的正确书写。
1.3 功能简介
本文将详细介绍运算符和表达式的语法,帮助用户了解 FineBI 的公式校验方案,正确有效的写出需要的函数。
2. 运算符语法编辑
2.1 +
概念 | + 运算符在应用于数字时表示相加,在应用于字符串时表示串联。 |
---|---|
支持组合类型 | 除日期字段+日期字段之外,支持其他任意类型组合 |
返回结果类型 | 参数中存在文本字段,结果为文本字段 日期+数值则为日期字段 如果全是数值则为数值字段 |
不合法提示:「不支持日期+日期操作」,如下图所示:
2.2 -
概念 | - 运算符在应用于数字时表示相减,在应用于表达式时表示求反。 |
---|---|
支持组合类型 | 两个数值类型或者两个日期类型字段 注:不支持数值字段-日期字段。 |
返回结果类型 | 日期类型-时期类型返回结果为时间戳 日期类型-数值类型 返回结果为日期类型 其余返回结果为数值类型 |
不合法提示:
「不支持数值-日期操作」,如下图所示:
其他非法的减法:「文本字段不能作为减数或被减数」,如下图所示:
2.3 /
概念 | / 运算符表示数值相除 |
---|---|
支持组合类型 | 两个数值类型参数 |
返回结果类型 | 数值类型 |
不合法提示:「操作符两端必须为数值类型」,如下图所示:
2.4 *,%,^
概念 | * 运算符表示数值相乘 % 运算符返回除法运算的余数 ^ 乘方计算数字的指定次幂 |
---|---|
支持组合类型 | 两个数值类型参数 |
返回结果类型 | 数值类型 |
不合法提示:「操作符两端必须为数值类型」,如下图所示:
2.5 >,<,<=,>= (比较)
概念 | >(大于) <(小于) >=(大于或等于) <=(小于或等于) |
---|---|
支持组合类型 | 两个相同类型参数 |
返回结果类型 | 布尔类型 |
不合法提示:「操作符两端字段类型必须相同」,如下图所示:
2.6 =,!=,== (比较)
概念 | == 或 =(等于) != (不等于) |
---|---|
支持组合类型 | 两个相同类型参数 或者参数中有 null |
返回结果类型 | 布尔类型 |
不合法提示:「操作符两端字段类型必须相同」,如下图所示:
3. 表达式语法编辑
FineBI 的函数表达式写法参见:表达式语法
当用户使用以下书写方式时,会出现报错提示。
3.1 运算符表达式不完整
例如用户书写如下的表达式:ABS(合同金额)+,则会报错「语法错误,缺少标示符」:
3.2 字符错误
例如需要新增一列,该列全部赋值为 1,此时输入 "1,由于缺少一半英文双引号,会出现如下报错「字符错误」:
3.3 语法错误
即其他的语法错误。
4. 具体函数类型不合法提示编辑
2.1 文本函数
函数 | 合法性 | 结果类型 | 不合法提示 |
---|---|---|---|
LEN | 一个任意类型参数 | 数值 | LEN不符合 (任意类型) 的参数要求 |
CHAR | 一个数值类型参数 | 文本 | CHAR不符合 (数值) 的参数要求 |
CODE | 一个文本类型参数 | 数值 | CODE不符合 (文本) 的参数要求 |
REPLACE |
| 文本 | REPLACE不符合 (任意类型,任意类型,任意类型) 或 (任意类型,数值,数值,任意类型) 的参数要求 |
STARTWITH | 两个任意类型参数 | bool | STARTWITH不符合 (任意类型,任意类型) 的参数要求 |
ENDWITH | 两个任意类型参数 | bool | ENDWITH不符合 (任意类型,任意类型) 的参数要求 |
EXACT | 两个任意类型参数 | bool | EXACT不符合 (任意类型,任意类型) 的参数要求 |
INDEXOF | 两个参数,第一个为任意类型,第二个为数值 | 文本 | INDEXOF不符合 (任意类型,数值) 的参数要求 |
REPEAT | 两个参数,第一个为任意类型,第二个为数值 | 文本 | REPEAT不符合 (任意类型,数值) 的参数要求 |
LEFT | 两个参数,第一个为任意类型,第二个为数值,可缺省 | 文本 | LEFT不符合(任意类型) 或 (任意类型,数值) 的参数要求 |
RIGHT | 两个参数,第一个为任意类型,第二个为数值,可缺省 | 文本 | RIGHT不符合(任意类型) 或 (任意类型,数值) 的参数要求 |
TODOUBLE | 单任意类型参数 | 数值 | TODOUBLE不符合 (任意类型) 的参数要求 |
TOINTEGER | 单任意类型参数 | 数值 | TOINTEGER不符合 (任意类型) 的参数要求 |
LOWER | 单文本参数 | 文本 | LOWER不符合 (文本) 的参数要求 |
TRIM | 单文本参数 | 文本 | TRIM不符合 (文本) 的参数要求 |
UPPER | 单文本参数 | 文本 | UPPER不符合 (文本) 的参数要求 |
CONCATENATE | 多个任意类型参数 | 文本 | -- |
MID | 第一个参数为任意类型,第二个,第三个为数值 | 文本 | MID不符合 (任意类型,数值,数值) 的参数要求 |
REGEXP | 第一个参数为文本,二个个参数为文本 | BOOL | REGEXP不符合 (文本,文本) 的参数要求 |
FORMAT | 第一个参数为日期,第二个参数为文本 | 文本 | FORMAT不符合 (日期,文本) 的参数要求 |
FIND | 第一个参数任意类型 第二个参数任意类型 第三个缺省参数数值 | 数值 | FIND不符合 (任意类型,任意类型) 或 (任意类型,任意类型,数值) 的参数要求 |
2.2 日期函数
函数 | 合法性 | 结果类型 | 不合法提示 |
---|---|---|---|
DATE | 三个数值参数 | 日期 | DATE不符合(数值,数值,数值)的参数要求 |
DATEDELTA | 两个参数 第一个日期或文本类型参数 第二个参数为数值 | 日期 | 不符合(日期/文本,数值)的参数要求 |
MONTHDELTA | 两个参数 第一个日期或文本类型参数 第二个参数为数值 | 时间 | |
YEARDELTA | 两个参数 第一个日期或文本类型参数 第二个参数为数值 | 日期 | |
DATEDIF | 三个参数 第一、二个日期或文本类型参数 第三个是文本 | 数值 | DATEDIF不符合(日期/文本,日期/文本,文本)的参数要求 |
DATESUBDATE | 三个参数 第一,二个日期或文本类型参数 第三个是文本 | 数值 | DATESUBDATE不符合(日期/文本,日期/文本,文本)的参数要求 |
DATETONUMBER | 一个日期或文本类型参数 | 数值 | DATETONUMBER不符合(日期/文本)的参数要求 |
DAYVALUE | 一个日期或文本类型参数 | 数值 | DAYVALUE不符合(日期/文本)的参数要求 |
DAYSOFMONTH | 一个日期或文本类型参数 | 数值 | 不符合(日期/文本)的参数要求 |
DAYSOFQUARTER | 一个日期或文本类型参数 | 数值 | |
DAYSOFYEAR | 一个日期或文本类型参数 | 数值 | |
YEAR | 一个缺省日期或文本类型参数 | 数值 | #函数名#不符合() 或 (日期/文本)的参数要求 |
WEEK | 一个缺省日期或文本类型参数 | 数值 | |
DAY | 一个缺省日期或文本类型参数 | 数值 | |
HOUR | 一个缺省日期或文本类型参数 | 数值 | |
MINUTE | 一个缺省日期或文本类型参数 | 数值 | |
MONTH | 一个缺省日期或文本类型参数 | 数值 | |
SECOND | 一个缺省日期或文本类型参数 | 数值 | |
TIME | 三个数值参数 | 时间 | |
TODATE |
| 时间 | TODATE不符合(任意类型) 或 (文本,文本)的参数要求 |
NOW | 无参 | 时间 | NOW不符合()的参数要求 |
TODAY | 无参 | TODAY不符合()的参数要求 | |
WEEKDATE | 四个数值参数 | 时间 | WEEKDATE不符合(数值,数值,数值,数值)的参数要求 |
WEEKDAY | 一个日期或文本类型参数 | 数值 | WEEKDAY不符合(日期/文本)的参数要求 |
2.3 数学和三角函数
函数 / 公式名 | 合法性 | 返回类型 | 公式不合法提示 |
---|---|---|---|
PI | 一个数值类型参数,可缺省 | 数值 | PI不符合(数值)或()的参数要求 |
CEILING | 单数值参数 | 数值 | #函数名#不符合(数值)的参数要求 |
Floor | |||
INT | |||
SQRT | |||
LN | |||
SQRT | |||
ABS | |||
ACOS | |||
ASIN | |||
ATAN | |||
LOG10 | |||
SIN | |||
TAN | |||
COS | |||
EXP | |||
DEGREES | |||
SIGN | |||
RADIANS | |||
RAND | 无参 | 数值 | RAND不符合()的参数要求 |
MIN | 大于0个数值参数 | 任意类型 | #函数名# 不符合所有参数为相同类型的要求 |
MAX | |||
RANDBETWEEN | 两个数值参数 | 数值 | #函数名#不符合(数值,数值)的参数要求 |
MOD | |||
POWER | |||
ROUND | |||
ATAN2 | |||
PROMOTION | |||
LOG | 第一个参数数值,第二个缺省数值 | 数值 | #函数名#不符合(数值,数值)或(数值)的参数要求 |
TRUNC |
2.4 逻辑函数
函数 | 公式合法性 | 结果类型 | 不合法提示 |
---|---|---|---|
AND | 参数为 bool 类型或数值类型 | bool | AND的参数类型必须为布尔类型或数值类型 |
OR | 参数为 bool 类型或数值类型 | bool | OR的参数类型必须为布尔类型为bool类型或数值类型 |
IF | 三个参数,第二个和第三个参数相同类型,第一个为 bool 类型或数值类型 | 返回结果参数中第一个非空的参数类型(if,函数,第二个和第三个参数为非返回值参数) | IF表达式的第一个参数不符合布尔类型为bool类型或数值类型 IF表达式的结果类型必须相同 |
SWITCH | 参数个数至少3个,且结果参数类型一致 | 返回结果参数中第一个非空的参数类型(switch函数,第2n+1个参数是返回参数n>0) | SWITCH表达式中的结果类型必须相同 |
||、&& | 参数为bool类型或数值类型 | bool | #符号#只能连接两个布尔类型为bool类型或数值类型的表达式 |
2.5 其他函数
函数 | 合法性 | 结果类型 | 不合法提示 |
---|---|---|---|
ISNULL | 单个任意类型参数 | bool | ISNULL不符合(任意类型)的参数要求 |
NVL | 大于0个参数需统一类型 | 排除空(null) ,如果其他返回结果参数的类型相同,则返回结果参数中第一个非空且非空字符串 的参数类型(NVL函数,所有参数都是返回参数) | NVL不符合所有参数为相同类型的要求 |
2.6 聚合函数
函数 / 公式名 | 合法性 | 结果类型 | 不合法提示 |
---|---|---|---|
SUM_AGG | 单个数值类型参数 | 数值 | #函数名#不符合 (数值) 的参数要求 |
AVG_AGG | |||
VAR_AGG | |||
MEDIAN_AGG | |||
STDEV_AGG | |||
PERCENTILE_AGG | 两个数值类型参数,第二个参数必须为常量 | 数值 | PERCENTILE_AGG不符合 (数值,数值) 的参数要求 PERCENTILE_AGG第二个常量数值类型参数必须在0到1之间 |
MAX_AGG | 单个任意类型参数 | 同参数类型 | #函数名#不符合 (任意类型) 的参数要求 |
MIN_AGG | |||
APPROX_COUNT_AGG | 单个任意类型参数 | 数值 | #函数名#不符合 (任意类型) 的参数要求 |
COUNT_AGG | |||
COUNTD_AGG |
聚合函数组合场景下的不合法报错:
错误代码 | 含义 | 举例 | 不合法提示 |
---|---|---|---|
61500002 | 明细过滤后的指标不符合聚合函数 | ABS(字段),字段进行了明细过滤 | #函数名#明细过滤后的指标仅支持聚合函数 |
61500003 | 无法将聚合参数和非聚合参数混合使用 | SUM_AGG(字段1)+字段2 | 无法将聚合参数和非聚合参数混合使用 |
61500004 | 聚合函数不能嵌套聚合函数 | SUM_AGG(SUM_AGG(字段))) | #函数名#聚合函数不能嵌套聚合函数 |
2.7 快速计算函数
函数 | 合法性 | 结果类型 | 不合法提示 |
---|---|---|---|
SAME_PERIOD | 第一个参数为聚合函数 第二个为缺省文本参数,缺省值为"Y" | 数值 | SAME_PERIOD不符合(数值) 或 (数值,文本) 的参数要求 SAME_PERIOD第二个常量文本类型参数必须为"Y","M","W"(不区分大小写) |
ACC_SUM | 第一个参数为聚合函数 第二个为缺省数值参数,缺省值为0 | ACC_SUM不符合(数值) 或 (数值,数值) 的参数要求 ACC_SUM第二个常量数值类型参数必须为0,1 | |
PREVIOUS_PERIOD | 第一个参数为聚合函数 | PREVIOUS_PERIOD不符合(数值) 的参数要求 | |
PERIOD_ANLS | 第一个参数为聚合函数 第二个为缺省文本参数,缺省值为"Y" | PERIOD_ANLS不符合(数值) 或 (数值,文本) 的参数要求 PERIOD_ANLS第二个常量文本类型参数必须为Y","M","W"(不区分大小写) | |
PERIOD_TD | 第一个参数为聚合函数 第二个为缺省文本参数,缺省值为"Y" | PERIOD_TD不符合(数值) 或 (数值,文本) 的参数要求 PERIOD_TD第二个常量文本类型参数必须为Y","M","W"(不区分大小写) | |
RANK_ANLS | 第一个参数为聚合函数 第二个为缺省数值参数,缺省值为0 第三个为缺省文本参数,缺省值为"desc" | RANK_ANLS不符合(数值) 或 (数值,数值) 或 (数值,文本) 或 (数值,数值,文本)的参数要求 RANK_ANLS第二个常量数值类型参数必须为0,1 RANK_ANLS第三个常量文本类型参数必须为"asc","desc"(不区分大小写) | |
TOTAL | 第一个参数为聚合函数 第二个为缺省数值参数,缺省值为0 第三个为缺省文本参数,缺省值为"sum" | TOTAL不符合(数值) 或 (数值,数值) 或 (数值,文本) 或 (数值,数值,文本)的参数要求 TOTAL第二个数值类型参数必须为0,1 TOTAL第三个常量文本类型参数必须为"sum","avg","min","max"(不区分大小写) |
通用报错提示:
含义 | 举例 | 不合法提示 |
---|---|---|
参数中包含非聚合函数或者常量,或者第一个参数不是聚合函数 | TOTAL(合同金额)(「合同金额」为字段) | #函数名#中参数只有是聚合函数或者常量,且第一个参数必须为聚合函数 |
2.8 控制计算粒度函数
函数 | 合法性 | 结果类型 | 不合法提示 |
---|---|---|---|
FIXED | FIXED(dim1,dim2,……,aggregate) dim为维度,可为任意类型,但不能为聚合函数 aggregate为结果,必须为聚合函数 | 数值 | #函数名#必须包含参数 #函数名#维度不能为聚合函数 #函数名#最后一个参数必须是聚合函数 |
INCLUDE | INCLUDE(dim1,dim2,……,aggregate) dim为维度,可为任意类型,但不能为聚合函数 aggregate为结果,必须为聚合函数 | ||
EXCLUDE | EXCLUDE(dim1,dim2,……,aggregate) dim为维度,可为任意类型,但不能为聚合函数 aggregate为结果,必须为聚合函数 |