美文网首页
如何在Power Pivot中通过添加列计算不连续日期移动平均?

如何在Power Pivot中通过添加列计算不连续日期移动平均?

作者: Data_Skill | 来源:发表于2019-07-25 09:52 被阅读0次

    (二) 通过添加列计算不连续日期移动平均

    之前我们讲了连续日期的移动平均的求法,那我们这次来看戏如果不连续日期如何计算移动平均。
    数据表——表1

    表1表1

    效果

    效果效果

    我们知道计算移动平均有3个条件:均值起始值,均值结束值以及最早可计算日期。其中连续和不连续日期最大的差异就是在均值的起始值。
    因为之前我们的起始值表示的是'表1'[日期]>=Earlier('表1'[日期])-5),但是在不连续日期时,这个计算表达式就不能准确的表示。所以我们需要另外换一种方式来表达往前推5日。

    1. 函数思路

    A. 计算均值的起始日期

    因为日期是不连续的,所以起始日应该是当天往前推第5天,而要表达不连续往前推5天就不能直接用日期-5的表示方式,所以我们需要计算当前日期的排序,这里可以使用2种表达方式,一种是CountRows,一种是RankX。

    • CountRows写法:
    CountRows(Filter('表1','表1'[日期]<=Earlier('表1'[日期]))-5
    
    • RankX写法:
    RankX('表1','表1'[日期],,ASC)-5
    

    B. 计算均值的结束日期

    结束日期应该就是当前日期,这里会涉及到Earlier函数

    '表1'[日期]<Earlier('表1'[日期])
    

    C. 计算最早可达到条件的日期

    我们要计算5日均线,那就必须要有5日的数据才可以用于计算

    Calculate(LastnonBlank('表1'[日期],1),TopN(5,'表1'))
    

    先筛选出最前的5行,然后取最后一天的日期。
    当然这里也可以直接用>计算出的序列

    CountRows(Filter('表1','表1'[日期]<=Earlier('表1'[日期]))>5
    

    2. 函数合并

    如果我们不需要另外单独建1列用作序列,可以直接把起写在内存里,这里我们使用var变量来处理。

    var number=
    CountRows(Filter('表1',
                     '表1'[日期]<=Earlier('表1'[日期])
                     )
              )
    return 
    if(number>5,   //满足5日均线计算条件
       AverageX(
    //筛选序列小于当前值            
                Filter('表1',
                       CountRows(FILTER('表1',
                                 '表1'[日期]<=Earlier('表1'[日期])
                         )
                    )<number && 
    //同时筛选序列大于等于往前推5次
                       CountRows(Filter('表1',
                                        '表1'[日期]<=Earlier('表1'[日期])
                                       )
                                 )>=number-5
                       ),
               '表1'[金额]),
       Blank()
       )
    

    喜欢的点个赞咯!

    相关文章

      网友评论

          本文标题:如何在Power Pivot中通过添加列计算不连续日期移动平均?

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