公式:多维度成绩评级也可以这么简单

楼主
简道云应用场景探索者

近期有道友咨询关于基于成绩评级的问题,这个问题还是比较常见的,比如学生的成绩,比如公司里的评优等等。

 

最初的问题为:

 

 

基于一组随机排序的平均分,前两名评级为A,后三名评级为C,其它为B

 

按照常规理解

 

1、先将平均分整体排一序

2、然后基于序号打上标签

 

这种方式需要通过LARGE()SMALL()函数 建立一个有序的辅助子表单

 

梳理后方式为

 

IF(明细.平均分>LARGE(SPLIT(平均分集,","),3),"A",IF(明细.平均分<SMALL(SPLIT(平均分集,","),4),"C","B"))

LARGE(SPLIT(平均分集,","),3)  中的“3”代表,找到在平均分集中第3个最大值,即前2个最大值;

SMALL(SPLIT(平均分集,","),4) 中的“4”代表,找到在平均分集中第4个最小值,即后3个最小值。

这种方式,只需要建立一个辅助的主字段,如果,评级需求有变化,进行对应的调整即可。

 

后续的问题为:

 

 

基于一组随机排序的平均分,前两名评级为A,后三名评级为C,其它为B

如果平均分一样,则以数学成绩为参考

 

最直接的想法

 

最初看到时,最直接的想法是,直接在原有的公式里嵌套一下不就可以了吗?

然而非也,所有的数据是无序的,你不知道那个相同的平均分是在第几行;

那么针对这个辅助字段再建立一个辅助的子表单可否?

有可能有可以,那么问题来了,如果再加一个维度呢?

继续堆子表单,继续嵌套公式吗?

 

那么如何来解决?

 

通过“云函数”或“自建插件”比较容易,嵌套一下循环即可;

单纯的通过“简道云”,通过公式能不能解决?

 

在PASS了N个想法后,在大脑放空间,突然在想:何不这么干?

 

把两个维度变成一个维度,把多个维度变成一个维度,问题不就简单了!

 

平均分为86.5 数学为 98 可以 看作是 865980( 应修订为:08650980

 

平均分的优先级依然是第一位,后面的数字不会对它造成影响,

平均分一样的时候,则后面的作用就会体现出来;

后面如果需要其它维度,直接拼接上去即可。

 

这样一来,问题就变成了最初始的状态,一个维度的评级,直接用之前的公式即可。

 

测试链接

 

 

测试链接 : https://tnvew1vqtq.jiandaoyun.com/f/63f61d1310107d00086e7fc5

 

本次思考

 

1、解决问题的路径有很多,没有说哪个更好,只是哪个更为合适;

2、白毛黑猫抓住老鼠的就是好猫,不要担心,自己的处理方式复杂,总比没有结果更好;

3、行不通时,不妨跳出来,不要被以往的逻辑框住,大胆设想,细心求证。

 

更多内容:

 

导航:云函数&前端事件&自建插件 内容集 

汇总:论坛中发表过的所有帖子

 

更多沟通交流可添加微信(zmlnow)

添加时请备注:简道云

 

 

分享扩散:

沙发
发表于 2023-3-7 11:11:20
平均分为86.5 数学为 98 应该是  看作是 865098把  不然 一百分怎么办,一百分就是 865100  只有 098的时候一百分才是第一个,不然  980  大于100啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

3回帖数 1关注人数 4665浏览人数
最后回复于:2023-3-7 14:11

返回顶部 返回列表