代码改变世界

MDX Cookbook 12 - 计算 SMA 简单移动平均 LastPeriods() 函数的使用

2013-12-05 22:37  BIWORK  阅读(1692)  评论(4编辑  收藏  举报

先认识一下这几个名词 Moving Average (MA) 移动平均,或者叫做移动平均线,是技术分析中一种分析时间序列数据的工具。最常见的就是利用股价,回报或交易量等变数计算出移动平均。可以利用移动平均反映出长期趋势或周期,在数学上这个也叫做卷积 Rolling Average。

还有一个概念叫做 SMA (Simple Moving Average 简单移动平均),是指某个变数之前 N 个数值的累加平均。比如,收市价的10日简单移动平均是指之前10日收市价的平均数,那么这里就可以使用 SMA 10 来表示。

先看看每天的网络订单数量的情况 -

 

我们要在这个基础上看看 2006年开始 SMA 30 的订单情况,也就是说统计当前日期的前30天的移动平均 Moving Average,为了方便我把对应的 SMA 30 的开始日期我也写上。

WITH
MEMBER [Measures].[SMA 30 of Order Count]
AS
   AVG(
            LastPeriods(30,[Date].[Date].CurrentMember)
           ,[Measures].[Internet Order Count]
          )
MEMBER [Measures].[SMA 30 Date]
AS 
LastPeriods(30,[Date].[Date].CurrentMember).Item(0).Name
SELECT
{
   [Measures].[Internet Order Count],
   [Measures].[SMA 30 of Order Count],
   [Measures].[SMA 30 Date]
} ON 0,
{[Date].[Date].[Date].MEMBERS} ON 1
FROM [Adventure Works]
WHERE [Date].[Calendar Year].&[2006]

要注意的是 2006年1月1日前29天才是 2005年12月3日,因此这里的 30 其实还包括了它自己这一天。

 

关于 LastPeriods () 函数的使用,我的这篇 MDX 读书笔记中有详细的解释 - MDX Step by Step 读书笔记(九) - Working with Time 处理时间

更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)