全部产品
云市场

排名

更新时间:2019-03-15 19:48:35

作用

RANK用于在一个表单中,先按照条件筛选数据,再对数据按照一定规则排序后,找出其中某一条数据的排名。
RANK主要用于”考试场景中获得自己分数排名”、”签到场景中自己是第几个签到”等场景

公式说明

RANK(“表单ID”, “数据过滤条件”, “定位某一条数据的条件”, “排序规则”)

参数一: 表单ID

在表单编辑页面链接上,形式为FORM-XXXX, 比如 “FORM-5Q566O71N993SL9XY9SVGNNY460Y1XNUZXISJ0”

1

参数二: 数据过滤条件

在一个表单所有数据中,根据条件进行过滤,只从符合条件的数据中进行排名。

  • 若要对一个表单中所有数据进行排名,则直接填””
  • 只能对表单中的组件进行过滤

主要有以下几种形式:

  • QUERYEQ(“组件ID”, “组件值”): 过滤某个组件的值等于指定值的数据
  • QUERYGT(“组件ID”, “组件值”) : 过滤某个数字组件的值大于指定值的数据
  • QUERYGTE(“组件ID”, “组件值”) : 过滤某个数字组件的值大于等于指定值的数据
  • QUERYLT(“组件ID”, “组件值”) : 过滤某个数字组件的值小于指定值的数据
  • QUERYLTE(“组件ID”, “组件值”) : 过滤某个数字组件的值小于等于指定值的数据
  • QUERYAND(QUERYEQ(“组件ID”, “组件值”),QUERYGT(“组件ID”, “组件值”), …. ) : AND,可将多个条件进行拼接
  • QUERYOR(QUERYEQ(“组件ID”, “组件值”),QUERYGT(“组件ID”, “组件值”), ….) : OR,可将多个条件进行拼接

参数三: 定位某一条数据的条件

前面两个参数用于确定表单中数据的范围。
这个参数用于唯一确定一条数据,找到这条数据在所有数据中排第几
形式和参数二一致,即用QUERYEQ,QUERYGT这些等于,大于条件来定位数据
注意: 当条件定位到多条数据时,以第一次出现时的序号为主

参数四: 排序规则

对参数一,参数二,定位的这批数据进行排序。比如 按照分数从大到小排
形式:

  • ORDERBY(“组件ID”, “排序规则”)
    • 比如 ORDERBY(“number_xy243”, “”DESC), 表示按照数字组件number_xy243的值降序排列
    • 比如 ORDERBY(“text_xdy123”, “”ASC), 表示按照文本组件text_xdy123的值升序排列
  • ORDERBYUNIT(ORDERBY(“组件ID”, “排序规则”), ORDERBY(“组件ID”, “排序规则”)…): 当有多个ORDERBY规则时,可以用ORDERBYUNIT来进行组合

场景举例

在一次考试系统中,有一张表单记录了每个考生的成绩,以及答题所花的时间。
现在每个考生进入考试结果页时,希望可以获取到他的分数排名情况(当分数相同时,平均答题时间越短,排名越靠前)

表单定义

2

公式举例

  • 参数一: 从链接上,我们可以看到表单ID是: FORM-EF6Y83URN24JISLNNIMRKX72ZITIWK1T95CCIDJ91
  • 参数二:现在是要对”答题总情况表”中所有人的答题情况进行排名,所有数据都符合条件,因此过滤条件为空,即””
  • 参数三: 要获取的是当前登录人的排名情况,因此过滤条件是表单中 “答题人工号”组件的值为”当前登录人工号”的那条数据。

    • 从表单设计页面,得到”答题人工号”组件ID 是 “textField_je3zchft”
    • 当前登录人工号,可以直接用公式 LOGINUSERWORKNO() 获取

      所以参数三最后的值为 : QUERYEQ(“textField_je3zchft”,LOGINUSERWORKNO())

      3

  • 参数四: 排序规则。需求是 分数高的在前面,分数相同时平均答题时间少的在前面。即按”总得分倒序排列”,”平均答题时长升序排列”

    • 在表单设计页面,用同样的方式,获取到 “总得分”组件ID为: numberField_jdicc6kx, “平均答题时长”组件ID为”numberField_je3zchfu”

      因此参数四为 : ORDERBYUNIT(ORDERBY(“numberField_jdicc6kx”, “DESC”), ORDERBY(“numberField_je3zchfu”, “ASC”))

      4

把参数一到参数四拼接后,最后的公式为

RANK(“FORM-EF6Y83URN24JISLNNIMRKX72ZITIWK1T95CCIDJ91”, “”, QUERYEQ(“textField_je3zchft”,LOGINUSERWORKNO()), ORDERBYUNIT(ORDERBY(“numberField_jdicc6kx”, “DESC”), ORDERBY(“numberField_je3zchfu”, “ASC”)))