Bagikan melalui


Sintaks dan Contoh Filter Model (Analysis Services - Penggalian Data)

Berlaku untuk: SQL Server 2019 dan Analysis Services Azure Analysis Services Fabric/Power BI Premium sebelumnya

Penting

Penambangan data tidak digunakan lagi di SQL Server 2017 Analysis Services dan sekarang dihentikan di SQL Server 2022 Analysis Services. Dokumentasi tidak diperbarui untuk fitur yang tidak digunakan lagi dan dihentikan. Untuk mempelajari selengkapnya, lihat Kompatibilitas mundur Analysis Services.

Bagian ini menyediakan informasi terperinci tentang sintaks untuk filter model, bersama dengan ekspresi sampel.

Sintaksis filter

Filter pada atribut kasus

Filter pada atribut tabel berlapis

Filter pada beberapa atribut tabel berlapis

Memfilter atribut yang hilang dalam tabel berlapis

Filter pada beberapa nilai tabel berlapis

Filter pada atribut tabel berlapis dan EXISTS

Kombinasi filter

Filter pada tanggal

Sintaks Filter

Ekspresi filter umumnya setara dengan konten klausa WHERE. Anda dapat menyambungkan beberapa kondisi dengan menggunakan operator logis AND, OR, dan NOT.

Dalam tabel berlapis, Anda juga dapat menggunakan operator EXISTS dan NOT EXISTS . Kondisi EXISTS mengevaluasi ke true jika subkueri mengembalikan setidaknya satu baris. Ini berguna dalam kasus di mana Anda ingin membatasi model ke kasus yang berisi nilai tertentu dalam tabel berlapis: misalnya, pelanggan yang telah membeli item setidaknya sekali.

Kondisi NOT EXISTS mengevaluasi ke true jika kondisi yang ditentukan dalam subkueri tidak ada. Contohnya adalah ketika Anda ingin membatasi model kepada pelanggan yang belum pernah membeli item tertentu.

Sintaks umumnya adalah sebagai berikut:

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

filter
Berisi satu atau beberapa predikat, yang disambungkan oleh operator logis.

daftar predikat
Satu atau beberapa ekspresi filter yang valid, dipisahkan oleh operator logis.

columnName
Nama kolom struktur penambangan.

operator logis
DAN, ATAU, TIDAK

avPredicate
Ekspresi filter yang hanya dapat diterapkan ke kolom struktur penambangan skalar. Ekspresi avPredicate dapat digunakan dalam filter model atau filter tabel berlapis.

Ekspresi yang menggunakan salah satu operator berikut ini hanya dapat diterapkan ke kolom berkelanjutan. :

  • < (lebih kecil)

  • > (lebih besar)

  • >= (lebih besar dari atau sama dengan)

  • <= (kurang dari atau sama dengan)

Catatan

Terlepas dari jenis datanya, operator ini tidak dapat diterapkan ke kolom yang memiliki jenis Diskret, Diskret, atau Kunci.

Ekspresi yang menggunakan salah satu operator berikut dapat diterapkan ke kolom berkelanjutan, diskret, diskret, atau kunci:

  • = (sama dengan)

  • != (tidak sama dengan)

  • IS NULL

Jika argumen, avPredicate, berlaku untuk kolom yang didiskretisasi, nilai yang digunakan dalam filter dapat menjadi nilai apa pun dalam wadah tertentu.

Dengan kata lain, Anda tidak mendefinisikan kondisi sebagai AgeDisc = '25-35', tetapi sebaliknya menghitung lalu menggunakan nilai dari interval tersebut.

Contoh: AgeDisc = 27 berarti nilai apa pun dalam interval yang sama dengan 27, yang dalam hal ini adalah 25-35.

nestedTablePredicate
Filter ekspresi yang berlaku untuk tabel berlapis. Hanya dapat digunakan dalam filter model.

Argumen sub-kueri argumen, nestedTablePredicate, hanya bisa diterapkan ke kolom struktur penambangan tabel

subkueri
Pernyataan SELECT diikuti dengan predikat atau daftar predikat yang valid.

Semua predikat harus dari jenis yang dijelaskan dalam avPredicates. Selain itu, predikat hanya dapat merujuk ke kolom yang disertakan dalam tabel berlapis saat ini, yang diidentifikasi oleh argumen, columnName.

Batasan pada Sintaks Filter

Pembatasan berikut berlaku untuk filter:

  • Filter hanya dapat berisi predikat sederhana. Ini termasuk operator matematika, skalar, dan nama kolom.

  • Fungsi yang ditentukan pengguna tidak didukung dalam sintaks filter.

  • Operator non-Boolean, seperti tanda plus atau minus, tidak didukung dalam sintaks filter.

Contoh Filter

Contoh berikut menunjukkan penggunaan filter yang diterapkan ke model penambangan. Jika Anda membuat ekspresi filter dengan menggunakan SQL Server Data Tools, di jendela Properti dan panel Ekspresi dari kotak dialog filter, Anda hanya akan melihat string yang muncul setelah kata kunci WITH FILTER. Di sini, definisi struktur penambangan disertakan untuk mempermudah pemahaman jenis kolom dan penggunaan.

Contoh 1: Pemfilteran Case-Level Umum

Contoh ini menunjukkan filter sederhana yang membatasi kasus yang digunakan dalam model kepada pelanggan yang pekerjaannya adalah arsitek dan yang usianya lebih dari 30.

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

Contoh 2: Case-Level Pemfilteran menggunakan Atribut Tabel Berlapis

Jika struktur penambangan Anda berisi tabel berlapis, Anda dapat memfilter keberadaan nilai dalam tabel berlapis, atau memfilter pada baris tabel berlapis yang berisi nilai tertentu. Contoh ini membatasi kasus yang digunakan untuk model kepada pelanggan di atas usia 30 tahun yang melakukan setidaknya satu pembelian yang menyertakan susu.

Seperti yang ditunjukkan oleh contoh ini, filter tidak perlu hanya menggunakan kolom yang disertakan dalam model. Tabel berlapis Produk adalah bagian dari struktur penambangan, tetapi tidak termasuk dalam model penambangan. Namun, Anda masih dapat memfilter nilai dan atribut dalam tabel berlapis. Untuk melihat detail kasus ini, penelusuran harus diaktifkan.

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

Contoh 3: Case-Level Pemfilteran pada Beberapa Atribut Tabel Berlapis

Contoh ini memperlihatkan filter tiga bagian: kondisi berlaku untuk tabel kasus, kondisi lain ke atribut dalam tabel berlapis, dan kondisi lain pada nilai tertentu di salah satu kolom tabel berlapis.

Kondisi pertama dalam filter, Age > 30, berlaku untuk kolom dalam tabel kasus. Kondisi yang tersisa berlaku untuk tabel berlapis.

Kondisi kedua, EXISTS (SELECT * FROM Products WHERE ProductName='Milk', memeriksa keberadaan setidaknya satu pembelian di tabel berlapis yang menyertakan susu. Kondisi ketiga, Quantity>=2, berarti bahwa pelanggan harus membeli setidaknya dua unit susu dalam satu transaksi.

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

Contoh 4: Case-Level Pemfilteran Tidak Adanya Atribut Tabel Berlapis

Contoh ini menunjukkan cara membatasi kasus kepada pelanggan yang tidak membeli item tertentu, dengan memfilter tidak adanya atribut dalam tabel berlapis. Dalam contoh ini, model dilatih menggunakan pelanggan di atas usia 30 tahun yang belum pernah membeli susu.

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

Contoh 5: Pemfilteran pada Beberapa Nilai Tabel Berlapis

Tujuan dari contoh ini adalah untuk menampilkan pemfilteran tabel berlapis. Filter tabel berlapis diterapkan setelah filter kasus, dan hanya membatasi baris tabel berlapis.

Model ini dapat berisi beberapa kasus dengan tabel berlapis kosong karena EXISTS tidak ditentukan.

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  

Contoh 6: Pemfilteran pada Atribut Tabel Berlapis dan EXISTS

Dalam contoh ini, filter pada tabel berlapis membatasi baris untuk baris yang berisi susu atau air kemasan. Kemudian, kasus dalam model dibatasi dengan menggunakan pernyataan EXISTS . Ini memastikan bahwa tabel berlapis tidak kosong.

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

Contoh 7: Kombinasi Filter Kompleks

Skenario untuk model ini menyerupai Contoh 4, tetapi jauh lebih kompleks. Tabel berlapis, ProductsOnSale, memiliki kondisi (OnSale) filter yang berarti bahwa nilai OnSale harus benar untuk produk yang tercantum dalam ProductName. Di sini, OnSale adalah kolom struktur.

Bagian kedua dari filter, untuk ProductsNotOnSale, mengulangi sintaks ini, tetapi memfilter produk yang nilai OnSale-nyatidak benar(!OnSale).

Akhirnya, kondisi digabungkan dan satu pembatasan tambahan ditambahkan ke tabel kasus. Hasilnya adalah untuk memprediksi pembelian produk dalam daftar ProductsNotOnSale , berdasarkan kasus yang disertakan dalam daftar ProductsOnSale , untuk semua pelanggan di atas usia 25 tahun.

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)

Contoh 8: Pemfilteran pada Tanggal

Anda dapat memfilter kolom input pada tanggal, seperti halnya data lainnya. Tanggal yang terkandung dalam kolom jenis tanggal/waktu adalah nilai berkelanjutan; oleh karena itu, Anda dapat menentukan rentang tanggal dengan menggunakan operator seperti lebih besar dari (>) atau kurang dari (<). Jika sumber data Anda tidak mewakili tanggal menurut jenis data Berkelanjutan, tetapi sebagai nilai diskrit atau teks, Anda tidak dapat memfilter rentang tanggal, tetapi harus menentukan nilai diskrit individual.

Namun, Anda tidak dapat membuat filter pada kolom tanggal dalam model rangkaian waktu jika kolom tanggal yang digunakan untuk filter juga merupakan kolom kunci untuk model. Itu karena, dalam model rangkaian waktu dan model pengklusteran urutan, kolom tanggal mungkin ditangani sebagai jenis KeyTime atau KeySequence.

Jika Anda perlu memfilter tanggal berkelanjutan dalam model rangkaian waktu, Anda dapat membuat salinan kolom di struktur penambangan, dan memfilter model pada kolom baru.

Misalnya, ekspresi berikut mewakili filter pada kolom tanggal jenis Berkelanjutan yang telah ditambahkan ke model Prakiraan.

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

Catatan

Perhatikan bahwa kolom tambahan apa pun yang Anda tambahkan ke model dapat memengaruhi hasilnya. Oleh karena itu, jika Anda tidak ingin kolom digunakan dalam komputasi seri, Anda harus menambahkan kolom hanya ke struktur penambangan, dan bukan ke model. Anda juga dapat mengatur bendera model pada kolom ke PredictOnly atau ke Abaikan. Untuk informasi selengkapnya, lihat Bendera Pemodelan (Penggalian Data).

Untuk jenis model lain, Anda dapat menggunakan tanggal sebagai kriteria input atau kriteria filter seperti yang Anda lakukan di kolom lain. Namun, jika Anda perlu menggunakan tingkat granularitas tertentu yang tidak didukung oleh jenis data Berkelanjutan , Anda dapat membuat nilai turunan di sumber data dengan menggunakan ekspresi untuk mengekstrak unit yang akan digunakan dalam pemfilteran dan analisis.

Peringatan

Saat Anda menentukan tanggal sebagai kriteria filter, Anda harus menggunakan format berikut, terlepas dari format tanggal untuk OS saat ini: mm/dd/yyyy. Format lain menghasilkan kesalahan.

Misalnya, jika Anda ingin memfilter hasil pusat panggilan untuk memperlihatkan hanya akhir pekan, Anda dapat membuat ekspresi dalam tampilan sumber data yang mengekstrak nama hari kerja untuk setiap tanggal, lalu menggunakan nilai nama hari kerja tersebut untuk input atau sebagai nilai diskrit dalam pemfilteran. Ingatlah bahwa nilai berulang dapat memengaruhi model, jadi Anda hanya harus menggunakan salah satu kolom, bukan kolom tanggal ditambah nilai turunan.

Lihat juga

Filter untuk Model Penambangan (Analysis Services - Penggalian Data)
Pengujian dan Validasi (Penggalian Data)