案例:某医疗机构需要从来自数据库的40万条验光记录中筛选出验光时间跨度大于等于4年的验光记录,用以确定目标人群,配合产品的销售。
筛选条件:
例1:
弼马温
首次验光时间2006/2/3
最后验光时间2012/9/5
跨度大于4年,验光记录全部保留
例2:
萧十一郎
首次验光时间2007/5/11
最后验光时间2009/7/9
跨度小于4年,验光记录全部删除
期望很简单,但是如何去做呢?
1.使用Excel函数公式能否解决问题呢?
1.1创建透视表,建立基于姓名和首末验光时间的三列数据
1.2创建新工作表,判定保留项
1.3元数据表添加列,将判定值返回元数据并进行有效数据的筛选
期望达到了,逻辑不复杂,公式也不繁琐。
但是。。。。
我们通过不光创建了两张新表,还在元数据上添加了列,而且还修改了元数据的表样式。
试想一下:
1.如果元数据有更新,你是不是还要重复做一遍?
2.示例中只有1050行数据,面对40万行数据,两张新表能否快速制作,公式是否还能快速运行??
3. 所有的操作都在源数据表上进行,体量本来已经很大再加上公式的运用,Excel会不会崩掉???
其实这就是长期围绕Excel使用人员的问题:
1. 不论简单还是复杂,面对同一情形生成的解决方案每次都要重新做一遍,缺乏普适性;
2. 超大的数据量配合公式运算极可能down掉你的Excel!
我们能做什么?
1.祈祷,目标数据可以从天而降;
2.众包,团结小秘书展开大会战。
3. 穷且益坚,还是我们自己来
我们立志:
针对固定情形提供一个普适性的方案。一次制定多次有效并且能实时显示元数据的更新,还能减少内存的占用量。
ShowTime Now,PQ君!
先looklook数据结构:
每个人的记录存在不定的多行且每行具备独一的验光时间:
白板上写下解决逻辑:
1.将总表记录拆分成基于个人的分表记录;
2.提取每张分表的验光时间列表;
3.提取每个人的首末验光时间;
4.提取验光时间跨度;
5.根据时间跨度进行筛选;
6.筛选的有效记录整合为一张总表。
逻辑照进现实:
1.导入数据到新建工作簿,进入PowerQuery编辑器
2.针对前两列进行排序,达到每个人的验光时间记录从旧到新顺次排列
3.按照姓名对验光记录进行分组:
4.添加自定义列,提取个人验光时间列
5.分别添加自定义列,提取每个人首末次验光时间
6.添加自定义列,计算验光时间跨度,并将数值替换为年数
当然5和6也可以并做一步,详细解读请看视频
7.在当前最后一列筛选天数大于或者等于4年的记录
8.保留第二列,删除其他列
9.将当前列扩展开生成总表
10.修改验光时间列的数值格式,完成工作,关闭并上载
11.大功告成
总结:
大体量数据并非都是钢板一块,应该按照其特点进行有效的分析并能大胆的进行解决方案的逻辑推演。本案例的解决方案中以下关键步骤已经列出,方便大家进行更多的探索。
完整操作视频及案例文件已经上传至课堂,长按下图发现更多惊喜:
领取专属 10元无门槛券
私享最新 技术干货