Skip to content

公式列表

下面各种公式列表,主要是运用在搜索功能模块的公式列添加、公式搜索以及在系统管理模块的公式编辑。

样例中,公式括号里的内容为属性列名、数值列名、数字、字符串等,字符串的输入需加英文引号。

聚合公式

公式说明样例
average求度量的平均值average(销售数量)
count返回指定列的行数count(产品名称)
max求度量的最大值max (销售数量)
min求度量的最小值min (销售数量)
stddev求度量的标准差stddev (销售数量)
sum对度量求和sum (销售数量)
unique_count对属性或者度量进行非重复计数unique count (产品名称)
variance求度量的方差variance(销售价格)
sum_if按条件求和sum_if(进货价格>8,销售数量)
average_if按条件求平均值average_if(进货价格>8,销售数量)
variance_if按条件求均方差variance_if(进货价格>8,销售数量)
stddev_if按条件求标准差stddev_if(进货价格>8,销售数量)
max_if按条件求最大值max_if (进货价格>8,销售数量)
min_if按条件求最小值min_if (进货价格>8,销售数量)
count_if按条件计数count_if(进货价格>8,销售数量)
unique_count_if按条件求非重复计数unique_count_if(进货价格>8,销售数量)

表 12-1 聚合公式表

分析公式

公式说明样例
cumulative_average输入一个度量和一个或多个属性。
求按指定属性排序后的各行累积平均值
cumulative_average(销售数量,订单日期, 产品类别)
注:按订单日期排序后再按产品类别排序的累积平均销售数量。
cumulative_max输入一个度量和一个或多个属性,求按指定属性排序后的各行累积最大值cumulative_max(销售数量,订单日期, 产品类别)
cumulative_min输入一个度量和一个或多个属性,求按指定属性排序后的各行累积最小值cumulative_min (销售数量,订单日期, 产品类别)
cumulative_sum输入一个度量和一个或多个属性,求按指定属性排序后的各行累积总和cumulative_sum (销售数量,订单日期, 产品类别)
cumulative_count输入一个度量和一个或多个属性求按指定属性排序后的各行累积行数cumulative_count (销售数量,订单日期, 产品类别)
cumulative_stddev输入一个度量和一个或多个属性,求按指定属性排序后的各行累积标准差cumulative_stddev (销售数量,订单日期, 产品类别)
cumulative_variance输入一个度量和一个或多个属性,求按指定属性排序后的各行累积方差cumulative_variance(销售数量,订单日期, 产品类别)
group_average输入一个度量和多个属性,求按指定属性分组后度量的平均值group_average(销售数量,订单日期, 产品类别)
注:各订单日期内的各产品类别的平均销售数量。
group_max输入一个度量和多个属性,求按指定属性分组后度量的最大值group_max (销售数量,订单日期, 产品类别)
group_min输入一个度量和多个属性,求按指定属性分组后度量的最小值group_min (销售数量,订单日期, 产品类别)
group_sum输入一个度量和多个属性,求按指定属性分组后度量的和group_sum (销售数量,订单日期, 产品类别)
group_count输入一个度量和多个属性,求按指定属性分组后度量的计数group_count(销售数量,订单日期, 产品类别)
group_stddev输入一个度量和多个属性求按指定属性分组后度量的标准差group_stddev(销售数量,订单日期, 产品类别)
group_variance输入一个度量和多个属性求按指定属性分组后度量的方差group_variance(销售数量,订单日期, 产品类别)
moving_average移动平均值
输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的平均值
第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数
moving_average(进货价格,7,6,订单日期)
moving_max移动最大值
输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的最大值
第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数
moving_max(进货价格,7,6,订单日期)
moving_min移动最小值
输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的最小值
第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数
moving_min(进货价格,7,6,订单日期)
moving_sum移动求和
输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的和
第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数
moving_sum(进货价格,7,6,订单日期)
moving_count移动计数
输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的计数
第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数
moving_count(进货价格,7,6,订单日期)
moving_stddev移动求标准差
输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的标准差
第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数
moving_stddev(进货价格,7,6,订单日期)
moving_variance移动求方差
输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的方差
第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数
moving_variance(进货价格,7,6,订单日期)

表 12-2 分析公式表

变换公式

公式说明样例
to_bool转换对应的数字为boolean类型to_bool (9.37)
to_date把指定的数字和字符串类型的日期值转换成日期格式(impala只支持'%Y-%m-%d %H:%M:%S' 格式的字符串转换)to_date (10.07)
to_double把指定的数字转换为double类型to_double (订单单号)
to_integer把指定的数字转换为integer类型to_integer (订单单号)
to_string把指定的输入转为字符串to_string (订单日期)

表 12-3 转换公式表

日期公式

公式说明样例
add_years为日期列增加年数add_years(订单日期, 8 )
add_months为日期列增加月数add_months(订单日期,8)
add_weeks为日期列增加周数add_weeks(订单日期,8)
add_days为日期列增加天数add_days (订单日期,8)
add_hours为日期列增加小时数add_hours (订单日期,8)
add_minutes为日期列增加分钟数add_minutes(订单日期,8)
add_seconds为日期列增加秒数add_seconds (订单日期,8)
date计算指定时间的日期部分date(订单日期)
day计算指定时间是月内的哪一天(1~31)day(订单日期)
day_number_of_week计算指定时间是周内的哪一天(1~7对应周一到周日)day_number_of_week (订单日期)
day_number_of_quarter计算指定时间是季度内的哪一天day_number_of_quarter (订单日期)
day_number_of_year计算指定时间是年内的哪一天(1~366)day_number_of_year (订单日期)
day_of_week计算指定时间是周几(Monday~Sunday)day_of_week (订单日期)
week_number_of_month计算指定时间是月内的哪一周(1~6) 注:按电子日历从周一至周日week_number_of_week (订单日期)
week_number_of_quarter计算指定时间是季度内的哪一周(1~15) 注:按电子日历从周一至周日week_number_of_quarter (订单日期)
week_number_of_year计算指定时间是年内的哪一周(1~53) 注:按电子日历从周一至周日week_number_of_year (订单日期)
diff_days用前一个日期减后一个日期计算天数的差值,差值超过12小时算一天diff_days(签收日期,发货日期)
diff_time用前一个日期减后一个日期计算秒数差值diff_time(发货日期,订单日期)
hour_of_day计算时间是当天的几点(0~23)hour_of_day(订单日期)
is_weekend指定日期是否是周末is_weekend(订单日期)
month计算指定月份(January~December)month (订单日期)
month_number计算指定日期是当年的第几个月(1~12)month_number (订单日期)
month_number_of_quarter计算指定日期是当年的第几个月month_number_of_quarter (订单日期)
start_of_day计算指定日期所属日的开始日期start_of_day(订单日期)
start_of_month计算指定日期所属月的开始日期start_of_month(订单日期)
start_of_quarter计算指定日期所属季度的开始日期start_of_quarter (订单日期)
start_of_week计算指定日期所属周的开始日期start_of_week (订单日期)
start_of_year计算指定日期所属年的开始日期start_of_year (订单日期)
time计算指定日期的时间部分time(订单日期)
year计算指定日期年份year (订单日期)
now获取当前时间now( )

表 12-4 日期公式表

关系函数

公式说明样例
!=如果两值不等返回true否则返回false销售数量 != 10000
<如果前一个值小于后一个值返回true否则返回false销售数量 < 10000
<=如果前一个值小于等于后一个值返回true否则返回false销售数量 <= 10000
=如果两值相等返回true否则返回false销售数量 = 10000
>如果前一个值大于后一个值返回true否则返回false销售数量 > 10000
>=如果前一个值大于等于后一个值返回true否则返回false销售数量 >= 10000
greatest返回两值中较大的值greatest ( 进价 , 售价 )
least返回两值中较小的值least ( 进价 , 售价 )

表 12-5 关系函数表

数字函数

公式说明样例
*求两值的乘积2*6
+求两值的和1+5
-求两值的差8-2
/求两值的商12/2
^乘方5^2=25
abs求绝对值abs(-5)=5
acos反余弦acos(0.5)
asin反正弦asin(0.5)
atan反正切atan(1)
atan2反正切atan2(1,2)
cbrt立方根cbrt(27) = 3
ceil返回大于等于指定数字的最小整数ceil(5.9) = 6
cos余弦cos(0.5)
cube立方cube(3) = 27
exp自然常数e的乘方exp(2)
exp22的乘方exp2(3)=8
floor返回小于等于指定数字的最大整数floor(3.1)=3
ln自然对数ln(3)
log10以10为底的对数log10(3)
log2以2为底的对数log2(3)
mod求模mod(8,3)=2
pow乘方pow(2,3)=8
random0~1之间的随机数random()
round四舍五入round( 36.355 ,2)=36.36
sign如果数字大于零返回1小于零返回-1等于0返回0sign(-50)
sin正弦sin(0.5)
sq平方sq(8)
sqrt开方sqrt(64)
tan正切tan(0.5)
safe_divide安全除法,防止除于0时报错的问题safe_divide(销售金额,销售数量)

表 12-6 数字函数表

逻辑操作符

公式说明样例
and并逻辑运算X=1 and X>3
if..then..else逻辑判断if X>3 then 'bigger' else 'not bigger'
ifnull如果值1为null返回值2,否则返回值1ifnull(cost, 'unknown')
isnull如果值为null返回true否则返回falseisnull(null) = true
not非逻辑运算not (2>3) = true
or或逻辑运算X=1 or X>3

表 12-7 逻辑操作符表

文本操作函数

  • 公式中,列中值需加引号,不加引号的为源表中列名。
公式说明样例
concat字符串链接操作concat("test" , "123" )=test123 concat(产品类别," 的" ,产品名称)
contains如果字符串1包含字符串2返回true否则返回falsecontains (“broomstick”, “room”) = true contains(姓名, "赵" , "钱" , "孙")
not_contains如果字符串1不包含字符串2返回true否则返回falsenot_contains (“broomstick”, “room”) = false not_contains ( 姓名, "赵" , "钱" , "孙" )
strlen字符串长度strlen (“smith”) = 5
strpos第二个字符串在第一个字符串中出现的位置strpos (“haystack_with_needles”, “needle”) = 14
substr获取字符串子串substr (“persnickety”, 4, 7) = snicket
strupper把输入的字符串转为大写strupper(“example”)=EXAMPLE
strlower把输入的字符串转为小写strlower("EXAMPLE" )=example
begins_with如果字符串1以字符串2开头返回true否则返回falsebegins_with("example","exa") = true begins_with ( 姓名, "赵" , "钱" , "孙" )
not_begins_with如果字符串1不以字符串2开头返回true否则返回falsenot_begins_with("example","exa") = false not_begins_with ( 姓名, "赵" , "钱" , "孙" )
ends_with如果字符串1以字符串2结尾返回true否则返回falseends_with("example","ple") = true ends_with ( 姓名, "赵" , "钱" , "孙" )
not_ends_with如果字符串1不以字符串2结尾返回true否则返回falsenot_ends_with("example","ple") = false not_ends_with ( 姓名, "赵" , "钱" , "孙" )

表 12-8 文本操作函数表

JSON公式

表 12-8 JSON公式表

公式说明样例与结果
json_format把json对象转换成json字符串json_format( "hello" ) json_format( 城市 )
json_parse把字符串(json格式)转换成json对象json_parse ( "focus" ) json_parse ( 序号 )
json_extract从json对象中提取指定路径下的json对象(返回值仍然是JSON类型),例:json_extract(json,
json_path) json_path的规则:
1. $ - 查询的根节点
2. @ - 过滤器断言
3. * - 通配符
4. .. - 可以理解为递归搜索
5. .name 表示一个子节点
6. [‘name’ (, ‘name’)] - 表示一个子节点或多个子节点
7. [‘number’ (, ‘number’)] - 表示一个或多个数组下标
8. [start:end] - 数组片段,区间为[start,end),不包含end
9. [?(expression)] - 过滤器表达式,表达式结果必须是boolean
json_extract ( json列 , '$' )
json_extract_scalar从json对象中提取指定路径下的标量json对象返回为字符串,如果提取路径下不是一个标量json对象则返回null,例:json_extract_scalar(json,
json_path) json_path的规则:
1. $ - 查询的根节点
2. @ - 过滤器断言
3. * - 通配符
4. .. - 可以理解为递归搜索
5. .name 表示一个子节点
6. [‘name’ (, ‘name’)] - 表示一个子节点或多个子节点
7. [‘number’ (, ‘number’)] - 表示一个或多个数组下标
8. [start:end] - 数组片段,区间为[start,end),不包含end
9. [?(expression)] - 过滤器表达式,表达式结果必须是boolean
json_extract_scalar ( json列 , '$' )
json_size获取json对象指定路径下json对象的长度,如果指定路径下是一个json对象或者json数组的话,长度是对象或者数组的成员个数,如果是一个标量类型的对象的话返回0,例:json_size(json,
json_path) json_path的规则:
1. $ - 查询的根节点
2. @ - 过滤器断言
3. * - 通配符
4. .. - 可以理解为递归搜索
5. .name 表示一个子节点
6. [‘name’ (, ‘name’)] - 表示一个子节点或多个子节点
7. [‘number’ (, ‘number’)] - 表示一个或多个数组下标
8. [start:end] - 数组片段,区间为[start,end),不包含end
9. [?(expression)] - 过滤器表达式,表达式结果必须是boolean
json_size ( json列 , '$' )