大神指点小白轻松解决中间数据单元格隐藏后的行高问题

楼主
我是社区第161224位番薯,欢迎点我头像关注我哦~
本人是一个大龄网络菜鸟,机缘巧合之下接触帆软,顺带发现一个项目商机,于是赶紧做一个demo要去给客户演示……恶补了一下帆软报表的基础知识就上手,这不,小白立即就遇到了新问题:

有一个需求是统计每个科目的考试成绩的年级前50名在每个班级的分布情况,由于sql也是学的散装的并不熟练,只得通过单元格运算,思路是先把同年级的所有学生成绩筛选出来,进行年级排名后,再统计每个班级有几个前50名的学生,报表模版如下:


但是这里面学生的编号、姓名、分数、排名只是作为中间运算之用,并不是我需要的,我真正需求的数据是班级、人数、比例:


这时,我首先想到把中间数据的单元格隐藏掉,结果行高太感人,因为中间数据把它撑高了:


无奈,琢磨能否用跨sheet取数的方式,在另一个sheet里展现统计结果,结果变成了这样:


在新sheet里,班级数据和科目数据倒是可以自动扩展,然鹅……人数数据因为涉及到横纵两个变量,只能取到一个二维数组。

难道就这样放弃了吗?是否可以通过SLICEARRAY()和INDEXOFARRAY()函数配合当前行的row()和col()去取数呢?尝试了一下,发现常规方式取不到扩展单元格的行号和列号……

无奈,只好到QQ群求助,遇到了大神【风花雪月】,三招两式就把问题解决了:


说说具体的解决方案吧,核心思路是在条件属性里,把空白数据的行高设置为0,但在设置之前,需要先把我们需要的数据单元格设置为“扩展”:


此时,所有需要的数据都跑到了上面,接下来只需要在同样的单元格上设置条件属性,把空白数据隐藏即可:


条件属性设置后,数据表格变成了这样:


最后,把参与中间运算的数据列全部隐藏掉,最终结果如下所示:


虽然过程比较曲折,用单元格计算的效率也不如sql的效率高,但毕竟是解决了一大问题,可喜可贺,不对么?

最重要的是,通过这一个需求,了解到了帆软报表的很多功能:函数、单元格、层次坐标、sql、参数、条件属性、扩展……

再次感谢大神【风花雪月】抽出宝贵时间对俺进行的悉心指导,以一个小白的名义!
编辑于 2018-10-13 12:18  
分享扩散:

沙发
发表于 2018-10-13 12:44:14
你都回答解释完了, 好吧  那我就通过另外的SQL思路 来解决这个select name,score,(select count(distinct score) from t where score>a.score)+1  from t a  order by score 这样就生成了年级排名   然后 一到50的排名数量 用数据列 排名字段 汇总 个数  然后设置过滤条件 小于或者等于50  这样就可以取得1-50的个数  51-100的方法同样使用这个方法 这样也是可以解决你的方法的 编辑于 2018-10-13 12:46  
板凳
发表于 2018-10-13 12:59:12
来自手机
孤陌 发表于 2018-10-13 12:44
你都回答解释完了, 好吧  那我就通过另外的SQL思路 来解决这个select name,score,(select count(distinct  ...

强,我试一下这个办法!
地板
发表于 2018-10-13 20:18:14
楼主,下次记得点击顶部的“提问”按钮
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

3回帖数 1关注人数 4397浏览人数
最后回复于:2022-1-11 15:04

返回顶部 返回列表