Model filtresi söz dizimi ve örnekleri (Analysis Services - veri madenciliği)

Şunlar için geçerlidir: SQL Server 2019 ve önceki Analysis Services Azure Analysis Services Fabric/Power BI Premium

Önemli

Veri madenciliği SQL Server 2017 Analysis Services'da kullanım dışı bırakıldı ve artık SQL Server 2022 Analysis Services'da sonlandırıldı. Kullanım dışı bırakılan ve kullanımdan kaldırılan özellikler için belgeler güncelleştirilmez. Daha fazla bilgi edinmek için bkz. Analysis Services eski sürüm uyumluluğu.

Bu makalede model filtresi söz dizimi açıklanır ve örnek ifadeler sağlanır.

Filtre söz dizimi

Olay öznitelikleri üzerindeki filtreler

İç içe tablo özniteliklerindeki filtreler

Birden çok iç içe tablo özniteliğindeki filtreler

İç içe tabloda eksik olan öznitelikleri filtreler

Birden çok iç içe tablo değeri üzerindeki filtreler

İç içe tablo öznitelikleri ve EXISTS üzerindeki filtreler

Filtre birleşimleri

Tarihler üzerindeki filtreler

Filtre sözdizimi

Filtre ifadeleri genellikle yan WHERE tümcedeki ifadelerle eşdeğerdir. Birden çok koşulu OR, NOT ve AND mantıksal işleçleriyle birleştirin.

İç içe tablolarda, NOT EXISTS ve EXISTS işleçlerini kullanın. Bir EXISTS koşulu, alt sorgu en az bir satır döndürürse true olarak değerlendirilir. Modeli, iç içe tabloda belirli bir değer bulunan kayıtlarla sınırlamak için bu koşulu kullanın; örneğin, bir ürünü en az bir kez satın almış müşteriler.

NOT EXISTS koşulu, alt sorgu hiçbir satır döndürmezse true olarak değerlendirilir. Modeli belirli bir öğeyi hiç satın almamış müşterilerle kısıtlamak için bu koşulu kullanın.

Genel söz dizimi aşağıdadır:

<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> ]  

filtre
Mantıksal işleçler tarafından bağlanan bir veya daha fazla koşul içerir.

koşul listesi
Mantıksal işleçlerle ayrılmış bir veya daha fazla geçerli filtre ifadesi.

Columnname
Madencilik yapısı sütununun adı.

mantıksal işleç
VEVEYADEĞİL

avPredicate
Yalnızca skaler madencilik yapısı sütununa uygulanabilen filtre ifadesi. AvPredicate ifadesi hem model filtrelerinde hem de iç içe tablo filtrelerinde kullanılabilir.

Aşağıdaki işleçlerden herhangi birini kullanan bir ifade yalnızca sürekli bir sütuna uygulanabilir. :

  • <'dan küçük

  • > (>)

  • >= (büyüktür veya eşittir)

  • <= (küçük veya eşittir)

Uyarı

Veri türünden bağımsız olarak, bu işleçleri , Discretizedveya Keytüründeki Discretesütunlara uygulamayın.

Aşağıdaki işleçlerden herhangi birini kullanan bir ifade, sürekli, ayrık, ayrıklaştırılmış veya anahtar sütuna uygulanabilir:

  • = (eşittir)

  • != (eşit değildir)

  • IS NULL

Bir avPredicate, ayrıklaştırılmış bir sütuna uygulandığında filtrede hedef aralıktaki herhangi bir değeri kullanın.

Koşulu AgeDisc = '25-35' olarak tanımlamayın. Bunun yerine, bu aralıktan bir değer kullanın.

Örneğin, AgeDisc = 27 bu örnekte 25-35 olan 27 ile aynı aralıktaki herhangi bir değeri temsil eder.

nestedTablePredicate
İç içe tabloya uygulanan filtre ifadesi. Yalnızca model filtrelerinde kullanılabilir.

nestedTablePredicate yalnızca bir tablo madenciliği yapısı sütunu için alt sorgu kabul eder.

Subquery
SELECT deyimi ve ardından geçerli bir koşul veya koşul listesi.

Yalnızca avPredicate yüklemlerini kullanın. Her yüklem yalnızca columnName ile tanımlanan geçerli iç içe tablodaki sütunlara başvurabilir.

Filtre söz diziminde sınırlamalar

Filtreler için aşağıdaki kısıtlamalar geçerlidir:

  • Bir filtrede yalnızca basit koşullar kullanın; bunlara matematiksel işleçler, skalerler ve sütun adları dahildir.

  • Filtre söz dizimi kullanıcı tanımlı işlevleri desteklemez.

  • Filtre söz dizimi, artı ve eksi işaretleri gibi Boole dışı işleçleri desteklemez.

Filtre örnekleri

Aşağıdaki örneklerde, bir madencilik modeline filtrelerin nasıl uygulanacağı gösterilmektedir. filtre ifadesini SQL Server Veri Araçları kullanarak oluşturursanız, filtre iletişim kutusunun Özellik penceresi ve İfade bölmesi yalnızca anahtar sözcüklerden sonraki dizeyi WITH FILTER gösterir. Her örnek, sütun türünü ve kullanımını açıklığa kavuşturmak için madencilik yapısı tanımını içerir.

Örnek 1: Tipik durum düzeyinde filtreleme

Bu örnekte, modelde kullanılan durumları, mesleği mimar olan ve yaşı 30'un üzerinde olan müşterilerle sınırlayan basit bir filtre gösterilmektedir.

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

Örnek 2: İç içe tablo özniteliklerini kullanarak olay düzeyinde filtreleme

Madencilik yapınız iç içe tablolar içeriyorsa, iç içe tablodaki bir değerin varlığına göre filtreleyebilir veya belirli bir değer içeren iç içe tablo satırlarına filtreleyebilirsiniz. Bu örnek, model için kullanılan durumları süt içeren en az bir satın alma işlemi yapan 30 yaşın üzerindeki müşterilerle kısıtlar.

Filtre, modelin içermediği sütunları kullanabilir. İç içe ürünler tablosu madencilik yapısının bir parçasıdır, ancak madencilik modeli bunu içermez. İç içe tablodaki değerlere ve özniteliklere göre filtrelemeye devam edebilirsiniz. Olay ayrıntılarını görüntülemek için ayrıntıya gitmeyi etkinleştirin.

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')  
)  

Örnek 3: Birden çok iç içe tablo özniteliğinde kayıt düzeyinde filtreleme

Bu örnekte üç bölümlü bir filtre gösterilmektedir: bir koşul durum tablosuna uygulanır, iç içe geçmiş tablodaki bir özniteliğe başka bir koşul ve iç içe geçmiş tablo sütunlarından birindeki belirli bir değer üzerinde başka bir koşul.

Filtredeki ilk koşul Age > 30, olay tablosundaki bir sütuna uygulanır. Kalan koşullar iç içe tabloya uygulanır.

İkinci koşul olan EXISTS (SELECT * FROM Products WHERE ProductName='Milk'), iç içe geçmiş tablonun süt içeren en az bir satın alım içerip içermediğini denetler. Üçüncü koşul olan Quantity >= 2, müşterinin bir işlemde en az iki birim süt satın almasını gerektirir.

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)   
)  

Örnek 4: İç içe geçmiş tablo özniteliklerinin yokluğuna göre kayıt düzeyinde filtreleme

Bu örnek, iç içe tablodaki bir özniteliğin bulunmamasına göre filtreleme yaparak kayıtları belirli bir öğeyi satın almamış müşterilerle sınırlandırır. Modelde 30 yaşından büyük olan ve hiç süt satın almamış müşteriler kullanılıyor.

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') )  

Örnek 5: Birden çok iç içe tablo değeri üzerinde filtreleme

Bu örnekte iç içe tablo filtreleme gösterilmektedir. İç içe tablo filtresi, durum filtresinden sonra çalışır ve yalnızca iç içe tablodaki satırları sınırlar.

Bu model, belirtilmemiş olduğundan EXISTS boş iç içe tablolar içeren birden çok durum içerebilir.

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  

Örnek 6: İç içe tablo öznitelikleri ve EXISTS üzerinde filtreleme

Bu örnekte iç içe tablo filtresi, satırları süt veya şişelenmiş su içerenlerle kısıtlar. Bir EXISTS ifadesi daha sonra modeli, boş olmayan bir iç içe tabloya sahip durumlarla sınırlar.

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))  

Örnek 7: Karmaşık filtre bileşimleri

Bu senaryo Örnek 4'teki senaryoya benzer, ancak çok daha karmaşıktır. İç içe yerleştirilmiş ProductsOnSale tablosunun filtre koşulu (OnSale)vardır. Bu, OnSale değerinin ProductName içinde listelenen ürün için olması true gerektiği anlamına gelir. Bu durumda , OnSale bir yapı sütunudur.

Filtrenin ikinci bölümü, ProductsNotOnSale için aynı söz dizimini kullanır, ancak OnSale değeri !OnSale (false) olan ürünleri filtreler.

Son olarak, koşulları birleştirir ve durum tablosuna bir kısıtlama daha eklersiniz. Sonuç, 25 yaşın üzerindeki tüm müşteriler için ProductsOnSale listesine dahil edilen servis taleplerini temel alarak ProductsNotOnSale listesindeki ürünlerin satın alımlarını tahmin etmektir.

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)

Örnek 8: Tarihlerde filtreleme

Diğer tüm verilerde olduğu gibi tarihlerde de giriş sütunlarını filtreleyebilirsiniz. Tarih/saat türünde bir sütunda yer alan tarihler sürekli değerlerdir; bu nedenle, büyüktür () veya küçüktür (><) gibi işleçler kullanarak bir tarih aralığı belirtebilirsiniz. Veri kaynağınız tarihleri Sürekli veri türüne göre değil, ayrık veya metin değerleri olarak temsil etmiyorsa, tarih aralığına göre filtreleyemezsiniz, ancak ayrı ayrı değerler belirtmeniz gerekir.

Ancak, filtre için kullanılan tarih sütunu aynı zamanda modelin anahtar sütunuysa, bir zaman serisi modelindeki tarih sütununda filtre oluşturamazsınız. Bu kısıtlama vardır çünkü zaman serisi modellerinde ve sekans kümeleme modellerinde tarih sütunu KeyTime veya KeySequence türü olarak işlenebilir.

Zaman serisi modelinde sürekli tarihleri filtrelemeniz gerekirse, veri madenciliği yapısında sütunun bir kopyasını oluşturabilir ve modeli yeni sütun üzerinden filtreleyebilirsiniz.

Örneğin, aşağıdaki ifade Tahmin modeline eklenen bir Sürekli tarih sütununu filtreler.

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

Uyarı

Modele eklediğiniz ek sütunlar sonuçları etkileyebilir. Sütunun seri hesaplamasında kullanılmasını istemiyorsanız, sütunu yalnızca madencilik yapısına ekleyin, modele eklemeyin. Ayrıca sütundaki model bayrağını PredictOnly veya Yoksay olarak da ayarlayabilirsiniz. Daha fazla bilgi için bkz. Modelleme Bayrakları (Veri Madenciliği).

Diğer model türleri için tarihleri, diğer sütunlarda olduğu gibi giriş ölçütü veya filtre ölçütü olarak kullanabilirsiniz. Ancak, Sürekli veri türünün desteklemediği belirli bir ayrıntı düzeyi kullanmanız gerekiyorsa, filtreleme ve çözümlemede kullanılacak birimi ayıklamak için ifadeleri kullanarak veri kaynağında türetilmiş bir değer oluşturun.

Uyarı

Filtre ölçütü olarak bir tarih belirttiğinizde, geçerli işletim sisteminin tarih biçiminden bağımsız olarak mm/dd/yyyy biçimini kullanın. Başka bir biçim hataya neden olur.

Örneğin, çağrı merkezi sonuçlarınızı yalnızca hafta sonlarını gösterecek şekilde filtrelemek istiyorsanız, veri kaynağı görünümünde her tarihin haftanın günü adını ayıklayan bir ifade oluşturabilir ve ardından giriş için veya filtrelemede ayrı bir değer olarak bu haftanın günü adı değerini kullanabilirsiniz. Yinelenen değerlerin modeli etkileyebileceğini unutmayın; bu nedenle tarih sütununu ve türetilmiş değeri değil yalnızca bir sütunu kullanın.

Ayrıca Bkz.

Madencilik Modelleri için Filtreler (Analysis Services - Veri Madenciliği)
Test ve Doğrulama (Veri Madenciliği)