之前我们讲了连续日期的移动平均的求法,那我们这次来看下如果不连续日期如何计算移动平均。
数据表——表1
效果
我们知道计算移动平均有3个条件:均值起始值,均值结束值以及最早可计算日期。其中连续和不连续日期最大的差异就是在均值的起始值。因为之前我们的起始值表示的是 '表1'[日期]>=Earlier('表1'[日期])-5)
,但是在不连续日期时,这个计算表达式就不能准确的表示。所以我们需要另外换一种方式来表达往前推5日。
因为日期是不连续的,所以起始日应该是当天往前推第5天,而要表达不连续往前推5天就不能直接用日期-5的表示方式,所以我们需要计算当前日期的排序,这里可以使用2种表达方式,一种是CountRows,一种是RankX。
CountRows(Filter('表1','表1'[日期]<=Earlier('表1'[日期]))-5
RankX('表1','表1'[日期],,ASC)-5
结束日期应该就是当前日期,这里会涉及到Earlier函数
'表1'[日期]<Earlier('表1'[日期])
我们要计算5日均线,那就必须要有5日的数据才可以用于计算
Calculate(LastnonBlank('表1'[日期],1),TopN(5,'表1'))
先筛选出最前的5行,然后取最后一天的日期。当然这里也可以直接用>计算出的序列
CountRows(Filter('表1','表1'[日期]<=Earlier('表1'[日期]))>5
如果我们不需要另外单独建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()
)
如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有