【发布时间】:2015-09-11 14:13:45
【问题描述】:
我想使用完整前几个月的数据来预测下个月的度量值。
例如在 9 月 11 日这一刻,我必须根据 1 月至 8 月的值来预测 9 月的值(因为 9 月尚未结束)。
我正在使用 MDX 函数 LinRegPoint,其层次结构详述如下
- 昏暗时间
- 层次结构时间
- 年份
- 季度
- 月
这是我一直在尝试但没有成功的查询:
WITH
MEMBER [Measures].[Trend] AS
LinRegPoint
(
Rank
(
[Time].[Hierarchy Time].CurrentMember
,[Time].[Hierarchy Time].CurrentMember.Level.MEMBERS
)
,Descendants
(
[Time].[Hierarchy Time].[2015]
,[Time].[Hierarchy Time].CurrentMember.Level
)
,[Measures].[Quality]
,Rank
(
[Time].[Hierarchy Time]
,[Time].[Hierarchy Time].Level.MEMBERS
)
)
SELECT
{
[Measures].[Quality]
,[Measures].[Trend]
} ON COLUMNS
,Descendants
(
[Time].[Hierarchy Time].[2015]
,[Time].[Hierarchy Time].[Month]
) ON ROWS
FROM [Cube];
上述查询返回包括9月份在内的所有月份预测值到今天日期,但是它预测9月份值时取1月到9月份当前日期的实际值。在这种情况下,我需要 LinRegPoint 函数只需要前一个完整的月份,即 1 月到 8 月。
请注意,查询返回 9 个月(9 月)的预测值,但它使用实际值来计算它。这会导致如下图所示的错误线。
注意正斜率线。
注意负斜率线。
问题: 如何从实际值中排除不完整的当前月份,但允许计算预测值。
编辑: 该集合应更改为以实际值排除最后一个月的成员,但为其计算预测值。
感谢您考虑我的问题。
解决方案:
WITH MEMBER [Measures].[Trend] AS
LinRegPoint
(
Rank(
[Time].[Hierarchy Time].CurrentMember
,[Time].[Hierarchy Time].CurrentMember.Level.MEMBERS
)
,Descendants
(
[Time].[Hierarchy Time].[2015]
,[Time].[Hierarchy Time].CurrentMember.Level
)
,[Measures].[QltyNoCurrentVal]
,Rank(
[Time].[Hierarchy Time]
,[Time].[Hierarchy Time].Level.MEMBERS)
),FORMAT_STRING='Standard' //Formating
MEMBER [Measures].[QltyNoCurrentVal] AS
IIF(
[Time].[Hierarchy Time].CurrentMember is [Time].[Hierarchy Time].[2015].[3].[9]
, NULL
, [Measures].[Quality]
),FORMAT_STRING='Standard' //Formating
select {
[Measures].[QltyNoCurrentVal]
,[Measures].[Trend]} ON COLUMNS
,Descendants(
[Time].[Hierarchy Time].[2015]
,[Time].[Hierarchy Time].[Month]
) ON ROWS
FROM [Cube]
【问题讨论】:
标签: sql-server-2012 ssas mdx linear-regression forecasting