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]
數據系列值的數據行,以及包含巢狀統計數據數據表的第二個數據行。