案例:简道云怎么计算累计百分比( 数值动态编码、子表单数据汇总 )

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

 

 

近期在“问答”中看到一位道友在问:

简道云怎么计算累计百分比?

 

 

测试链接:

https://tnvew1vqtq.jiandaoyun.com/f/62f77d3af485340007f9179f

 

问题本质:

 

什么是累计百分比?

 

累计百分比是按照需求将当前及之前项的百分比进行累加;比如当前总计有四项,第一项是40%,第二项是30%,第三项是20%,第四项是10%,那么前三项的累计百分比是90%,加在一起的累计百分比是100% 。

 

在简道云中如何表达?

 

涉及到多项及累计,大概率是要用到子表单,于此这个问题就变成了:

子表单中的数据如何按需求进行有效汇总。

 

发散思考:

 

1、需要能计算出当前行在整体中的百分比

 

经测会发现单单的只是用 子表单.数值 /sum(子表单.数值) 达不到效果;

如果想达到效果,则需要在外部建立一个主字段进行汇总,然后再在子表单中求百分比。

 

2、当前行及之前行的数据如何进行有效汇总

 

对于“ABCDEFG”,如果只要前3个字母,left(“ABCDEFG”,3) 即可;

但对于数值,实际使用中会面临位数不固定的问题,那么我们就需要进行一下辅助编码,让位数变的相同,比如 “####50”与“###150”的长度均为6,但经处理后前者可代表两位数、后者可代表三位数。然后结合子表单序号(行号),即可进行后续的汇总运算。

 

解题步骤:

 

1、为子表单添加序号

 

子表单 - 随机码

UUID()

主表单 - 随机码集

CONCATENATE(子表单.随机码)

子表单 - 序号

(SEARCH(子表单.随机码,随机码集)-1)/36+1

 

2、为数值进行辅助编码

 

子表单 - 位数

LEN(TEXT(子表单.数值))

主表单 - 最大位数

LARGE(子表单.位数,1)

子表单 - 编码

RIGHT(CONCATENATE(REPT("#",最大位数),子表单.数值),最大位数+1)

 

3、按需求进行汇总计算

 

主表单 - 数值集

CONCATENATE(子表单.编码)

子表单 - 百分比

子表单.数值/SUM(SPLIT(数值集,"#"))

子表单 - 累计百分比

(SUM(SPLIT(LEFT(数值集,子表单.序号*(最大位数+1)),"#")))/SUM(SPLIT(数值集,"#"))

 

本次收获:

 

在本次测试中,数值编码区别于过去直接设定一个安全的固定长度,尝试了动态编码,编码会结合最大位数进行动态调整,不用再提前考虑数值位数与编码长度。

 

 

更多内容

 

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

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

 

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

添加时请备注:简道云

 

 

 

都看到这里了

如果您觉得有用

赞一个呗

赏一个呗

偶会更有动力哈

分享扩散:

沙发
发表于 2022-8-15 20:05:12
把问题吃透
板凳
发表于 2022-8-18 21:37:37
很赞
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

3回帖数 2关注人数 16905浏览人数
最后回复于:2022-12-5 17:58

返回顶部 返回列表