如何在Power Query实现Excel的sumproduct功能

作为一名游戏策划,有时候需要计算某一整个月的加权留存,在Excel中可以直接用Sumproduct去计算,但是有时候需要用到Power Query中的Group功能快速整合多个月的数据,因此在PQ中,使用这一公式的需求也是有的,而M函数并不提供类似的便捷的函数。

但是我们可以通过几个函数去组合构建出类似的函数功能(完全不需要用到自建函数)

用到的函数列表如下(此处感谢B站Up孙兴华提供的免费M函数课程,我的关于PQ的一切都是来自于他):

List.Sum

List.Transform

使用示例:

List.Transform(列表,对元素进行转换的规则)

= List.Transform({1,2,3},each _+1)      // 列表中每个元素+1

或者= List.Transform({1,2,3},(x)=>x+1)

List.Zip

使用示例:

List.Zip({{"孙兴华", "李小龙"}, {20, 80}})      返回:{{"孙兴华", 20},{"李小龙",80}}

List.Product

使用示例

 List.Product({1,2,3})  返回:6

1*2*3=6

解决问题:加权计算某个月内玩家的留存数据

假设下图为1月1~4日数据,以及其对应的注册玩家数和次留,速算这4天的加权次留为 (10*0.1 + .... + 40*0.1)/ (10+20+30+40)* 100%=  12%

思路:为了实现Sumproduct中数组对应项的值能相互运算的功能,所以需要用到List.Zip把对应向项的值封装到同一个List里面,然后再利用List.Product实现列表中的元素相乘。

又因为List.Zip封装出来的结果为大列表里面装着N个小列表,所以为了能够调用这些小列表执行List.Product函数,需要用到List.Transform函数

因此最终的公式为:

= Table.Group(源,{"日期"},{"加权次留",each List.Sum(List.Transform(List.Zip({[注册玩家数],[次留]}),(x)=>List.Product(x)))/List.Sum([注册玩家数])})

得出来的结果为:

以上,得出了我们想要的结果,实现了对应的功能。

用List.Accumulate其实也可以实现类似功能,不过那个就复杂的多啦~

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值