写在前面
大家好,我是从事教育培训行业的Josie,为了实现学生信息数据化,学校去年采购了帆软BI,作为带班老师,跟着学校信息化部门一起学习了fineBI,并将其运用到学生学业成绩分析上。作为学习成果的展示与交流,这里给大家分享一个稍有成就感的案例,实现“时间过滤后取排名后50%的学生成绩”。希望大家能多多评论,互相学习交流。
分析思路
涉及到根据过滤值进行动态计算,所以添加的计算指标应使用聚合函数。1)将“成绩”进行升序排名;2)计算出筛选结果的行数总数;3)设置flag判断,当排名小于总行数的50%,标记为1,反之标记为0;4)将flag拖入结果过滤器,取所有为1的行,即为排名后50%
分析过程
1.数据准备,使用分组表,将学生成绩进行汇总
2.添加计算指标,计算排名 rank_anls()
3.添加计算指标,对学生进行去重计数 counted_agg()
4.添加计算指标,计算学生总数(去重)total()
5.添加计算指标,判断哪些属于排名后50% if()
6.结果过滤,过滤出排名属于后50%的学生成绩
7.取消二次计算的勾选,若不取消,则会对过滤结果进行第二次的flag判断,导致筛选结果里有flag=0的数据
8.最后再拖入时间过滤组件即可
写在最后
写出来后感觉步骤挺简单的,在前面思考时却绕了好些弯,问题一,在自助数据集里通过新增列来计算,实际上是无法实现的,因为数据集里的函数不是聚合的,意味着不能实现动态的选择某一时间后过滤出相应结果,比如排名需要根据时间过滤出的结果重新排。问题二,为什么是取总行数的50%,而不是取排名最大值的50%,后者应该更准确才对,因为可能会出现相同成绩的情况,这个问题通过使用一个简单的数据做了验证,发现排名最大值等于总行数,比如:
|