PQ实战 | 数据分组压缩思路分享

前几日群里E友们出的题,我们就直接借用一下案例(偷懒),核心还是来熟悉一下PQ的分组及一些常用的函数
感受一下,PQ在数据处理方面的强大!
讲解方式:动画演示,主要分解思路,适当函数讲解!
演示版本:365,其他版本应该没有函数自动提示
不爱看分布讲解的直接拉到地步查看M函数代码!
问题说明:按照列1,对于列2中连续的数值压缩
我们逐步分解思路:
1、按照第一列先分组,完成A和B各一大组
先完成最外层的处理,也就是按照列1分组,本案例中可以简化
Table.Group(表,分组依据,{"新列名",分组处理}),实际有5个参数,目前只使用前3个。他的功能和SQL中GroupBy 或者Excel中的分组很类似!
2、对分组后的表添加索引
添加索引的后,我们主要使用列2-索引,如果是连续内容,那么他们的差异一定是相同的。
3、列2减去索引列算出差额
我们在上一步分组添加索引后的内容,进一步相减出差额,我们可以看到如果内容连续,那么和索引差额后肯定相等,因为连续的内容上下差1,索引也是如此,当然也可以是等差!
4、对索引差额后的s进一步分组
s列的相同数值就是连续的内容,也就是需要压缩的,我们先分好组,下一步来压缩
5、压缩分组内容
这里我们使用到一个技巧,就是我们书写M的过程中可以通过深化,观察一下多层包裹的内容,便于进步分析,这里主要使用List.Transform遍历
这个之前有讲过:
扩展学习:Transform函数
Text.Format和我们的工作表函数Text格式化函数有点类似!
6、最后合并压缩好的内容
使用Text.Combine可以合并把List中的文本按照固定分隔符合并起来!
有点瑕疵的就是一个内容也是使用了短线分割,可以优化一下
7、优化单值显示
使用List.Count判断一下列表中的元素个数,如果是1个就不压缩,不压缩我们也可以使用Text.From来代替上面的Text.Format,这里的if和一般的编程语言很像,但是不同于工作表函数if
以上就是我们这个数字压缩练习的全部内容,虽然看上去内容很多,但是只要你思路清晰,还是很简单的!
格式化后全部代码:
关于实际应用,比如连续打卡分组,这里的连续更好的表示是特定规律,比如我们都是要求间隔一天送货,那么我们1、3、5 我们也可以判断为连续!
这些道理都是一致的,快去动手试试吧!
源码及附件下载:
聊天窗口回复:PQ分组练习
(0)

相关推荐