powerquery分组_Power Query 神奇的分组统计1

正文:

今天给大家分享一下,在PQ时分组的一些玩法。

案例一:

关于分组的玩法我收集了几个案例,往后会一个个写出来,今天会先来点简单的。

要求:

左表的数据转换成右表的结构。

这个问题如果写VBA来处理也不难,判断装数组再join一下,应该就可以了,我们今天来用Power Query来处理下。

= Table.Group(源,"类型",{"a",each Text.Combine([值],",")})

老规矩先上代码。

额。。。这时候你可能会想,大叔,你代码是不是复制少了,这么复杂的问题,你怎么就这么丁点代码?!!实际上就这么一行代码就可以解决,是不是惊呆了,嘻嘻!!

解答:

下面我们简单的看看,这个分组函数的说明。

第一参数是表,第二参数是你要分组的列名,第三参数可以理解为处理方式。第四,第五参数放在后面再讲。

华丽的分割线。

案例二:

来个综合的实战案例。

要求:

有接触过装修类或者工程类工作的朋友应该有经验。很多时候做一个工程会用同一种材料,但会用在不同的地方。但是往往我们要在采购材料之前先计算好用量。

左表是一张数据表,序号里的一..二..三代表不同的项目,数量列里记录的是项目里字项目的用量,有些数据是直接记录用量,有些数据记录的是用量的计算方法,比如(8.6*0.18)。最终我们最后要计算出每一个项目的总用量。

let

源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],

a = Table.Group(

Table.FillDown(源,{"序号"}),"序号",

{"a",each Expression.Evaluate(

Text.Combine(

List.Transform(List.Select([数量],(x)=> x<>null),each Text.From(_)),"+"

)

)

}

)

in

a

既然要统计分组的数据,那么同样的套路,第一步用Table.Group就肯定没有错。注意,因为数据源的序号列只有第一行有数据,所以我们要先对序号列进行向下埋充处理。处理后再作为Table.Group的第一参数。

接下来我们要对第三参数里的自变量作处理,先要把不为null的数据提取出来。List.Select([数量],(x)=> x<>null)这里担心内层的自变量跟外层的有冲突,所以我这里先把内层的定义成x。

现在好像只要把List里面的值全部加起来就能达到我们想要的效果,问题就是要怎样加,我想到的是Expression.Evaluate,这个函数可以直接把带有公式的字符串直接运算并返回对应的结果,比如"1+2+3*4",可以直接得出15。

List里的数据转换成一串字符串,好不好处理,肯定好处理啊,直接外层套一个Text.Combine不就可以了吗,我当时是这样想的,逻辑上没问题,但是会出错,我们一起来看看。

出错原因也很简单,数值是不能直接合并的,要多走一步,把数值先换化成文本,再来合并应该就没问题了。

最后的最后,套上一层Expression.Evaluate,大功告成!!

感谢观看!!

剧透下期分享神奇的分组2,神秘的第四,第五参数会上场。

总结:

知识决定思路,以上仅为大叔个人解法,绝不是唯一解。欢迎各路大咖留言指点。

如果您没能看懂代码,也不要紧,因为目前国内会玩M语言的人并不算多,如果你对M感兴趣的话,建议您可以拜读一下施总的博客Power Query爱好者-pqfans_M语言学习资料_教程_分享_论坛_博客,是目前国内唯一一个可以免费学习到M的地方。

感谢观看,Thanks!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值