1、数值函数
1.1、数值处理函数
- abs(number):返回绝对值
abs(1.1) = 1.1
abs(-2.1) = 2.1 - ceiling():绝对值增大方向取整
ceiling(2.1) = 3
ceiling(-3.2) = -4 - floor():绝对值减小的方向取整
floor(2.1) = 2
floor(-3.2) = -3 - int():值减小的方向取整
int(2.1) = 2
int(-3.2) = -4 - round():四舍五入
round(number,num):number要处理的数据,num要舍入的位数,num为负数时,则对小数点前第num位进行舍入
round(1.24, 1) = 1.2
round(1.25, 1) = 1.3
round(-1.24, 1) = -1.2
round(25.12, -1) = 30
round(123.5, -2) = 100 - trunc():数值小数截取
trunc(number,num):number要处理的数据,num要截取的位数,num为负数时,则从小数点前第num位进行截取
trunc(1.24, 1) = 1.2
trunc(1.25, 1) = 1.2
trunc(-1.24, 1) = -1.2
trunc(25.12, -1) = 20
trunc(123.5, -2) = 100
1.2、数值计算函数
- power():a的b次方,power(a, b)等于a ^ b
power(3, 2) = 9 - sqrt():开平方
sqrt(number):返回number的算数平方根(正的平方根),number必须为非负数,number为负数时,返回空值
sqrt(9) = 3
sqrt(-9) = 空值 - fact():阶乘
fact(2) = 1 * 2 = 2
fact(4) = 1 * 2 * 3 * 4 = 24
fact(4.9) = fact(4) = 24 number是小数时,截取整数位进行阶乘运算
fact(-10) 返回空值 - max():最大值
max(number1, number2, number3, ...) 返回number1, 2, 3, ...中的最大值,行运算,不是sql里的列运算 - min():最小值
- mod():取余
mod(a, b) 返回a / b 的余数,结果的正负与b一致
mod(3, 2) = 1
mod(3, -2) = -1
mod(3, 0) = ∞ 无穷大 - rand():[0, 1)之间的随机数
- randbetween():指定范围的随机整数
randbetween(a, b) 返回(a,b]之间的随机整数,a和b整数部分相等时,返回整数部分 - sign():返回数值正负性,整数为1,负数为0
1.3、其他不常用函数
pi(number):数学常量函数,返回pi的number整数倍,pi(number) = pi(trunc(number)),number为空时,1倍
sin():返回给定弧度的正弦值,sin(30 * pi() / 180) = 0.5 :30度的正弦值
cos():返回给定弧度的余弦值
tan():返回给定弧度的正切值
asin():返回给定数值的反正弦值,返回值是弧度,asin(0.5) = pi() / 6,即30度
acos():返回给定数值的反余弦值
atan():返回给定数值的反正切值
atan2(x, y):返回(x, y)坐标的反正切值,atan2(sqrt(3), 1) = pi() / 6,即30度
degrees():将弧度转化为度数,degrees(pi() / 2) = 90,degrees(3.1415926) = 179.9999
radians():将角度转化为弧度,randians(180) = 3.1415
exp():e的n次幂
ln(): 返回number的自然对数,ln(exp(3)) = 3
log(a, b):按指定的底数b,返回a的对数,b默认值为10,log(16, 2) = 4
log10():返回以10为底的对数,log10(10) = 1
promotion(a, b):返回b在a上提升的比例,(b - a) / a,promotion(-12, 14) = 2.1666,即提升了216.66%
2、日期函数
2.1、日期获取函数
- now():获取当前时间
- lunar(year, month, day):返回当前日期对应的农历时间,支持的时间段为1900-2100年 lunar(2024, 7, 25) = "甲辰年六月廿十"
- today():获取当前日期
- time(hour, minute, second):返回指定的日期和时间,日期随当天日期改变 time(1, 1, 1) = "2024-07-25 01:01:01"
2.2、日期转换函数
- date(year, month, day):返回日期,month大于12时,年份进位,day超过当月天数时,月份进位
date(2024,13,32) = 2025-02-01 00:00:00 - datedelta(date, num):返回日期date后num天的日期,date支持文本类型和日期类型,num为负数,则是date前num天
datedelta("2021-01-01", 1) = 2021-01-02 00:00:00
datedelta("2021-01-02", -1) = 2021-01-01 00:00:00 - monthdelta(date, num):返回日期date后num个月的日期,date支持文本类型和日期类型,num为负数时,则是date前num月
monthdelta("2021-01-01", 1) = 2021-02-01 00:00:00
monthdelta("2021-02-01", -1) = 2021-01-01 00:00:00 - yeardelta(date, num):返回日期date后num年的日期,date支持文本类型和日期类型,num为负数时,则是date前num年
yeardelta("2021-01-01", 1) = 2022-01-01 00:00:00
yeardelta("2021-01-01", -1) = 2020-01-01 00:00:00 - datetonumber(date):返回date的毫秒级时间戳,即1970-01-01 00:00:00GMT到date所经过的毫秒数
datetonumber("1970-01-01 8:00:00") = 0
datetonumber("1970-01-01 8:00:01") = 1000 - second(date, 格式):返回给定时间的秒数,参数省略时,返回当前时间的秒数
second("2021-01-01 00:00:01") = 1
second("2021-01-01 01:02:03", "YYYY-MM-dd HH:mm:ss") = 3
second("2021-01-01 01:02:03", "YYYY-MM-dd HH:ss:mm") = 2
second("01:02:03") = 3 - minute(date, 格式):返回给定时间date的分钟数,用法同second
- hour(date, 格式):返回给定时间date的小时数,用法同second
- day(date, 格式):返回给定时间date的天数,用法同second
- days360(start_time, end_time, method):每月按30天算,返回start_time到end_time之间的天数,不足一天也按一天算;method取值为空、false和true,没看出区别
das360("2021-01-01 23:59:59", "2021-01-02 00:00:00", true) = 1 - month(date, 格式):返回给定时间date的月份数,用法同second
- week(date, "F1"/"F7"):返回date属于当年的第几周,参数2设置一周的开始是周一还是周日,不输入默认为周日F7
week("2024-01-01") = 53;周一,因为周日为一周的第一天,所以2024-01-01属于2023年的最后一周
week("2024-01-01", "F1") = 1 - year(date, 格式):返回给定时间date的年份,范围是1900到9999,用法同second
- todate():将参数转换成日期类型,参数支持日期型、时间戳、日期格式的文本、日期格式文本加日期解析格式、日期格式文本加日期解析格式加解析日期的语言(zh,en),如果EEE和MM/dd/yy不一致,以后者为准
todate(date(2021,01,01)) = 2021-01-01 00:00:00
todate(3600000) = 1970-01-01 09:00:00
todate("2024-01-01") = 2024-01-01 00:00:00 todate("2024-07-01 02:03:04", "yyyy-MM-dd HH:mm:ss") = 2024-07-01 02:03:04
todate("星期一2024-07-01", "EEEyyyy-MM-dd", "zh") = 2024-07-01 00:00:00
todate("星期三2024-07-01", "EEEyyyy-MM-dd", "zh") = 2024-07-01 00:00:00
2.3、日期计算函数
- datedif(start_time, end_time, unit):返回start_time和end_time之间的unit差值,不足部分算1unit,unit不区分大小写;unit = "y"、"m"、"d"分别代表年月日差值;unit = "md",忽略年月,返回日差值;unit = "ym",忽略年日,返回月差值;unit = "yd",忽略年,返回日差值
datedif("2021-01-02", "2021-02-01", "d") = 30
datedif("2021-01-02", "2021-02-01", "m") = 1
datedif("2021-01-02", "2022-01-01", "y") = 1
datedif("2021-01-02", "2021-02-01", "md") = -1
datedif("2021-01-02", "2022-02-01", "ym") = 1
datedif("2021-01-02", "2022-02-01", "yd") = 30 - datesubdate(date1, date2, op):返回date1和date2之间的时间差,date1早于date2时,结果为负数;op不区分大小写,op = "w","d","h","m","s"时,分别求周天时分秒差值;返回值floor取整,即不足1op的部分舍去
datesubdate(d1, d2, "w") = floor(datesubdate(d1, d2, "d") / 7) - daysofmonth(date):返回1900-01-01之后某年某月的天数
- daysofquarter(date):返回1900-01-01之后date日期所属季度的天数
- daysofyear(date):返回1900-01-01之后某年的天数,1900年及之前的年份,返回值都为356
- weekday(date):返回date是星期几,0-6,0为周日
- weekdate(year, month, weekofmonth, dayofweek):返回指定年月指定周的周几的具体日期,dayofmonth = -1时,表示这周的最后一天 weekdate(2024, 7, 3, 5) = 2024-07-18,返回2024年7月第3周的周4
- dayvalue(date):返回1900年至date日期所经历的天数,不足一天的部分舍去 dayvalue("1900-01-01 23:59:59") = 1
- quarter(date, 格式):返回日期中的季度,1-4
3、文本函数
3.1、文本转换函数
- char(num):根据num返回对应
char(48) = "0"
char(70) = "F" - code(text):计算文本字符串第一个字符的编码,返回的编码却决于计算机使用的字符集
code("F") = 70
code("0") = 48 - concatenate(text1, text2,...):将数个字符串拼接成一个字符串,没有分割符
concatenate("a", "b", "cd") = "abcd" - format(object, format):返回object的format格式,结果类型为文本;object可为string,数字,时间
format(1234.3456, "¥###0.00") = "¥1234.35";四舍五入
format(1234.3456, "#,##0.00") = "1,234.35"
format(1.5, "0.000%") = "150.000%"
format(123456789, "##0.0E0") = "123.5E6";结果小数点前最多3位
format(123456789, "0.0E0") = "1.2E8"
format("2021-01-01", "EEE,MMMdd,yyyy") = "星期五,一月01,2021"
format(time(14, 23, 59), "h:mm:ssa") = "2:23:59下午"
format(time(14, 23, 59), "HH:mm:ssa") = "14:23:59下午" - len(str):返回文本字符串str中的字符数。空格也计数,str为数组时,返回数组长度
len("abc") = 3
len("a bc") = 4
len(["a", "b", "c"]) = 3 - numto(number, boolean):返回number的中文表示。boolean默认值为false
numto(12345) = "一万两千三百四十五"
numto(12345, true) = "一二三四五"
numto(12345, false) = "一万两千三百四十五" - todouble(str):将文本str转换成double类型,str不是数字格式时,返回0
todouble("123.45") = 123.45
todouble("123") = 123
todouble("aaa") = 0 - tointeger(str):将文本str转换成int类型,str不是数字格式时,返回0
tointeger("-123.9") = -123
tointeger("aaa") = 0 - split(str1, str2):返回用str2分割str1字符串后组成的字符串数组
split("a b c d", " ") = ["a", "b", "c", "d"]
split("abcd", "") = ["a", "b", "c", "d"]
3.2、文本修改函数
- indexof(str, index):返回str在index位置上的字符, index从0开始
indexof("abcdef", 2) = c
indexof(["a", "b", "c"], 2) = c - left(str, num):返回字符串str前num个字符,num默认值为1,且必须大于等于0
left("abcde", 0) = ""
left("abcde", 2) = "ab"
left("abcde", 9) = "abcde"
left("abcde", -1) = "" - right(str, num):返回字符串str后num个字符,num默认值为1,且必须大于等于0
right("abcde", 0) = ""
right("abcde", 2) = "de"
right("abcde", 9) = "abcde"
right("abcde", -1) = "" - upper(str):将文本str中所有字符转化为大写
upper("abc") = "ABC" - lower(str):将文本str中所有字符转化为小写
lower("ABC") = "abc" - proper():首字母大写
proper("abc de fg") = "Abc De Fg"
proper("00 abc de") = "00 Abc De"
proper("00abc de") = "00Abc De" - mid(text, start_num, num_chars):返回text从start_num位置开始,往后的num_chars个字符;text中第一个字符的start_num为1
mid("abcde", 2, 2) = "bc"
mid("abcde), 2, 9) = "bcde" mid("abcde", 2, -1) = null
mid("abcde", 0, 2) = null - repeat():根据指定的次数重复显示文本
repeat("a", 4) = "aaaa" - replace(str1, str2, str3):用str3替换字符串str1中所有的str2
replace("aaaacccc", "a", "b") = "bbbbcccc" - replace(str1, num1, num2, str2):将str1字符串从num1开始往后num2个字符,替换成str2
replace("abcdefg", 3, 2, "ttt") = "abtttefg" - substitute(str1, str2, str3, num):用str3替换str1中的str2,如果指定了num,则只替换第num个str2;num为0时,不替换;num为负数时,替换第abs(num)个str2
substitute("abcbde", "b", "t") = "atctde"
substitute("abcbde", "b", "t", 1) = "atcbde" - trim(str):去除字符串str前后的空格
trim(" ab c ") = "ab c"
3.3、文本检索函数
- startwith(str1, str2):判断字符串str1是否是以str2开始的,str1和str2都是大小写敏感的
startwith("abcaaa", "abc") = 1
startwith("Abcaaa", "abc") = 0
startwith("abcaaa", "aaa") = 0 - endwith(str1, str2):判断字符串str1是否是以str2结束的,str1和str2都是大小写敏感的
endwith("abcaaa", "aaa") = 1
endwith("abcAaa", "aaa") = 0
endwith("abcaaa", "abc") = 0 - exact(text1, text2):检测两组文本是否相同,如果完全相同,返回1;否则返回0,区分大小写
exact("aaa", "aaa") = 1
exact("Aaa", "aaa") = 0 - find(str1, str2, num):从索引num开始,查找字符串str1第一次出现在str2里时的索引;str2里的索引从1开始,num默认值为1
find("a", "abcde") = 1
find("bc", "abcde") = 2
find("a", "abcade", 4) = 4
find("a", "abcade", 5) = 0
find("a", "abcade", 7) = 0
find("a", "abcade", -1)返回空 - regexp(str, parttern):字符串是否与正则表达式pattern相匹配
regexp("aaaaccc", "a.*c") = true
4、逻辑函数
- and(logical1, logical2, ....):当所有参数值为真时,返回1;当任意参数的值为假时,返回0
and(1=1, 2=2, 3=3) = 1
and(1=1, 2=3, 3=3) = 0 - or(logical1, logical2, ....):当所有参数值为假时,返回0;当任意参数的值为真时,返回1
or(1=2, 2=3, 3=4) = 0
or(1=1, 2=3, 3=4) = 1 - not(条件表达式):对条件表达式的结果执行非运算;条件表达输出的结果需为布尔类型或数值类型,不可缺省
not(1=1) = 0
not(4) = 0
not(0) = 1 ;当条件表达式为数值类型时,只有not(0)为1 - in(exp, para1, para2, ...):判断表达式exp的结果是否属于para1, para2, ...构建的集合里;exp不能为null;in函数中所有参数的类型需保持一致
in(1, 1, 2, 3) = 1
in(1, 1, "2", 3) 报错 - if(exp1, result1, exp2, result2, ..., else_result):如果exp1为真,则返回result1,如果exp2为真且exp1为假,则返回result2,...如果没有为真的exp,则返回else_result;所有result类型必须相同;至少一个exp,result,else_result
if(50 < 10, "a", 50 < 60, "b", "c") = "b" - switch(表达式, 值1, 结果1, 值2, 结果2, ..., 其他结果):如果表达式的结果是值1,返回结果1,如果是值2,返回结果2,如果没有符合要求的值,则返回其他结果;结果必须为相同字段类型;其他结果可以缺省,缺省时没有对应结果时返回空
switch(4-3, 1, "a", 2, "b", "c") = "a"
switch(4-0, 1, "a", 2, "b") = null
5、分析聚合函数
- def(指标, [维度1, 维度2, ...], [过滤条件1, 过滤条件2, ...]):满足过滤条件1、2的明细数据按照[维度1, 维度2, ...]对指标进行聚合运算;第二三参数可以缺省
def(sum_agg(购买数量), [产品], [是否会员 = "是"]):求会员在产品分组下的购买数量 - avg_agg():取平均
- count_agg():计数
- countd_agg():去重计数
- max_agg():求最大值
- min_agg():求最小值
- median_agg():求中位数
- sum_agg():求和
- stdev_agg():求标准差
- var_agg():求方差
- earlier:输出上一个视图的计算值。只能用于def、def_add、def_sub中,一般用于行间过滤计算;earlier参数为单个字段,不支持常量作为参数;加上earlier函数过滤后,def函数就很类似mysql开窗函数了
def(count_agg(购买数量) + 1, [购买数量], [购买数量 < earlier(购买数量)]),计算购买数量的排名 def(sum_agg(购买数量), [序号], [序号 <= earlier(序号)]),计算按照序号大小计算的购买数量的累计值
6、其他函数
- iferror(value1, value2):判断value1是否是异常值,如果是则返回value2,不是则返回value1;异常值:正无穷、负无穷、NAN(无穷除无穷),不包括空值
iferror(1, 2) = 1
iferror(100 / 0, 1) = 1
iferror(null, 1) = null - isnull(objict):判断对象中的值是否是null或者空字符串,为空或者null,返回1,否则返回0
isnull(null) = 1
isnull("") = 1 - nvl(value1, value2, value3, ...):在所有参数中返回第一个不是null的值;当字符串长度为0时,返回也是null
nvl("", "", "a") = "a"
nvl(null, 1, 2) = 1
nvl(null, null) = null
7、补充
7.1、组件->添加计算字段->特有函数
- acc_sum(x_agg(array), range):x_agg()是sum_agg()函数时,计算的是累加值。range值可为0或1,默认值为0,0-所有行累计,1-组内累计。可使用组件里的分组表测试。
当只有一个维度时,0,1没有区别,
当有多个维度,比如[维度A,维度B]时,在A1组内,B1组中0,1数值相同;而到了B2组内,range=0计算的是B1的第一行到当前行的累加值,range=1计算的是B2第一行到当前行的累加值 - total(x_agg(array), range, agg):x_agg = sum_agg && agg = "sum"时,计算的是总和。range值可为0或1,默认值为0,0-所有行求和,1-组内求和。
当只有一个维度时,0,1没有区别,
当有多个维度,比如[维度A,维度B]时,range=0计算的是所有行求和,range=1计算的是各A组的求和