-
Bryce 小试身手Lv3
发表于2022-8-23 16:12
楼主
本帖最后由 Bryce 于 2022-8-28 21:26 编辑
需求场景:
在制作报表中经常会用到交叉浮动的表格,能够清晰的进行交叉维度之间的数据展示,交叉部分的指标数据既向下浮动,也向右浮动,如果我们想通过旁边加上一列来显示排名的方式对这样的数据进行全数据排名、列排名的话,该如何去实现呢?
最终效果:
1.全数据排名
以上为例,全数据排名就是显示交叉浮动出来的所有数据的排名,GRID1.B2$$可以以一个数组的形式拿到B2这个表元浮动出的所有数据,再用rank函数来排序就行了,用GRID1.B2$$.rank(GRID1.B2)来显示排名。这样就可以显示浮动出的所有数据的排名,例如我这里共有31*4=124条数据,排名从1排到124。
2.列排名
但其实在日常的需求中,我们之所以会设计交叉浮动就是因为我们需要对不同维度的数据来进行分析,所以对浮动出的每列都进行单独的排序这样的场景更常见。实现步骤如下
step1:根据全数据排名的经验,我们可以用GRID1.B2$$把浮动出的所有数据以一个一维数组的形式拿到。
step2:接下来我们需要用split函数将这个数组分隔成多维数组,例如[1,2,3,4,5,6,7,8].split(4)得到[[1,2,3,4],[5,6,7,8]],这样可以以数组的形式将每一列分隔开,通过取出多维中的一维数组的方法单独将每一列依次取出,来进行数据在这个数组中的排名,这里split的参数就是向下浮动的行数,用GRID1.A2$$.length表示,这样GRID1.B2$$.split(GRID1.A2$$.length)就拿到了分隔后的多维数组,对数组函数不熟悉可以参考一下https://bbs.esensoft.com/thread-133624-1-1.html
step3:接下来只需要用[0]、[1]......来取就好了,因为向右浮动出的列是固定的,所以这里根据实际设计写个公式就可以了,以这个例子为例,用col()/2-1就可以达到0、1、2...的效果。
step4:做完这些就只剩最后一步了,找到数据在对应数组中的排名,用rank函数排序,GRID1.B2$$.split(GRID1.A2$$.length)[col()/2-1].rank(self.leftcell)
需求场景:
在制作报表中经常会用到交叉浮动的表格,能够清晰的进行交叉维度之间的数据展示,交叉部分的指标数据既向下浮动,也向右浮动,如果我们想通过旁边加上一列来显示排名的方式对这样的数据进行全数据排名、列排名的话,该如何去实现呢?
最终效果:
1.全数据排名
以上为例,全数据排名就是显示交叉浮动出来的所有数据的排名,GRID1.B2$$可以以一个数组的形式拿到B2这个表元浮动出的所有数据,再用rank函数来排序就行了,用GRID1.B2$$.rank(GRID1.B2)来显示排名。这样就可以显示浮动出的所有数据的排名,例如我这里共有31*4=124条数据,排名从1排到124。
2.列排名
但其实在日常的需求中,我们之所以会设计交叉浮动就是因为我们需要对不同维度的数据来进行分析,所以对浮动出的每列都进行单独的排序这样的场景更常见。实现步骤如下
step1:根据全数据排名的经验,我们可以用GRID1.B2$$把浮动出的所有数据以一个一维数组的形式拿到。
step2:接下来我们需要用split函数将这个数组分隔成多维数组,例如[1,2,3,4,5,6,7,8].split(4)得到[[1,2,3,4],[5,6,7,8]],这样可以以数组的形式将每一列分隔开,通过取出多维中的一维数组的方法单独将每一列依次取出,来进行数据在这个数组中的排名,这里split的参数就是向下浮动的行数,用GRID1.A2$$.length表示,这样GRID1.B2$$.split(GRID1.A2$$.length)就拿到了分隔后的多维数组,对数组函数不熟悉可以参考一下https://bbs.esensoft.com/thread-133624-1-1.html
step3:接下来只需要用[0]、[1]......来取就好了,因为向右浮动出的列是固定的,所以这里根据实际设计写个公式就可以了,以这个例子为例,用col()/2-1就可以达到0、1、2...的效果。
step4:做完这些就只剩最后一步了,找到数据在对应数组中的排名,用rank函数排序,GRID1.B2$$.split(GRID1.A2$$.length)[col()/2-1].rank(self.leftcell)