共用方式為


預測查詢 (資料採礦)

適用於: SQL Server 2019 和舊版 Analysis Services Azure Analysis Services Fabric/Power BI Premium

重要

SQL Server 2017 Analysis Services 中已淘汰數據採礦,現在已在 SQL Server 2022 Analysis Services 中停止。 檔不會更新為已淘汰和已停止的功能。 若要深入瞭解,請參閱 Analysis Services 回溯相容性

一般數據採礦項目的目標是使用採礦模型進行預測。 例如,您可能想要預測特定伺服器叢集的預期停機時間量,或產生分數,指出客戶區段是否可能響應廣告活動。 若要執行所有這些動作,您可以建立預測查詢。

在功能上,SQL Server 支援不同類型的預測查詢,視查詢的輸入類型而定:

查詢類型 查詢選項
單一預測查詢 當您想要預測單一新案例的結果或多個新案例時,請使用單一查詢。 您可以直接在查詢中提供輸入值,而查詢會以單一會話的形式執行。
批次預測 當您有想要饋送至模型的外部數據時,請使用批次預測,以做為預測的基礎。 若要針對整組數據進行預測,您可以將外部來源中的數據對應至模型中的數據行,然後指定您要輸出的預測數據類型。

整個數據集的查詢會在單一會話中執行,因此這個選項比傳送多個重複查詢更有效率。
時間序列預測 當您想要預測一些未來步驟的值時,請使用時間序列查詢。 SQL Server 數據採礦也會在時間序列查詢中提供下列功能:

您可以將新的數據新增為查詢的一部分,並根據複合數列進行預測,以擴充現有的模型。

您可以使用 [REPLACE_MODEL_CASES] 選項,將現有的模型套用至新的數據系列。

您可以執行交叉預測。

下列各節說明預測查詢的一般語法、不同類型的預測查詢,以及如何處理預測查詢的結果。

基本預測查詢設計

使用查詢結果

基本預測查詢設計

當您建立預測時,通常會提供一些新數據,並要求模型根據新數據產生預測。

  • 在批次預測查詢中,您可以使用 預測聯結,將模型對應至外部數據源,

  • 在單一預測查詢中,您可以輸入一或多個值做為輸入。 您可以使用單一預測查詢來建立多個預測。 不過,如果您需要建立許多預測,當您使用批次查詢時,效能會更好。

單一和批次預測查詢都會使用 PREDICTION JOIN 語法來定義新的數據。 差異在於如何指定預測聯結的輸入端。

  • 在批次預測查詢中,數據來自使用 OPENQUERY 語法所指定的外部數據源。

  • 在單一預測查詢中,數據會內嵌提供作為查詢的一部分。

對於時間序列模型,不一定需要輸入數據;只要使用模型中的數據,就可以進行預測。 不過,如果您指定新的輸入數據,則必須決定要使用新數據來更新和擴充模型,或取代模型中使用的原始數列數據。 如需這些選項的詳細資訊,請參閱 時間序列模型查詢範例

新增預測函式

除了預測值之外,您還可以自定義預測查詢,以傳回與預測相關的各種資訊。 例如,如果預測會建立建議給客戶的產品清單,您可能也想要傳回每個預測的機率,讓您可以將其排名,並只向用戶呈現最上方的建議。

若要這樣做,請將 預測函式 新增至查詢。 每個模型或查詢類型都支援特定函式。 例如,叢集模型支援特殊預測函式,以提供模型所建立叢集的額外詳細數據,而時間序列模型則具有可計算一段時間差異的函式。 也有一般預測函式可與幾乎所有模型類型搭配使用。 如需不同類型的查詢中支援的預測函式清單,請參閱本主題 DMX 參考:一般預測函數 (DMX)

建立單一預測查詢

當您想要即時建立快速預測時,單一預測查詢很有用。 常見的案例可能是您已從客戶取得資訊,或許是使用網站上的窗體,而您想要提交該數據做為單一預測查詢的輸入。 例如,當客戶從清單中選擇產品時,您可以使用該選取專案做為查詢的輸入,以預測要推薦的最佳產品。

單一預測查詢不需要包含輸入的個別數據表。 相反地,您會提供一或多個數據列的值做為模型的輸入,並實時傳回預測或預測。

警告

儘管名稱如此,單一預測查詢不只是進行單一預測,您可以為每個輸入集產生多個預測。 您可以為每個輸入案例建立 SELECT 語句,並將其與 UNION 運算子結合,以提供多個輸入案例。

當您建立單一預測查詢時,您必須以 PREDICTION JOIN 的形式將新數據提供給模型。 這表示,即使您未對應到實際數據表,您也必須確定新數據符合採礦模型中的現有數據行。 如果新的數據行和新數據完全相符,SQL Server Analysis Services 會為您對應數據行。 這稱為 NATURAL PREDICTION JOIN。 不過,如果數據行不相符,或新的數據未包含模型中的相同類型和數據量,您必須指定模型中哪些數據行對應至新數據,或指定遺漏的值。

批次預測查詢

當您有想要用於進行預測的外部數據時,批次預測查詢很有用。 例如,您可能已建置模型,依客戶的在線活動和購買歷程記錄來分類客戶。 您可以將該模型套用至新取得的潛在客戶清單、建立銷售預測,或識別建議營銷活動的目標。

當您執行預測聯結時,必須將模型的數據行對應至新數據源中的數據行。 因此,您為輸入選擇的數據源必須與模型中的數據有些類似。 新的資訊不需要完全相符,而且可能不完整。 例如,假設模型是使用收入和年齡的相關信息來定型,但您用於預測的客戶清單具有年齡,但收入無關。 在此案例中,您仍然可以將新數據對應至模型,併為每個客戶建立預測。 不過,如果收入是模型的重要預測值,則缺乏完整的資訊會影響預測的品質。

若要取得最佳結果,您應該盡可能聯結新數據與模型之間的相符數據行數目。 不過,即使沒有相符項目,查詢也會成功。 如果沒有聯結數據行,查詢會傳回臨界預測,這相當於沒有PREDICTION JOIN子句的語句 SELECT <predictable-column> FROM <model>

成功對應所有相關數據行之後,您就會執行查詢,而 SQL Server Analysis Services 會根據模型中的模式,針對新數據中的每個數據列進行預測。 您可以將結果儲存回包含外部數據的數據源檢視中的新數據表,也可以複製並貼上您正在使用 SQL Server Data Tools 或 SQL Server Management Studio 的數據。

警告

如果您在 SQL Server Data Tools 中使用設計工具,必須先將外部數據源定義為數據源檢視。

如果您使用 DMX 來建立預測聯結,您可以使用 OPENQUERY、OPENROWSET 或 SHAPE 命令來指定外部數據源。 DMX 範本中的預設數據存取方法是 OPENQUERY。 如需這些方法的相關信息,請參閱 <源數據查詢>

時間序列採礦模型中的預測

時間序列模型與其他模型類型不同;您可以使用模型來建立預測,也可以提供新的數據給模型來更新模型,並根據最近的趨勢建立預測。 如果您新增數據,您可以指定應該使用新資料的方式。

  • 擴充模型案例 表示您將新數據新增至時間序列模型中的現有數據序列。 因此,預測會以新的合併數列為基礎。 當您想要只將一些數據點新增至現有的模型時,此選項是很好的選擇。

    例如,假設您現有的時間序列模型已定型前一年的銷售數據。 收集好幾個月的新銷售數據之後,您決定更新當年的銷售預測。 您可以藉由新增數據並擴充模型來建立預測聯結,以更新模型,以進行新的預測。

  • 取代模型案例 表示您保留定型的模型,但以一組新的案例數據取代基礎案例。 當您想要在模型中保留趨勢,但將其套用至不同的數據集時,這個選項很有用。

    例如,您的原始模型可能已針對銷售量非常高的數據集進行定型;當您將基礎數據取代為新數列(可能來自銷售量較低的商店),您會保留趨勢,但預測會從取代數列中的值開始。

無論您使用哪種方法,預測的起點一律是原始數列的結尾。

如需如何在時間序列模型上建立預測聯結的詳細資訊,請參閱 時間序列模型查詢範例PredictTimeSeries (DMX)

使用預測查詢的結果

儲存數據採礦預測查詢結果的選項會根據您建立查詢的方式而有所不同。

  • 當您在 SQL Server Management Studio 或 SQL Server Data Tools 中使用預測查詢產生器建置查詢時,您可以將預測查詢的結果儲存至現有的 SQL Server Analysis Services 數據源。 如需詳細資訊,請參閱 檢視和儲存預測查詢的結果

  • 當您在 SQL Server Management Studio 的 [查詢] 窗格中使用 DMX 建立預測查詢時,您可以使用查詢輸出選項將結果儲存至檔案,或以文字或方格的形式將結果儲存至 [查詢結果] 窗格。 如需詳細資訊,請參閱 查詢和文字編輯器 (SQL Server Management Studio)

  • 當您使用 Integration Services 元件執行預測查詢時,工作會使用可用的 ADO.NET 連接管理員或 OLEDB 連接管理員,提供將結果寫入資料庫的能力。 如需詳細資訊,請參閱 資料採礦查詢工作

請務必瞭解預測查詢的結果與關係資料庫上的查詢結果不同,而關係資料庫上一律會傳回一個相關值的單一數據列。 您新增至查詢的每個 DMX 預測函式都會傳回它自己的數據列集。 因此,當您在單一案例上進行預測時,結果可能是預測值,以及包含其他詳細數據的數個巢狀數據表數據行。

如果您在一個查詢中結合多個函式,則傳回結果會合併為階層式數據列集。 例如,假設您使用時間序列模型來預測銷售量和銷售數量的未來值,請使用此 DMX 語句之類的查詢:

SELECT  
  PredictTimeSeries([Forecasting].[Amount]) as [PredictedAmount]  
, PredictTimeSeries([Forecasting].[Quantity]) as [PredictedQty]  
FROM  
  [Forecasting]  
  

此查詢的結果為兩個數據行,每個預測數列各一個數據行,其中每個數據列都包含具有預測值的巢狀數據表:

PredictedAmount

$TIME
201101 172067.11
$TIME
201102 363390.68

PredictedQty

$TIME 數量
201101 77
$TIME 數量
201102 260

如果您的提供者無法處理階層式數據列集,您可以在預測查詢中使用 FLATTEN 關鍵詞來扁平化結果。 如需詳細資訊,包括扁平化數據列集的範例,請參閱 SELECT (DMX)

另請參閱

內容查詢 (資料採礦)
資料定義查詢 (資料採礦)