近期在“问答”中看到一位道友在问:
简道云怎么计算累计百分比?
测试链接:
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)
添加时请备注:简道云
都看到这里了
如果您觉得有用
赞一个呗
赏一个呗
偶会更有动力哈 |