共用方式為


時序群集模型查詢範例

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

重要

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

當您針對數據採礦模型建立查詢時,可以建立內容查詢,其中提供儲存在模型中的資訊詳細數據,或者您可以建立預測查詢,該查詢會使用模型中的模式,根據您提供的新數據進行預測。 針對時序叢集模型,內容查詢通常會提供有關找到之叢集的其他詳細數據,或這些叢集內的轉換。 您也可以使用查詢來擷取模型的相關元數據。

序列群集模型的預測查詢通常會根據序列和轉換、模型中包含的非時序屬性,或序列和非時序屬性的組合,提出建議。

本節說明如何針對以Microsoft時序群集演算法為基礎的模型建立查詢。 如需建立查詢的一般資訊,請參閱 資料採礦查詢

內容查詢

使用數據採礦架構數據列集傳回模型參數

取得狀態 的序列清單

使用系統預存程式

預測查詢

預測下一個狀態或狀態

尋找時序群集模型的相關信息

若要在採礦模型的內容上建立有意義的查詢,您必須瞭解模型內容的結構,以及哪些節點類型會儲存何種資訊。 如需詳細資訊,請參閱時序群集模型 採礦模型內容(Analysis Services - 資料採礦)

範例查詢 1:使用數據採礦架構數據列集傳回模型參數

藉由查詢數據採礦架構數據列集,您可以找到模型的各種資訊,包括基本元數據、模型建立的日期和時間和上次處理時間、模型所依據的採礦結構名稱,以及做為可預測屬性的數據行。

下列查詢會傳回用來建置和定型模型的參數,[Sequence Clustering]。 您可以在 基本數據採礦教學課程的第 5 課建立此模型。

SELECT MINING_PARAMETERS   
from $system.DMSCHEMA_MINING_MODELS  
WHERE MODEL_NAME = 'Sequence Clustering'  

範例結果:

MINING_PARAMETERS
CLUSTER_COUNT=15,MINIMUM_SUPPORT=10,MAXIMUM_STATES=100,MAXIMUM_SEQUENCE_STATES=64

請注意,此模型是使用預設值 10 來建置CLUSTER_COUNT。 當您為 CLUSTER_COUNT 指定非零數目的叢集時,演算法會將這個數位視為要尋找的大約叢集數目的提示。 不過,在分析過程中,演算法可能會找到更多或更少的叢集。 在此情況下,演算法發現15個叢集最適合定型數據。 因此,已完成模型的參數值清單會報告演算法所決定的叢集計數,而不是建立模型時傳入的值。

此行為與讓演算法判斷最佳叢集數目有何不同? 作為實驗,您可以建立另一個使用這個相同數據的叢集模型,但將CLUSTER_COUNT設為 0。 當您這樣做時,演算法會偵測 32 個叢集。 因此,藉由針對 CLUSTER_COUNT 使用預設值 10,即可限制結果數目。

預設會使用 10 的值,因為減少叢集數目可讓大多數人更輕鬆地瀏覽和了解數據中的群組。 不過,每個模型和數據集都不同。 您可能想要試驗不同的叢集數目,以查看哪些參數值會產生最精確的模型。

範例查詢 2:取得狀態的序列清單

採礦模型內容會將定型數據中找到的序列儲存為第一個狀態,加上所有相關第二個狀態的清單。 第一個狀態會當做序列的標籤使用,而相關的第二個狀態稱為轉換。

例如,下列查詢會先傳回模型中第一個狀態的完整清單,再將序列分組為叢集。 您可以傳回具有模型根節點為父節點的序列清單(NODE_TYPE = 13),以取得此列表(PARENT_UNIQUE_NAME = 0)。 FLATTENED 關鍵詞可讓結果更容易閱讀。

注意

數據行的名稱、PARENT_UNIQUE_NAME、支援和機率必須以括弧括住,才能與相同名稱的保留關鍵詞區別。

SELECT FLATTENED NODE_UNIQUE_NAME,  
(SELECT ATTRIBUTE_VALUE AS [Product 1],  
[Support] AS [Sequence Support],   
[Probability] AS [Sequence Probability]  
FROM NODE_DISTRIBUTION) AS t  
FROM [Sequence Clustering].CONTENT  
WHERE NODE_TYPE = 13  
AND [PARENT_UNIQUE_NAME] = 0  

部分結果:

NODE_UNIQUE_NAME 產品 1 順序支援 時序機率
1081327 失蹤 0 #######
1081327 All-Purpose 自行車站 17 0.00111
1081327 自行車洗車 64 0.00418
1081327 (列 4-36 省略)
1081327 女子山短褲 506 0.03307

模型中的序列清單一律以遞增順序依字母順序排序。 序列的順序很重要,因為您可以藉由查看序列的順序編號來尋找相關的轉換。 遺漏 值 一律會轉換 0。

例如,在先前的結果中,產品 「Women』s Mountain Shorts 是模型中的序號 37。 您可以使用該資訊來檢視「婦女山短褲」之後購買的所有產品。

若要這樣做,請先參考先前查詢中針對 NODE_UNIQUE_NAME 傳回的值,以取得包含模型所有序列之節點的標識符。 您會將此值傳遞至查詢做為父節點的標識碼,只取得此節點中包含的轉換,而此節點會碰巧包含模型的 al 序列清單。 不過,如果您想要查看特定叢集的轉換清單,您可以傳入叢集節點的標識碼,並只查看與該叢集相關聯的序列。

SELECT NODE_UNIQUE_NAME  
FROM [Sequence Clustering].CONTENT  
WHERE NODE_DESCRIPTION = 'Transition row for sequence state 37'  
AND [PARENT_UNIQUE_NAME] = '1081327'  

範例結果:

NODE_UNIQUE_NAME
1081365

此標識子所代表的節點包含遵循「婦女山短」產品的序列清單,以及支援和機率值。

SELECT FLATTENED  
(SELECT ATTRIBUTE_VALUE AS Product2,  
[Support] AS [P2 Support],  
[Probability] AS [P2 Probability]  
FROM NODE_DISTRIBUTION) AS t  
FROM [Sequence Clustering].CONTENT  
WHERE NODE_UNIQUE_NAME = '1081365'  

範例結果:

t.Product2 t.P2 支援 t.P2 Probability
失蹤 230.7419 0.456012
傳統背心 8.16129 0.016129
自行車帽 60.83871 0.120235
Half-Finger 手套 30.41935 0.060117
Long-Sleeve 標誌澤西 86.80645 0.171554
賽車襪子 28.93548 0.057185
Short-Sleeve 經典澤西 60.09677 0.118768

請注意,在模型中,支援與女子山短褲相關的各種序列為 506。 轉換的支援值也最多可加 506。 不過,數位不是整數,如果您預期支援只是代表包含每個轉換的案例計數,這似乎有點奇怪。 不過,由於建立叢集的方法會計算部分成員資格,因此叢集內任何轉換的機率必須依屬於該特定叢集的機率來加權。

例如,如果有四個叢集,特定序列可能有 40 個% 屬於叢集 1 的機會、屬於叢集 2 的 30% 機會、屬於叢集 3 的 20% 機會,以及屬於叢集 4 的 10% 機率。 演演算法判斷轉換最有可能屬於的叢集之後,它會依叢集先前機率來加權叢集內的機率。

範例查詢 3:使用系統預存程式

您可以從這些查詢範例中看到儲存在模型中的資訊很複雜,而且您可能需要建立多個查詢,以取得您需要的資訊。 不過,Microsoft時序叢集查看器提供一組功能強大的工具,以圖形方式瀏覽時序群集模型中所包含的資訊,您也可以使用查看器來查詢和向下切入模型。

在大部分情況下,Microsoft時序叢集查看器中呈現的資訊是使用 Analysis Services 系統預存程式來查詢模型所建立。 您可以針對模型內容撰寫數據採礦延伸模組 (DMX) 查詢來擷取相同的資訊,但 Analysis Services 系統預存程式在探索或測試模型時提供方便的快捷方式。

注意

系統預存程式用於伺服器的內部處理,以及Microsoft提供給 Analysis Services 伺服器互動的用戶端。 因此,Microsoft隨時保留變更它們的權利。 雖然為了方便起見,我們在這裡說明它們,但我們不支援其在生產環境中使用。 若要確保生產環境中的穩定性和相容性,您應該一律使用 DMX 撰寫自己的查詢。

本節提供如何使用系統預存程序針對時序叢集模型建立查詢的一些範例:

叢集配置檔和範例案例

[叢集配置檔] 索引標籤會顯示模型中的叢集清單、每個叢集的大小,以及指出叢集中所含狀態的直方圖。 您可以在查詢中使用兩個系統預存程式來擷取類似的資訊:

  • GetClusterProfile 會傳回叢集的特性,其中包含叢集NODE_DISTRIBUTION數據表中找到的所有資訊。

  • GetNodeGraph 會傳回可用來建構叢集數學圖表表示的節點和邊緣,其對應到您在時序群集檢視的第一個索引卷標上看到的內容。 節點是叢集,邊緣代表權數或強度。

下列範例說明如何使用系統預存程式,GetClusterProfiles,以傳回模型中的所有叢集及其各自的配置檔。 這個預存程式會執行一系列的 DMX 語句,以傳回模型中的完整配置檔集。 不過,若要使用此預存程式,您必須知道模型的位址。

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterProfiles('Sequence Clustering', 2147483647, 0)

下列範例說明如何使用系統預存程式 GetNodeGraph擷取特定叢集叢集 12 的配置檔,並指定叢集標識碼,這通常與叢集名稱中的數位相同。

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetNodeGraph('Sequence Clustering','12',0)  

如果您省略叢集識別碼,如下列查詢所示,GetNodeGraph 會傳回所有叢集配置檔的已排序扁平化清單:

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetNodeGraph('Sequence Clustering','',0)  

[叢集配置檔] 索引卷標也會顯示模型範例案例的直方圖。 這些範例案例代表模型的理想化案例。 這些案例不會以與定型數據相同的方式儲存在模型中;您必須使用特殊語法來擷取模型的範例案例。

SELECT * FROM [Sequence Clustering].SAMPLE_CASES WHERE IsInNode('12')  

如需詳細資訊,請參閱 SELECT FROM <模型>。SAMPLE_CASES (DMX)

叢集特性和叢集辨識

叢集特性 索引標籤摘要說明每個叢集的主要屬性,依機率排序。 您可以瞭解有多少案例屬於叢集,以及叢集中案例分佈的情況:每個特性都有特定支援。 若要查看特定叢集的特性,您必須知道叢集的標識碼。

下列範例會使用系統預存程式 GetClusterCharacteristics傳回叢集 12 的所有特性,其機率分數超過指定的臨界值 0.0005。

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('Sequence Clustering','12',0.0005)  

若要傳回所有叢集的特性,您可以將叢集標識符保留空白。

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('Sequence Clustering','',0.0005)  

下列範例會呼叫系統預存程式 GetClusterDiscrimination,以比較叢集 1 和叢集 12 的特性。

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterDiscrimination('Sequence Clustering','1','12',0.0005,true)  

如果您想要在 DMX 中撰寫自己的查詢來比較兩個叢集,或比較叢集與其補充,您必須先擷取一組特性,然後擷取您感興趣的特定叢集特性,並比較這兩個集合。 此案例較為複雜,通常需要一些客戶端處理。

狀態和轉換

Microsoft時序群集 狀態轉換索引標籤會在後端執行複雜的查詢,以擷取和比較不同叢集的統計數據。 若要重現這些結果,需要更複雜的查詢和一些客戶端處理。

不過,您可以使用 區段範例 2 中所述的 DMX 查詢,內容查詢,擷取序列或個別轉換的機率和狀態。

使用模型進行預測

序列群集模型的預測查詢可以使用許多與其他群集模型搭配使用的預測函式。 此外,您可以使用特殊的預測函數,PredictSequence (DMX),提出建議或預測下一個狀態。

範例查詢 4:預測下一個狀態或狀態

您可以使用 PredictSequence (DMX) 函式,根據值預測下一個最有可能的狀態。 您也可以預測多個下一個狀態:例如,您可以傳回客戶可能購買的前三個產品清單,以顯示建議清單。

下列範例查詢是單一預測查詢,會傳回前五個預測,以及其機率。 因為模型包含巢狀數據表,所以您必須在進行預測時,使用巢狀數據表 [v Assoc Seq Line Items]作為數據行參考。 此外,當您提供值做為輸入時,您必須聯結案例數據表和巢狀數據表數據行,如巢狀 SELECT 語句所示。

SELECT FLATTENED PredictSequence([v Assoc Seq Line Items], 7)  
FROM [Sequence Clustering]  
NATURAL PREDICTION JOIN  
(SELECT  (SELECT 1 as [Line Number],  
   'All-Purpose Bike Stand' as [Model]) AS [v Assoc Seq Line Items])   
AS t  

範例結果:

Expression.$Sequence Expression.Line Number Expression.Model
1 自行車帽
2 自行車帽
3 Sport-100
4 Long-Sleeve 標誌澤西
5 Half-Finger 手套
6 All-Purpose 自行車站
7 All-Purpose 自行車站

結果中有三個數據行,即使您只預期有一個數據行,因為查詢一律會傳回案例數據表的數據行。 以下是扁平化的結果;否則,查詢會傳回包含兩個巢狀數據表數據行的單一數據行。

數據行$sequence是 PredictSequence 函式預設傳回的數據行,以排序預測結果。 數據行 [Line Number],必須符合模型中的時序索引鍵,但索引鍵不是輸出。

有趣的是,All-Purpose 自行車站后最前一個預測序列是自行車帽和自行車帽。 這不是錯誤。 視數據呈現給客戶的方式,以及在定型模型時分組的方式而定,可以有這類序列。 例如,如果無法指定數量,客戶可能會購買自行車帽(紅色)和另一個自行車帽(藍色),或連續購買兩個。

數據列 6 和 7 中的值是佔位元。 當您到達可能轉換鏈結的結尾,而不是終止預測結果時,傳遞做為輸入的值會新增至結果。 例如,如果您將預測數目增加到 20,則數據列 6-20 的值會全部相同,All-Purpose Bike Stand。

函式清單

所有Microsoft演算法都支援一組常見的函式。 不過,Microsoft時序群集演算法支援下表所列的其他函式。

預測函數 用法
叢集 (DMX) 傳回最有可能包含輸入案例的叢集
ClusterDistance (DMX) 傳回輸入大小寫與指定叢集的距離,如果沒有指定任何叢集,則輸入案例與最有可能的叢集距離。

此函式可以搭配任何類型的群集模型使用(EM、K-Means 等),但結果會根據演算法而有所不同。
ClusterProbability (DMX) 傳回輸入案例屬於指定叢集的機率。
IsInNode (DMX) 指出指定的節點是否包含目前的案例。
PredictAdjustedProbability (DMX) 傳回指定狀態的調整機率。
PredictAssociation (DMX) 預測關聯成員資格。
PredictCaseLikelihood (DMX) 傳回輸入大小寫符合現有模型的可能性。
PredictHistogram (DMX) 傳回數據表,代表指定數據行預測的直方圖。
PredictNodeId (DMX) 傳回分類案例之節點的Node_ID。
PredictProbability (DMX) 傳回指定狀態的機率。
PredictSequence (DMX) 預測指定之序列數據集的未來序列值。
PredictStdev (DMX) 傳回指定數據行的預測標準偏差。
PredictSupport (DMX) 傳回指定狀態的支援值。
PredictVariance (DMX) 傳回指定數據行的變異數。

如需所有Microsoft演算法通用的函式清單,請參閱 一般預測函數 (DMX)。 如需特定函式的語法,請參閱 數據採礦延伸模組 (DMX) 函式參考

另請參閱

數據採礦查詢
Microsoft 時序群集演算法技術參考
Microsoft 時序群集演算法
時序群集模型的採礦模型內容 (Analysis Services - 數據採礦)