PredictTimeSeries (DMX)

适用于: SQL Server Analysis Services

返回时序数据的未来预测值。 时序数据是连续的,可以存储在嵌套表或事例表中。 PredictTimeSeries 函数始终返回嵌套表。

语法

  
PredictTimeSeries(<table column reference>)  
PredictTimeSeries(<table column reference>, n)  
PredictTimeSeries(<table column reference>, n-start, n-end)  
PredictTimeSeries(<scalar column reference>)  
PredictTimeSeries(<scalar column reference>, n)  
PredictTimeSeries(<scalar column reference>, n-start, n-end)  
PredictTimeSeries(<table column reference>, n, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES) PREDICTION JOIN <source query>  
PredictTimeSeries(<table column reference>, n-start, n-end, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES) PREDICTION JOIN <source query>  
PredictTimeSeries(<scalar column reference>, n, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES) PREDICTION JOIN <source query>  
PredictTimeSeries(<scalar column reference>, n-start, n-end, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES) PREDICTION JOIN <source query>  

参数

<表列引用><标量列引用>
指定要预测的列的名称。 列可以包含标量数据或表格格式数据。

n
指定要预测的后续步长数。 如果未为 n 指定值,则默认值为 1。

n 不能为 0。 如果没有执行过至少一次预测,则函数将返回一个错误。

n-start、n-end
指定时序步长的范围。

n-start 必须是整数,不能为 0。

n 端 必须是大于 n 开始的整数。

<源查询>
定义用于进行预测的外部数据。

REPLACE_MODEL_CASES | EXTEND_MODEL_CASES
指示如何处理新数据。

REPLACE_MODEL_CASES 指定应使用新数据替换模型中的数据点。 但是,预测基于现有挖掘模型中的模式。

EXTEND_MODEL_CASES 指定应将新数据添加到原始定型数据集。 仅在新数据已用完之后才根据组合的数据集执行未来预测。

这些参数仅在使用 PREDICTION JOIN 语句添加新数据时才可用。 如果使用 PREDICTION JOIN 查询并且没有指定参数,则默认值为 EXTEND_MODEL_CASES。

返回类型

<表表达式>。

注解

使用 PREDICTION JOIN 语句添加新数据时,Microsoft时序算法不支持历史预测。

在 PREDICTION JOIN 中,预测过程总是从原始定型系列的末尾之后的时间步长立即开始。 即使您添加新的数据也是如此。 因此, n 参数和 n 开始 参数值必须是大于 0 的整数。

注意

新数据的长度不影响预测起点。 因此,如果您想要添加新数据并且还要执行新预测,请确保将预测起点设置为大于新数据的长度的值,或者按照新数据的长度来扩展预测终点。

示例

下面的示例显示如何对现有的时序模型执行预测:

  • 第一个示例显示如何根据当前模型执行指定次数的预测。

  • 第二个示例显示如何使用 REPLACE_MODEL_CASES 参数将指定模型中的模式应用到新的数据集。

  • 第三个示例显示如何使用 EXTEND_MODEL_CASES 参数用最新数据更新挖掘模型。

若要详细了解如何使用时序模型,请参阅数据挖掘教程第 2 课:构建预测方案(中间数据挖掘教程)时序预测 DMX 教程

注意

您可能会从模型中获取不同的结果;下面提供的示例结果仅用于说明结果格式。

示例 1:预测时间段数

以下示例使用 PredictTimeSeries 函数返回未来三个时间步骤的预测,并将结果限制为欧洲和太平洋地区的 M200 系列。 在此特定模型中,可预测属性为 Quantity,因此您必须用作 [Quantity] PredictTimeSeries 函数的第一个参数。

SELECT FLATTENED  
    [Forecasting].[Model Region],  
    PredictTimeSeries([Forecasting].[Quantity],3)AS t   
FROM  
    [Forecasting]  
WHERE [Model Region] = 'M200 Europe'  
OR [Model Region] = 'M200 Pacific'  

预期的结果:

Model Region t.$TIME t.Quantity
M200 Europe 7/25/2008 12:00:00 AM 121
M200 Europe 8/25/2008 12:00:00 AM 142
M200 Europe 9/25/2008 12:00:00 AM 152
M200 Pacific 7/25/2008 12:00:00 AM 46
M200 Pacific 8/25/2008 12:00:00 AM 44
M200 Pacific 9/25/2008 12:00:00 AM 42

在此示例中使用了 FLATTENED 关键字,目的是使结果更易于读取。 如果不使用 FLATTENED 关键字,而返回一个分层行集,此查询将返回两列。 第一列包含 [ModelRegion] 的值,第二列包含具有两个列的嵌套表:$TIME,显示要预测的时间段;Quantity,包含预测的值。

示例 2:添加新数据和使用 REPLACE_MODEL_CASES

假定您发现某一特定地区的数据不正确,并且您希望使用模型中的模式,但是又想调整预测,以便与新数据匹配。 或者您可能发现另一地区的趋势更可靠,并且希望向不同地区中的数据应用最可靠的模型。

在这些方案中,您可以使用 REPLACE_MODEL_CASES 参数,并指定一组新的数据以用作历史数据。 这样,预测将基于指定模型中的模式,但将从新数据点末尾继续平滑地进行。 有关此方案的完整演练,请参阅高级时序预测(中间数据挖掘教程)。

以下 PREDICTION JOIN 查询说明替换数据和进行新预测的语法。 对于替换数据,本示例检索 Amount 和 Quantity 列的值,并将每个值乘以 2:

SELECT [Forecasting].[Model Region],  
    PredictTimeSeries([Forecasting].[Quantity], 3, REPLACE_MODEL_CASES)   
FROM  
    [Forecasting]  
PREDICTION JOIN  
  OPENQUERY([Adventure Works DW Multidimensional 2012],  
    'SELECT [ModelRegion],   
    ([Quantity] * 2) as Quantity,  
    ([Amount] * 2) as Amount,  
      [ReportingDate]  
    FROM [dbo].vTimeSeries  
    WHERE ModelRegion = N''M200 Pacific''  
    ') AS t  
ON  
  [Forecasting].[Model Region] = t.[ Model Region] AND  
[Forecasting].[Reporting Date] = t.[ReportingDate] AND  
[Forecasting].[Quantity] = t.[Quantity] AND  
[Forecasting].[Amount] = t.[Amount]  

下表比较了预测结果。

原始预测:

Model Region ReportingDate 数量
M200 Pacific 7/25/2008 12:00:00 AM 46
M200 Pacific 8/25/2008 12:00:00 AM 44
M200 Pacific 9/25/2008 12:00:00 AM 42

更新后的预测:

Model Region ReportingDate 数量
M200 Pacific 7/25/2008 12:00:00 AM 91
M200 Pacific 8/25/2008 12:00:00 AM 89
M200 Pacific 9/25/2008 12:00:00 AM 84

示例 3:添加新数据和使用 EXTEND_MODEL_CASES

示例 3 演示了如何使用 EXTEND_MODEL_CASES 选项来提供新数据,该数据将添加到现有数据系列末尾。 新数据将添加到模型中,而不是替换现有数据点。

在下面的示例中,新数据是在 NATURAL PREDICTION JOIN 后的 SELECT 语句中提供的。 您可以使用此语法提供多个新输入行,但每个新输入行必须具有唯一的时间戳:

SELECT [Model Region],  
    PredictTimeSeries([Forecasting].[Quantity], 5, EXTEND_MODEL_CASES)   
FROM  
    [Forecasting]  
NATURAL PREDICTION JOIN  
    (SELECT  
        1 as [Reporting Date],  
        10 as [Quantity],  
        'M200 Europe' AS [Model Region]  
    UNION SELECT   
        2 as [Reporting Date],  
        15 as [Quantity],  
        'M200 Europe' AS [Model Region]  
) AS T  
WHERE ([Model Region] = 'M200 Europe'  
 OR [Model Region] = 'M200 Pacific')  

由于查询使用 EXTEND_MODEL_CASES 选项,Analysis Services 会对其预测执行以下操作:

  • 向模型中添加两个月的新数据,从而增加了定型事例的总大小。

  • 在上一个事例数据的末尾启动预测。 因此,前两个预测表示刚添加到模型中的实际新销售数据。

  • 根据新扩展的模型返回其余三个时间段的新预测。

下表列出示例 2 查询的结果。 请注意,针对 M200 Europe 返回的前两个值与您提供的新值完全相同。 此行为是默认设置;如果您希望在新数据末尾启动预测,则必须指定开始和结束时间步长。

另请注意,由于没有向太平洋地区提供新数据, 因此,Analysis Services 将返回所有五个时间切片的新预测。

数量:M200 欧洲。 EXTEND_MODEL_CASES:

$TIME 数量
7/25/2008 0:00 10
8/25/2008 0:00 15
9/25/2008 0:00 72
10/25/2008 0:00 69
11/25/2008 0:00 68

数量:M200 Pacific。 EXTEND_MODEL_CASES:

$TIME 数量
7/25/2008 0:00 46
8/25/2008 0:00 44
9/25/2008 0:00 42
10/25/2008 0:00 42
11/25/2008 0:00 38

示例 4:返回时序预测中的统计信息

PredictTimeSeries 函数不支持INCLUDE_STATISTICS作为参数。 但是,可以使用以下查询来返回时序查询的预测统计信息。 此方法还可以与具有嵌套表列的模型结合使用。

在此特定模型中,可预测属性为 Quantity,因此您必须用作 [Quantity] PredictTimeSeries 函数的第一个参数。 如果模型使用不同的可预测属性,则可以替换为不同的列名。

SELECT FLATTENED [Model Region],  
(SELECT   
     $Time,  
     [Quantity] as [PREDICTION],   
     PredictVariance([Quantity]) AS [VARIANCE],  
     PredictStdev([Quantity]) AS [STDEV]  
FROM  
      PredictTimeSeries([Quantity], 3) AS t  
) AS t  
FROM Forecasting  
WHERE [Model Region] = 'M200 Europe'  
OR [Model Region] = 'M200 North America'  

示例结果:

Model Region t.$TIME t.PREDICTION t.VARIANCE t.STDEV
M200 Europe 7/25/2008 12:00:00 AM 121 11.6050581415597 3.40661975300439
M200 Europe 8/25/2008 12:00:00 AM 142 10.678201866621 3.26775180615374
M200 Europe 9/25/2008 12:00:00 AM 152 9.86897842568614 3.14149302493037
M200 North America 7/25/2008 12:00:00 AM 163 1.20434529288162 1.20434529288162
M200 North America 8/25/2008 12:00:00 AM 178 1.65031343900634 1.65031343900634
M200 North America 9/25/2008 12:00:00 AM 156 1.68969399185442 1.68969399185442

注意

在此示例中使用了 FLATTENED 关键字,目的是为了更好地在表中呈现结果;但是,如果提供程序支持分层行集,则可以省略 FLATTENED 关键字。 如果省略了 FLATTENED 关键字,则查询将返回两个列,第一列包含标识 [Model Region] 数据序列的值,第二列包含统计信息的嵌套表。

另请参阅

数据挖掘扩展插件 (DMX) 函数参考
时序模型查询示例
预测 (DMX)