美文网首页PowerQuery数据分析
powerquery中如何对连续N行进行计算?

powerquery中如何对连续N行进行计算?

作者: PowerQuery | 来源:发表于2019-10-15 17:43 被阅读0次

    需求也比较简单,如下图所示:


    需求

    对每一天的前三天(包含当天)对应的数值求和,比如8月4日前三天(2-4日)数值求和结果为14,8月5日前三天(3-5日)数值求和结果为17,8月6日前三天(4-6日)数值求和结果为22……以此类推。

    这个需求和上一篇帖子《在powerquery中如何对相邻两行进行计算?》的情形类似,只是稍微复杂了一些。

    所以处理思路也是一样的。

    首先添加索引列

    添加索引列

    然后新增列来获取处理结果

    新增列这里有两种思路:
    一种是直接获取每一行的记录, 然后把它们放到一个list中用List.Sum求和;
    另一种方法更加“优雅”一些,通过动态获取区间,然后再放到List.Sum中求和。

    方法一:获取所有行记录

    = Table.AddColumn(已添加自定义, "连续3行求和", each  
    if
      [索引]>1 
    then 
      List.Sum({已添加自定义[数值]{[索引]-2},已添加自定义[数值]{[索引]-1},已添加自定义[数值]{[索引]}})   
    else  
      null)
    

    List.Sum函数是对计算范围内的数值列表【也就是数值列的一个片段】进行求和。
    接下来要选取符合要求的数值列表。
    那么怎么选择呢?就是在【数值】列中,选择当前行索引号减去2所得到的索引值所对应的行,从它开始,在【数值】列中往后选3个值。

    由于第一二行不足3行,所以没法计算结果,用if来判断索引值是否大于1(因为索引是从0开始),如果不是则设置为null值。

    方法二:动态获取求和区间

    只需要把方法一中List.Sum那一行换成如下的即可:

    List.Sum(List.Range(更改的类型[数值],[索引]-2,3))
    

    这种方法要简洁、“优雅”得多。甚至可以把它再进一步优化为:

    List.Sum(List.Range(更改的类型[数值],[索引]-(n-1),n))
    

    其中的n就是每一个求和区间的长度:如果每3行求和,就是我们的例子;如果每五行求和,也同样适用。这样就把整个求和行数参数化了。

    最后得到的结果如下:


    处理结果

    相关文章

      网友评论

        本文标题:powerquery中如何对连续N行进行计算?

        本文链接:https://www.haomeiwen.com/subject/uaismctx.html