1. 概述
1.1 预期效果
一般情况下,排名都是通过 SORT 函数 的方式实现。
但有时用户需实现:在填报模式下,根据输入值的不同来“动态改变”某一列值的排名情况功能时,上面的方法就无法满足了,预期效果如下图:
1.2 实现思路
通过报表内置的 rank() 函数来变换实现。
RANK(number,ref,order):返回一个数在一个数组中的秩。(如果把这个数组排序,该数的秩即为它在数组中的序号。)
参数说明:
number:所求秩的数(可以是 Boolean型,true=1,false=0)
ref:可以是数组,引用,或一系列数,非实数的值被忽略处理(接受 Boolean 型,true=1,false=0)
order:指定求秩的参数,非零为升序,零为降序
2. 示例
2.1 准备数据
新建普通报表,新建内置数据集,新增两个字段为:「姓名」、「分数」,类型分别为「字符串」、「整数」。如下图所示:
2.2 设计报表
将字段拖入对应的单元格中,设计表格如下图所示:
1)给 C2 单元格添加 数字控件
2)D2 单元格输入公式:B2+C2
3)E2 单元格输入公式:rank(D2, D2[!0], 0),其中 D2[!0] 表示 D2 扩展出来的所有单元格
注:其中 B2 ,C2 默认需为数字格式,才可实现排名,若 B2 ,C2 单元格为其他格式,则会出现下图情况:
此时在 D2 单元格输入公式 sum(B2+C2),则可解决排名乱码问题。
2.3 保存预览
1)PC端
保存模板,点击「填报预览」,效果同 1.1 节预期效果一致。
2)移动端
App 端和 H5 端均支持,效果如下图所示:
3. 已完成模板
已完成模板,可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\动态排名.cpt
点击下载模板:动态排名.cpt