高级函数
DISTANCE
DISTANCE 函数用于计算两个定位、两个经纬度坐标、或定位与经纬度坐标之间的距离,单位为米。
函数用法:
1)计算两个定位之间的距离
DISTANCE(定位1,定位2)
2)计算两个经纬度坐标间的距离(参数类型为标准格式的字符串)
DISTANCE(字符串1, 字符串2)
参数说明如下:
- 参数格式:组成形式为「纬度,经度」的字符串,坐标示例如下:
- 字符串1:31.590754,120.457367(纬度,经度)
- 字符串2:31.571493,120.496824(纬度,经度)
- 计算时,支持混用经纬度坐标和定位字段,如:
DISTANCE(定位1, 字符串2)
函数示例:
1)如,在客户拜访场景中计算客户之间的距离,方便合理规划拜访路线,节约时间成本。点击体验效果
2)如,在建筑场景中,许多地理位置未开发或缺乏明显标志,使用定位字段难以准确定位,也难以精确计算定位间的距离。此时,可直接录入经纬度坐标,通过函数精确地计算距离。点击体验效果
GETUSERNAME
GETUSERNAME 函数用于获取当前用户的通讯录姓名。
函数用法:
GETUSERNAME()
函数示例:如,利用姓名的唯一性,限制每人每天只能填报一条数据。
INDEX
INDEX 函数可用于获取数组中指定位置的值。
函数用法:
INDEX(数组,位置)
其中各参数的含义如下:
- 数组:可设置为复选框、下拉复选框等字段,或自定义的数组等;
- 位置:指定数组中第几个值,必须为整数;当该参数为负数时,则返回数组中的倒数第几个值。
函数示例:如设置公式为INDEX(复选框组,指定位置),则当指定位置为 1 时,返回复选框中勾选的第 1 个选项;当指定位置为 -1 时,返回复选框中勾选的倒数第 1 个选项。点击体验效果
MAPX
MAPX 函数是一个“跨表单”函数。即其他所有函数都是在当前表单运算的函数,无法调用当前表单中已经提交的或其他表单中数据;而 MAPX 函数可以在一定程度上弥补这样的不足。
函数用法:
MAPX(operation, map_value, map_field, result_field)
其中各参数的含义如下:
- operation: 聚合操作,必填;
- map_value: 条件字段值,即检索值,必填;
- map_field: 条件字段名,即检索范围,必填;
- result_field:字段返回值,必填。
当指定表单的 map_field 列的值为 map_value 时,返回 result_field 的所有值,然后根据指定的聚合操作 operation 得到对应的返回值。
可以理解为:在检索范围中,找到检索值对应的返回值,并对返回值进行聚合操作。
MAPX("聚合操作",检索值,检索范围,返回值)
注意检索值来自当前表单中(蓝底),检索范围和返回值来自所有表单字段中的同一表单(灰底)。
具体操作步骤如下:
参数限制:
1)聚合操作(operation)
operation 参数(聚合操作)为字符串,可选值如下::
参数值 | 含义 |
first | 获取返回值的第一个 |
last | 获取返回值的最后一个 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
count | 获取返回值的个数 |
2)检索值(map_value)、检索范围(map_field)
支持设置检索值的字段,及其对应支持的检索范围字段如下表所示:
检索值 | 检索范围 |
单行文本 | 单行文本、多行文本、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、扩展字段 |
数字 | 数字 |
多行文本 | 单行文本、多行文本、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、扩展字段 |
日期时间 | 日期时间、提交时间、更新时间 |
单选按钮组 | 单行文本、多行文本、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、扩展字段 |
复选框组 | 复选框组、下拉复选框(全等) |
下拉框 | 单行文本、多行文本、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、扩展字段 |
下拉复选框 | 复选框组、下拉复选框(全等) |
微信昵称 | 单行文本、多行文本、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、扩展字段 |
微信 OpenID | 单行文本、多行文本、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、扩展字段 |
扩展字段 | 单行文本、多行文本、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、扩展字段 |
注:当检索值为日期时间字段时,需要设置为 DATE(检索值),才能检索成功,检索范围直接使用日期时间字段即可;如:MAPX("COUNT",DATE(日期时间),日期时间,单行文本)。
3)返回值(result_field)
以 A 表设置 MAPX 公式,跨表取 B 表数据:MAPX(“聚合操作”,字段1,字段2,“返回值”)为例,根据不同的聚合操作,支持设置返回值的字段如下:
聚合操作 | 支持的返回值字段 | 返回值计算方法 |
first | 单行文本、多行文本、数字、日期时间、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、提交时间、更新时间、扩展字段 | 取字段 1=字段 2时,B 表中第一条入库的数据对应的返回字段值 |
last | 单行文本、多行文本、数字、日期时间、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、提交时间、更新时间、扩展字段 | 取字段 1=字段 2时,B 表中最后入库的数据对应的返回字段值 |
max | 数字 | 取字段 1=字段 2时,B 表所有数据数字字段的最大值 |
单行文本、多行文本、日期时间、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、提交时间、更新时间、扩展字段 | 取字段 1=字段 2时,B 表所有数据按照字符串比较,返回对应字符串最大值 | |
min | 数字 | 取字段 1=字段 2时,B 表所有数据数字字段的最小值 |
单行文本、多行文本、日期时间、单选按钮组、复选框组、下拉框、下拉复选框、流水号、微信昵称、微信 OpenID、提交时间、更新时间、扩展字段 | 取字段 1=字段 2时,B 表所有数据按照字符串比较,返回对应字符串最小值 | |
avg | 数字 | 取字段 1=字段 2时,B 表所有数据数字字段的平均值 |
sum | 数字 | 取字段 1=字段 2时,B 表所有数据数字字段的求和 |
count | 单行文本、多行文本、数字、日期时间、单选按钮组、复选框组、下拉框、下拉复选框、流水号、地址、定位、微信昵称、微信 OpenID、提交人、提交时间、更新时间、扩展字段 | 取字段 1=字段 2时,B 表录入了多少条匹配的数据 |
注:
1)检索范围和返回值中的字段不能选择子表单字段;
2)检索值不能为成员字段,当需要以成员字段计算时,可以先将成员字段转成文本字段保存编号,然后以文本字段来计算,检索范围字段也是一样的设置。
函数示例:
跨表有两种情况:
1)同 1 张表单,录入数据时调用之前已经提交的数据;
2)2 张表单,A 表录入数据时,调用 B 表已经录入的数据。
应用举例:单条件
有一张选课表,在选择课程时,需要计算出自己是第几个报名的,即计算出某一课程的已报名人数,再+1。
可以看出,此处的检索值为课程,选了哪门课程,就统计这门课程的已报名人数。则公式为:
MAPX("COUNT",课程,课程,姓名)
对“我是第几个报名的”字段进行编辑函数:
MAPX("COUNT",课程,课程,姓名)+1
看一下效果:
- 选择了健身课,就是在之前录入的课程数据里,查找值为“健身”的,并对选择健身的姓名进行计数,发现前面已经有 3 人报名,自己是第 4 个报名的。
- 同理,选择了音乐,就是在之前录入的课程数据里,查找值为“音乐”的,并对选择音乐的姓名进行计数,发现前面已经有 1 人报名,自己是第 2 个报名的。
- 选择了舞蹈,就是在之前录入的课程数据里,查找值为“舞蹈”的,并对选择舞蹈的姓名进行计数,发现前面已经有 2 人报名,自己是第 3 个报名的。
注:当设置字段公式为 MAPX("COUNT",课程,课程,姓名) 时,如返回值为 0,则字段会显示为空值。
应用举例:多条件
MAPX 的多条件应用举例参见:MAPX多条件应用。
RECNO
RECNO 函数用于累计计算当前表单被新打开的次数,起始值为1。
函数用法:
RECNO()
函数示例:如,可结合CONCATENATE 函数添加固定前缀或后缀,对表单查看人数进行计次,用于抽奖、排名等场景中。点击体验效果
CONCATENATE("恭喜您,您是第",RECNO(),"位查看表单的用户!")
TEXTDEPT
TEXTDEPT 函数可以获取部门名称和部门编号。
函数用法:
1)获取部门名称:
TEXTDEPT(部门单选字段, "name")
2)获取部门编号:
TEXTDEPT(部门单选字段, "deptno")
函数示例:如,通过 TEXTDEPT 函数获取通讯录中的部门编号,可以对部门编号进行重复值校验以及其他数据联动等。
TEXTDEPT(部门,"deptno")
TEXTUSER
TEXTUSER 函数可以获取成员的通讯录姓名和成员编号。
函数用法:
1)获取成员的通讯录姓名:
TEXTUSER(成员单选字段,"name")
2)获取成员编号:
TEXTUSER(成员单选字段,"username")
函数示例:如,通过 TEXTUSER 函数获取通讯录中的成员编号,可以对成员编号进行重复值校验以及其他数据联动等。
TEXTUSER(提交人,"username")
TEXTLOCATION
TEXTLOCATION 函数用于分别获取定位」和「地址」字段中的完整地址、省、市、区、详细地址;还可以获取定位字段的经纬度信息。
函数用法:
TEXTLOCATION(定位/地址字段,text_format)
函数示例:以「江苏省无锡市锡山区安镇街道信达大厦」这个位置为例,获取对应信息的公式如下:
公式 | 含义 | 输出结果 |
TEXTLOCATION(定位/地址字段,"address") | 提取完整地址 | 江苏省无锡市锡山区安镇街道信达大厦 |
TEXTLOCATION (定位/地址字段,"province") | 提取省 | 江苏省 |
TEXTLOCATION (定位/地址字段,"city") | 提取市 | 无锡市 |
TEXTLOCATION(定位/地址字段,"district") | 提取区 | 锡山区 |
TEXTLOCATION(定位/地址字段,"detail") | 提取详细地址 | 安镇街道信达大厦 |
TEXTLOCATION(定位字段,"lng") | 提取经度 | 120.31237 |
TEXTLOCATION(定位字段,"lat") | 提取纬度 | 32.49099 |
如获取具体的市:
TEXTLOCATION (定位字段,"city")
TEXTPHONE
TEXTPHONE 函数可以获取手机字段的值和校验状态。
函数用法:
1)获取手机字段的值:
TEXTPHONE(手机字段,"phone")
2)获取手机字段的校验状态,若手机号未经过短信校验,则结果为 0 ,若经过短信校验,则结果为 1:
TEXTPHONE(手机字段,"verified")
函数示例:如,在销售场景下,业务员收集了多份用户信息,但只有部分数据在收集时开启了短信校验,可通过 TEXTPHONE 函数获取全部数据的校验状态,并筛选出经过短信校验的用户数据:
TEXTPHONE(手机,"verified")
UUID
UUID 函数可以用于生成随机码,默认的输出格式为 32 位字符串 + 4 个“-”,一共 36 位。
函数用法:
UUID()
LEFT(UUID(),15)