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-start 的整數。

<來源查詢>
定義用於進行預測的外部數據。

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-start 參數值必須是大於 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'  

預期的結果:

模型區域 t.$TIME t.Quantity
M200 歐洲 2008/7/25 上午 12:00:00 121
M200 歐洲 2008/8/25 上午 12:00:00 142
M200 歐洲 2008/9/25 上午 12:00:00 152
M200 Pacific 2008/7/25 上午 12:00:00 46
M200 Pacific 2008/8/25 上午 12:00:00 44
M200 Pacific 2008/9/25 上午 12:00:00 42

在此範例中,已使用 FLATTENED 關鍵詞讓結果更容易閱讀。 如果您沒有使用 FLATTENED 關鍵詞,而是傳回階層式數據列集,此查詢會傳回兩個數據行。 第一個數據行包含 [ModelRegion] 的值,而第二個數據行包含兩個數據行的巢狀數據表:$TIME,其中顯示預測的時間配量,以及包含預測值的 Quantity。

範例 2:新增數據並使用 REPLACE_MODEL_CASES

假設您發現特定區域的數據不正確,而且想要使用模型中的模式,但要調整預測以符合新數據。 或者,您可能會發現另一個區域具有更可靠的趨勢,而且您想要將最可靠的模型套用至不同區域的數據。

在這種情況下,您可以使用 REPLACE_MODEL_CASES 參數,並指定要作為歷程記錄數據的新數據集。 如此一來,投影會以指定模型中的模式為基礎,但會從新數據點的結尾順利進行。 如需此案例的完整逐步解說,請參閱進階時間序列預測(元數據採礦教學課程)。

下列 PREDICTION JOIN 查詢說明取代數據和進行新預測的語法。 針對取代數據,此範例會擷取Amount和Quantity資料行的值,並將每個值乘以兩個:

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]  

下表比較預測的結果。

原始預測:

模型區域 ReportingDate 數量
M200 Pacific 2008/7/25 上午 12:00:00 46
M200 Pacific 2008/8/25 上午 12:00:00 44
M200 Pacific 2008/9/25 上午 12:00:00 42

已更新的預測:

模型區域 ReportingDate 數量
M200 Pacific 2008/7/25 上午 12:00:00 91
M200 Pacific 2008/8/25 上午 12:00:00 89
M200 Pacific 2008/9/25 上午 12:00:00 84

範例 3:新增數據並使用 EXTEND_MODEL_CASES

範例 3 說明如何使用 EXTEND_MODEL_CASES 選項來提供新數據,這會新增至現有數據系列結尾。 新的數據會新增至模型,而不是取代現有的數據點。

在下列範例中,SELECT 語句中會提供新的數據,並遵循 NATURAL PREDICTION JOIN。 您可以使用這個語法來提供多個新輸入資料列,但每個新輸入資料列都必須有唯一的時間戳:

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'  

範例結果:

模型區域 t.$TIME t.PREDICTION t.VARIANCE t.STDEV
M200 歐洲 2008/7/25 上午 12:00:00 121 11.6050581415597 3.40661975300439
M200 歐洲 2008/8/25 上午 12:00:00 142 10.678201866621 3.26775180615374
M200 歐洲 2008/9/25 上午 12:00:00 152 9.86897842568614 3.14149302493037
M200 北美洲 2008/7/25 上午 12:00:00 163 1.20434529288162 1.20434529288162
M200 北美洲 2008/8/25 上午 12:00:00 178 1.65031343900634 1.65031343900634
M200 北美洲 2008/9/25 上午 12:00:00 156 1.68969399185442 1.68969399185442

注意

此範例中使用了 FLATTENED 關鍵詞,讓結果更容易出現在數據表中;不過,如果您的提供者支援階層式數據列集,您可以省略 FLATTENED 關鍵詞。 如果您省略 FLATTENED 關鍵詞,查詢會傳回兩個數據行、第一個包含識別 [Model Region] 數據系列值的數據行,以及包含巢狀統計數據數據表的第二個數據行。

另請參閱

數據採礦延伸模組 (DMX) 函式參考
時間序列模型查詢範例
Predict (DMX)