如何从具有日期范围的 SSAS 多维立方体 (MDX) 查询 12 个月 运行 的平均值?
How to query 12 month running average from SSAS Multidimensional Cube (MDX) with date range?
我想获取 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] }
查询returns正确销售数量聚合,但12m平均不正确。由于日期范围的原因,平均值无法获取最近 12 个月的数据。
例如,对于 2016-01 月 12m 平均值 我们需要获取 2015-01 - 2016-01 的数据,但日期从 2016-01-01T00:00 开始: 00.
如何解决这个问题?
从 WHERE 子句中取出日期范围,并使您的 [销售数量] 成为使用该日期范围的计算量度。
正如 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];
我想获取 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] }
查询returns正确销售数量聚合,但12m平均不正确。由于日期范围的原因,平均值无法获取最近 12 个月的数据。
例如,对于 2016-01 月 12m 平均值 我们需要获取 2015-01 - 2016-01 的数据,但日期从 2016-01-01T00:00 开始: 00.
如何解决这个问题?
从 WHERE 子句中取出日期范围,并使您的 [销售数量] 成为使用该日期范围的计算量度。
正如 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];