能力说明
功能简介
将输入字段作为变量,自由定义表达式进行计算,并输出计算结果
配置参数
| 参数名称 | 参数类型 | 是否必填 | 默认值 | 参数说明 |
|---|---|---|---|---|
| 计算表达式 | string | 是 | 计算表达式 | |
| 计算结果输出的字段名 | string | 是 | 计算结果输出的字段名 | |
| 用途备忘 | string | 是 | 会显示在能力上,便于识别,一定要写 |
输出路线详解
表达式分为两种,一种是判断真假的布尔型(使用了大于小于等比较操作符就会输出布尔结果),一种是计算结果的类型(通过运算符计算的表达式会输出计算结果)
| 路线名 | 路线说明 |
|---|---|
| 匹配(布尔结果为真) | 布尔类型表达式计算结果为真时,数据会进入这条路线,输出字段内容为true |
| 未匹配(布尔结果为假) | 布尔类型表达式计算结果为假时,数据会进入这条路线,输出字段内容为false |
| 计算结果(非布尔结果) | 非布尔结果的表达式计算成功时,数据会进入这条路线,输出字段内容为计算的结果值 |
| 计算出错 | 不管什么表达式,计算时出错了会进入这条路线,输出字段内容为错误信息 |
输入简介
JSON对象格式的数据(json数组不支持)
输入数据样例
{
"check_day_max":"4",
"download_day_max":2,
"release_date":"2024-01-27 03:50:03",
"download_date":"2024-02-08 15:33:56"
}
输出简介
期望对流经本能力的数据进行检查:若 《数据下载时间和原始发布时间相差的天数》 小于 《检查最大天数(check_day_max)加下载最大天数(download_day_max)》 的和,则可以配置的表达式如下
绝对值( 时间差(download_date,release_date,"天") ) < 转数字(check_day_max) + download_day_max
该表达式执行了以下动作:
先通过使用【时间差】函数,计算download_date与release_date相差的天数(类似于download_date减release_date)
为了避免download_date早于release_date导致这个时间差为负数,所以用了【绝对值】函数对相差天数求了一下绝对值
由于数据里check_day_max是字符串,所以用【转数字】函数将其转为数值类型,才能和后面的download_day_max相加
最后,判断【相差天数的绝对值】是否小于【check_day_max与download_day_max之和】,确定是输出到【匹配】还是【未匹配】数据流中
输出数据样例
设置输出字段为result,通过计算,发现上述输入样例的数据不符合条件(相差天数已经大于6了),会从《未匹配》的线路输出
{
"check_day_max":"4",
"download_day_max":2,
"release_date":"2024-01-27 03:50:03",
"download_date":"2024-02-08 15:33:56",
"result":false
}
相关能力
无
参考指标
数据质量:100%
处理性能:未知
附加说明
1.数据类型的基础
JSON中有三种最常用的数据类型:数值,字符串,布尔,使用表达时的时候要注意类型不同计算结果可能不同,
{
"check_day_max":"4", <--------这种虽然里面是数值,但由于有双引号,所以其实是字符串
"download_day_max":2, <--------这种没有双引号的纯数字(可能带小数点),才是数值类型
"release_date":"2024-01-27 03:50:03", <-----------这种看着像日期时间的,由于也是双引号引起来的,所以也是字符串
"download_date":"2024-02-08 15:33:56",
"result":false <--------这种没有双引号引起来的,内容是 true 或 false 的,是布尔值
}
2.基础表达式操作符
表达式里支持的操作符有: +,-,*,/,<,>,<=,>=,==,!=,<>【不等于】,%【取模】,&&【逻辑与】,||【逻辑或】,!【逻辑非】
有几点注意:
a. 加号左边如果是字符串,右边不管是什么,都会当字符串连接起来;
b. 数学符号除了加号外,如果用于字符串这些非数值时,能力会报错;
c. 比较类的操作符, <,>,<=,>=,==,!=,<> 等,会根据比较结果返回true或false,但如果左右两边数据类型不一样,会直接返回false;
d. 在表达式里的变量,可以直接写数字(例如【 1 + 2 】得出 3),或这用双引号包裹的字符串(例如 【 "a" + "b" 】 得出 "ab"),也能直接写字段名(例如【 title + content 】得出标题正文连起来的字符串),但是,写字段名时不要加双引号,会被识别为字符串(例如【 "title" + "content" 】只会得到 "titlecontent"
e. 如果在表达式中使用了上游数据中不存在的字段名,或者对用错了字段类型,导致不支持的操作符,例如b里的情况,或违反函数的参数要求,都会从失败路线输出
f. 虽然表达式会遵循先乘除后加减的一些默认规则,但使用其他符号时还是请尽量使用括号来明确表达你期望的计算优先级
3.三元运算符
表达式也支持使用三元运算符 【 ? : 】,例如【 a > b ? a : b】 含义为如果a>b为真,则表达式值为a,反之为b
注意:使用三元运算符中的三个子表达式都请尽量使用括号来明确表示你的计算优先级,避免出现不期望的结果
4.现在可用的函数
| 函数名 | 取整 |
|---|---|
| 功能 | 将数值或字符串转成整数,有小数点的四舍五入 |
| 参数1 | 数值或字符串 |
| 返回值 | 整数数值 |
| 样例 | 取整(source_type) |
| 函数名 | 转数字 |
|---|---|
| 功能 | 将字符串转成数值,有小数点的转成浮点数,不会四舍五入 |
| 参数1 | 字符串 |
| 返回值 | 整数或小数的数值 |
| 样例 | 转数字(source_type) |
| 函数名 | 绝对值 |
|---|---|
| 功能 | 取数值的绝对值 |
| 参数1 | 数值 |
| 返回值 | 非负数数值 |
| 样例 | 绝对值(xxxxx) |
| 函数名 | 当前时间 |
|---|---|
| 功能 | 取当前时间 |
| 返回值 | 形如"2024-01-23 19:50:12"的包含当前时间的字符串 |
| 样例 | 当前时间() |
| 函数名 | 时间转数字 |
|---|---|
| 功能 | 将时间字段内容转为从1970年开始的毫秒/秒/分/时/天的数字 |
| 参数1 | 形如"yyyy-MM-dd HH:mm:ss"格式的字符串 |
| 参数2 | 时间单位,从"毫秒"/"秒"/"分"/"时"/"天"中选择一个需要的填写即可 |
| 返回值 | 根据参数2返回指定的整数数值 |
| 样例 | 时间转数字(download_date,"毫秒") |
| 函数名 | 数字转时间 |
|---|---|
| 功能 | 以1970年为起点,根据参数2将数字转换为日期时间型的字符串 |
| 参数1 | 数值 |
| 参数2 | 时间单位,从"毫秒"/"秒"/"分"/"时"/"天"中选择一个需要的填写即可 |
| 返回值 | 形如"2024-01-23 19:50:12"的时间内容的字符串 |
| 样例 | 数字转时间(1000,"天") |
| 函数名 | 时间差 |
|---|---|
| 功能 | 用第一个时间参数减第二个时间参数,根据第三个参数指定的时间单位得出差值,本质上和时间转数字后的运算没差别,至少一种更快捷的写法 |
| 参数1 | 形如"yyyy-MM-dd HH:mm:ss"格式的字符串 |
| 参数2 | 形如"yyyy-MM-dd HH:mm:ss"格式的字符串 |
| 参数3 | 时间单位,从"毫秒"/"秒"/"分"/"时"/"天"中选择一个需要的填写即可 |
| 返回值 | 相差的整数数值(不四舍五入,可能为负数) |
| 样例 | 时间差(download_date,release_date,"天") |
| 函数名 | 字数 |
|---|---|
| 功能 | 计算某字段的文字个数(一个汉字和一个英文都计数为1) |
| 参数1 | 字符串或数值 |
| 返回值 | 整数数值 |
| 样例 | 字数(format_content) |