如何从日期范围的SSAS多维立方体(MDX)查询12个月的运行平均值?

时间:2016-03-24 11:31:23

标签: sql ssas mdx

我想获得12个月平均运营的销售数据。我写了这个MDX查询:

WITH MEMBER [Measures].[12m average] AS
Avg
(
[Date].[Month].CurrentMember.Lag(11) :
[Date].[Month].CurrentMember,
 [Measures].[Sales Quantity]
)
SELECT
{ [Measures].[Sales Quantity], [Measures].[12m average] } ON COLUMNS,
NON EMPTY { CROSSJOIN([Product].[Product Name].Allmembers, [Date].[Month].AllMembers) } ON ROWS
FROM [Sales]
where { [Date].[Date].&[2016-01-01T00:00:00] : [Date].[Date].&[2016-02-28T00:00:00] }

查询返回正确的销售数量聚合,但 12m平均值不正确。由于日期范围在哪里,平均值无法获得过去12个月的数据。

例如,对于2016 - 01月 12m的平均值,我们需要获得2015-01 - 2016-01数据,但日期范围从2016-01-01T00:00:00。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如Tab所示,WHERE中的范围可以移动:

WITH 
SET [TargetMths] AS
   EXISTS(
     [Date].[Month].AllMembers
    ,[Date].[Date].&[2016-01-01T00:00:00] : [Date].[Date].&[2016-02-28T00:00:00]
   )
MEMBER [Measures].[12m average] AS
  Avg(
    [Date].[Month].CurrentMember.Lag(11):[Date].[Month].CurrentMember,
    [Measures].[Sales Quantity]
  )
SELECT
  { 
    [Measures].[Sales Quantity]
   ,[Measures].[12m average] 
  } ON 0,
NON EMPTY 
    [Product].[Product Name].Allmembers
  * [TargetMths] ON 1
FROM [Sales];

答案 1 :(得分:0)

从WHERE子句中取出日期范围,并使[销售数量]成为使用该日期范围的计算度量。