共用方式為


模型篩選語法和範例 (Analysis Services - 數據採礦)

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

重要

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

本節提供模型篩選語法的詳細資訊,以及範例表達式。

篩選語法

案例屬性的篩選

巢狀數據表屬性上的篩選

多個巢狀數據表屬性上的篩選

巢狀數據表中遺漏的篩選屬性

多個巢狀數據表值的篩選

巢狀數據表屬性上的篩選和 EXISTS

篩選組合

日期 篩選

篩選語法

篩選表達式通常相當於 WHERE 子句的內容。 您可以使用 AND ANDORNOT來連接多個條件。

在巢狀數據表中,您也可以使用 EXISTSNOT EXISTS 運算符。 如果子查詢至少傳回一個數據列,EXISTS 條件評估為 true true。 在您想要將模型限制為巢狀數據表中包含特定值的情況時,這非常有用:例如,至少購買一次項目的客戶。

如果子查詢中指定的條件不存在,NOT EXISTS 條件評估為 true true。 例如,當您想要將模型限制為從未購買特定項目的客戶時。

一般語法如下:

<filter>::=<predicate list>  | ( <predicate list> )  
<predicate list>::= <predicate> | [<logical_operator> <predicate list>]   
<logical_operator::= AND| OR  
<predicate>::= NOT <predicate>|( <predicate> ) <avPredicate> | <nestedTablePredicate> | ( <predicate> )   
<avPredicate>::= <columnName> <operator> <scalar> | <columnName> IS [NOT] NULL  
<operator>::= = | != | <> | > | >= | < | <=  
<nestedTablePredicate>::= EXISTS (<subquery>)  
<subquery>::=SELECT * FROM <columnName>[ WHERE  <predicate list> ]  

篩選
包含一或多個述詞,由邏輯運算符連接。

述詞清單
一或多個有效的篩選表示式,以邏輯運算子分隔。

columnName
採礦結構數據行的名稱。

邏輯運算子
ANDORNOT

avPredicate
只能套用至純量採礦結構數據行的篩選表達式。 avPredicate 表示式可用於模型篩選或巢狀數據表篩選條件。

使用下列任一運算符的表達式只能套用至連續數據行。 :

  • < (小於)

  • > (大於)

  • >= (大於或等於)

  • <= (小於或等於)

注意

不論數據類型為何,這些運算符都無法套用至類型為 DiscreteDiscretizedKey的數據行。

使用下列任一運算符的表達式可以套用至連續、離散、離散化或索引鍵數據行:

  • = (等於)

  • != (不等於)

  • IS NULL

如果自變數 avPredicate套用至離散化數據行,則篩選中使用的值可以是特定貯體中的任何值。

換句話說,您不會將條件定義為 AgeDisc = '25-35',而是改為計算,然後使用該間隔的值。

範例:AgeDisc = 27 表示與 27 相同間隔的任何值,在此案例中為 25-35。

nestedTablePredicate
套用至巢狀數據表的篩選表達式。 只能在模型篩選中使用。

自變數的子查詢自變數 nestedTablePredicate,只能套用至數據表採礦結構數據行

子查詢
SELECT 語句後面接著有效的述詞或述詞清單。

所有述詞都必須是 avPredicates中所述的類型。 此外,述詞只能參考目前巢狀數據表中包含的數據行,由 自變數識別,columnName

篩選語法的限制

下列限制適用於篩選:

  • 篩選只能包含簡單的述詞。 其中包括數學運算子、純量和數據行名稱。

  • 篩選語法不支援使用者定義的函式。

  • 篩選語法不支援非布爾運算符,例如加號或減號。

篩選範例

下列範例示範如何使用套用至採礦模型的篩選。 如果您使用 SQL Server Data Tools 建立篩選表示式,請在 [屬性] 視窗中,以及 [篩選] 對話框的 [表達式] 窗格,您只會看到出現在 WITH FILTER 關鍵詞之後的字符串。 在這裡,會包含採礦結構的定義,讓您更容易瞭解數據行類型和使用方式。

範例 1:一般 Case-Level 篩選

此範例顯示簡單的篩選條件,將模型中所使用的案例限製為架構設計人員且年齡超過30的客戶。

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_1  
(  
CustomerId,  
Age,  
Occupation,  
MaritalStatus PREDICT  
)  
WITH FILTER (Age > 30 AND Occupation='Architect')  

範例 2:使用巢狀數據表屬性 Case-Level 篩選

如果您的採礦結構包含巢狀數據表,您可以篩選巢狀數據表中是否有值,或篩選包含特定值的巢狀數據表數據列。 本範例會將模型所使用的案例限制為超過 30 歲且至少購買一個包含牛奶的客戶。

如本範例所示,篩選不一定要只使用模型中包含的數據行。 巢狀數據表 Products 是採礦結構的一部分,但不包含在採礦模型中。 不過,您仍然可以篩選巢狀數據表中的值和屬性。 若要檢視這些案例的詳細數據,必須啟用鑽研。

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_2  
(  
CustomerId,  
Age,  
Occupation,  
MaritalStatus PREDICT  
)  
WITH DRILLTHROUGH,   
FILTER (Age > 30 AND EXISTS (SELECT * FROM Products WHERE ProductName='Milk')  
)  

範例 3:Case-Level 多個巢狀數據表屬性的篩選

此範例顯示三部分篩選:條件會套用至案例數據表、巢狀數據表中屬性的另一個條件,以及其中一個巢狀數據表數據行中特定值的另一個條件。

篩選 Age > 30中的第一個條件會套用至案例數據表中的數據行。 其餘條件會套用至巢狀數據表。

第二個條件,EXISTS (SELECT * FROM Products WHERE ProductName='Milk',檢查巢狀數據表中是否至少有一個購買包含牛奶。 第三個條件,Quantity>=2,表示客戶必須在單一交易中至少購買兩個單位的牛奶。

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_3  
(  
CustomerId,  
Age,  
Occupation,  
MaritalStatus PREDICT,  
Products PREDICT  
(  
ProductName KEY,  
Quantity        
)  
)  
FILTER (Age > 30 AND EXISTS (SELECT * FROM Products WHERE ProductName='Milk'  AND Quantity >= 2)   
)  

範例 4:在巢狀數據表屬性不存在時 Case-Level 篩選

此範例示範如何藉由篩選巢狀數據表中不存在屬性,將案例限制為未購買特定項目的客戶。 在此範例中,模型會使用30歲以上的客戶來定型,這些客戶從未購買過牛奶。

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_4  
(  
CustomerId,  
Age,  
Occupation,  
MaritalStatus PREDICT,  
Products PREDICT  
(  
ProductName  
)  
)  
FILTER (Age > 30 AND NOT EXISTS (SELECT * FROM Products WHERE ProductName='Milk') )  

範例 5:篩選多個巢狀數據表值

此範例的目的是要顯示巢狀數據表篩選。 巢狀數據表篩選會在案例篩選之後套用,而且只會限制巢狀數據表數據列。

此模型可能包含多個具有空白巢狀數據表的案例,因為未指定 EXISTS。

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_5  
(  
CustomerId,  
Age,  
Occupation,  
MaritalStatus PREDICT,  
Products PREDICT  
(  
ProductName KEY,  
Quantity        
) WITH FILTER(ProductName='Milk' OR ProductName='bottled water')  
)  
WITH DRILLTHROUGH  

範例 6:巢狀數據表屬性和 EXISTS 的篩選

在此範例中,巢狀數據表上的篩選會將數據列限制為包含牛奶或瓶裝水的數據列。 然後,模型中的案例會使用 EXISTS 語句來限制。 這可確保巢狀數據表不是空的。

ALTER MINING STRUCTURE MyStructure  ADD MINING MODEL MyModel_6  
(  
CustomerId,  
Age,  
Occupation,  
MaritalStatus PREDICT,  
Products PREDICT  
(  
ProductName KEY,  
Quantity        
) WITH FILTER(ProductName='Milk' OR ProductName='bottled water')  
)  
FILTER (EXISTS (Products))  

範例 7:複雜篩選組合

此模型的案例與範例 4 類似,但更為複雜。 巢狀數據表 ProductsOnSale,具有篩選條件 (OnSale) 表示 OnSale 的值必須 trueProductName中所列的產品。 在這裡,OnSale 是結構數據行。

ProductsNotOnSale篩選的第二個部分會重複此語法,但篩選 OnSale 值的產品 不是 true(!OnSale)

最後,條件會合併,並將一個額外的限制新增至案例數據表。 結果是根據 25 歲以上的所有客戶在 ProductsOnSale 清單中所包含的案例,預測 ProductsNotOnSale 清單中的產品購買。

ALTER MINING STRUCTURE MyStructure ADD MINING MODEL MyModel_7

(

CustomerId,

Age,

Occupation,

MaritalStatus,

ProductsOnSale

(

ProductName KEY

) WITH FILTER(OnSale),

ProductsNotOnSale PREDICT ONLY

(

ProductName KEY

) WITH FILTER(!OnSale)

)

WITH DRILLTHROUGH,

FILTER (EXISTS (ProductsOnSale) AND EXISTS(ProductsNotOnSale) AND Age > 25)

範例 8:篩選日期

您可以篩選日期上的輸入數據行,就像任何其他數據一樣。 日期/時間類型數據行中包含的日期是連續值;因此,您可以使用大於 (>) 或小於 (<) 等運算子來指定日期範圍。 如果您的數據源未以連續數據類型來表示日期,但做為離散或文字值,則您無法篩選日期範圍,但必須指定個別的離散值。

不過,如果用於篩選的日期數據行也是模型的索引鍵數據行,則您無法在時間序列模型中建立日期數據行的篩選。 這是因為,在時間序列模型和時序叢集模型中,日期數據行可能會以 keyTime KeySequence類型來處理。

如果您需要篩選時間序列模型中的連續日期,您可以在採礦結構中建立數據行的複本,並在新的數據行上篩選模型。

例如,下列表達式代表已新增至預測模型之連續 類型 日期數據行的篩選。

=[DateCopy] > '12:31:2003:00:00:00'

注意

請注意,您新增至模型的任何額外數據行都可能會影響結果。 因此,如果您不想將數據行用於數列的計算中,您應該只將數據行加入採礦結構,而不是加入模型。 您也可以將資料列上的模型旗標設定為 PredictOnlyIgnore。 如需詳細資訊,請參閱 模型旗標 (資料採礦)

對於其他模型類型,您可以使用日期作為輸入準則或篩選準則,就像您在任何其他數據行中一樣。 不過,如果您需要使用 連續 數據類型不支援的特定粒度層級,您可以使用表達式來擷取用於篩選和分析的單位,在數據源中建立衍生值。

警告

當您將日期指定為篩選準則時,不論目前 OS 的日期格式為何,都必須使用下列格式:mm/dd/yyyy。 任何其他格式都會導致錯誤。

例如,如果您想要篩選您的來電中心結果只顯示週末,您可以在數據源檢視中建立表達式,以擷取每個日期的工作日名稱,然後將該工作日名稱值用於輸入,或做為篩選中的離散值。 請記住,重複值可能會影響模型,因此您應該只使用其中一個數據行,而不是日期數據行加上衍生值。

另請參閱

採礦模型的 篩選 (Analysis Services - 數據採礦)
測試和驗證 (資料採礦)