Sintassi ed esempi di filtri dei modelli (Analysis Services – Data mining)

Si applica a: SQL Server 2019 e versioni precedenti di Analysis Services Azure Analysis Services Fabric/Power BI Premium

Importante

Il data mining è stato deprecato in SQL Server 2017 Analysis Services e ora è stato interrotto in SQL Server 2022 Analysis Services. La documentazione non viene aggiornata per le funzionalità deprecate e non più disponibili. Per altre informazioni, vedere Compatibilità con le versioni precedenti di Analysis Services.

In questa sezione vengono fornite informazioni dettagliate sulla sintassi dei filtri dei modelli, insieme alle espressioni di esempio.

Sintassi filtro

Filtri sugli attributi del case

Filtri sugli attributi della tabella nidificata

Filtri su più attributi della tabella nidificata

Filtri sugli attributi mancanti nella tabella nidificata

Filtri su più valori della tabella nidificata

Filtri su attributi ed EXISTS della tabella nidificata

Combinazioni di filtri

Filtri sulle date

Sintassi del filtro

Le espressioni di filtro in genere sono equivalenti al contenuto di una clausola WHERE. È possibile connettere più condizioni usando gli operatori logici AND, ORe NOT.

Nelle tabelle annidate, è anche possibile usare gli operatori EXISTS e NOT EXISTS . Una condizione EXISTS restituisce true se la sottoquery restituisce almeno una riga. Ciò risulta utile nei case in cui si desidera limitare il modello ai case che contengono un determinato valore nella tabella nidificata: ad esempio, i clienti che hanno acquistato almeno una volta un articolo.

Una condizione NOT EXISTS restituisce true se la condizione specificata nella sottoquery non esiste. Ad esempio, quando si desidera limitare il modello ai clienti che non hanno mai acquistato un determinato articolo.

La sintassi generale è la seguente:

<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
Contiene uno o più predicati, connessi da operatori logici.

elenco predicati
Una o più espressioni di filtro valide, separate da operatori logici.

columnName
Nome della colonna della struttura di data mining.

operatore logico
AND, OR, NOT

avPredicate
Espressione del filtro che può essere applicata solo a una colonna scalare della struttura di data mining. Un'espressione avPredicate può essere usata sia nei filtri dei modelli sia nei filtri della tabella annidata.

Un'espressione che utilizza alcuni degli operatori seguenti può essere applicata solo a una colonna continua. :

  • < (minore di)

  • > (maggiore di)

  • >= (maggiore o uguale a)

  • <= (minore o uguale a)

Nota

Indipendentemente dal tipo di dati, questi operatori non possono essere applicati a una colonna di tipo Discreta, Discretizzatao Chiave.

Un'espressione che utilizza alcuni degli operatori seguenti può essere applicata a una colonna continua, discreta, discretizzata o chiave:

  • = (uguale)

  • != (non uguale a)

  • IS NULL

Se l'argomento avPredicatesi applica a una colonna discretizzata, il valore usato nel filtro può essere qualsiasi valore in un bucket specifico.

In altre parole, la condizione non viene definita come AgeDisc = '25-35', ma viene invece calcolata e viene quindi usato un valore dall'intervallo.

Esempio: AgeDisc = 27 indica qualsiasi valore nello stesso intervallo di 27, che in questo caso è 25-35.

nestedTablePredicate
Espressione di filtro applicabile a una tabella nidificata. Può essere utilizzata solo nei filtri dei modelli.

L'argomento della sottoquery dell'argomento, nestedTablePredicate, può essere applicato solo a una colonna della struttura di data mining della tabella

Sottoquery
Istruzione SELECT seguita da un predicato valido o da un elenco di predicati.

Tutti i predicati devono corrispondere al tipo descritto in avPredicates. Inoltre, i predicati possono fare riferimento solo a colonne incluse nella tabella annidata attuale, identificata dall'argomento columnName.

Limitazioni della sintassi del filtro

Ai filtri si applicano le seguenti restrizioni:

  • Un filtro può contenere solo predicati semplici. Questi includono operatori matematici, scalari e nomi delle colonne.

  • Le funzioni definite dall'utente non sono supportate nella sintassi del filtro.

  • Gli operatori non booleani, come i segni più o meno, non sono supportati nella sintassi del filtro.

Esempi di filtri

Negli esempi seguenti viene illustrato l'utilizzo di filtri applicati a un modello di data mining. Se si crea l'espressione di filtro usando SQL Server Data Tools, nella finestra Proprietà e nel riquadro Espressione della finestra di dialogo filtro verrà visualizzata solo la stringa visualizzata dopo le parole chiave WITH FILTER. La definizione della struttura di data mining viene inclusa per semplificare e comprendere il tipo di colonna e l'utilizzo.

Esempio 1: Applicazione di filtri tipica a livello del case

In questo esempio viene mostrato un semplice filtro che limita i case utilizzati nel modello ai clienti la cui occupazione è architetto e la cui età è superiore a 30 anni.

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

Esempio 2: Applicazione di filtri a livello del case utilizzando gli attributi delle tabelle nidificate

Se la struttura di data mining contiene tabelle nidificate, è possibile filtrare in base all'esistenza di un valore in una tabella nidificata o in base alle righe della tabella nidificata che contengono un valore specifico. In questo esempio i case utilizzati per il modello vengono limitati ai clienti di età superiore ai 30 anni che hanno effettuato almeno un acquisto che include latte.

Come mostrato nell'esempio, non è necessario che il filtro utilizzi solo colonne incluse nel modello. La tabella annidata Prodotti fa parte della struttura di data mining, ma non è inclusa nel modello di data mining. Tuttavia, è ancora possibile filtrare in base a valori e attributi nella tabella nidificata. Per visualizzare i dettagli di questi case, è necessario attivare il drill-through.

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

Esempio 3: Applicazione di filtri a livello del case su più attributi delle tabelle nidificate

In questo esempio viene mostrato un filtro in tre parti: una condizione viene applicata alla tabella del case, un'altra a un attributo nella tabella nidificata e un'altra a un valore specifico in una delle colonne della tabella nidificata.

La prima condizione nel filtro, Age > 30, si applica a una colonna nella tabella del case. Le altre condizioni vengono applicate alla tabella nidificata.

La seconda condizione, EXISTS (SELECT * FROM Products WHERE ProductName='Milk', verifica la presenza di almeno un acquisto nella tabella annidata che include il latte. La terza condizione, Quantity>=2, indica che il cliente deve aver acquistato almeno due unità di latte in una singola transazione.

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

Esempio 4: Applicazione di filtri a livello del case in assenza di attributi delle tabelle nidificate

In questo esempio viene illustrata la limitazione dei case ai clienti che non ha acquistato un articolo specifico, filtrando in base all'assenza di un attributo nella tabella nidificata. In questo esempio, viene eseguito il training del modello utilizzando i clienti di età superiore ai 30 anni che non hanno mai comprato latte.

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

Esempio 5: Applicazione di filtri su più valori delle tabelle nidificate

Lo scopo dell'esempio è mostrare l'applicazione del filtro sulla tabella nidificata. Il filtro della tabella nidificata viene applicato dopo il filtro del case e si limita solo alle righe della tabella nidificata.

Questo modello può contenere più case con tabelle nidificate vuote perché EXISTS non è specificato.

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  

Esempio 6: Applicazione di filtri in base agli attributi delle tabelle nidificate e alla clausola EXISTS

In questo esempio, il filtro nella tabella nidificata limita le righe a quelle che contengono latte o acqua imbottigliata. Quindi, i case nel modello vengono limitati tramite un'istruzione EXISTS . Ciò assicura che la tabella nidificata non è vuota.

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

Esempio 7: Combinazioni di filtri complessi

Lo scenario per questo modello è simile a quello dell'esempio 4, ma è molto più complesso. La tabella annidata ProductsOnSalepossiede la condizione del filtro (OnSale) , pertanto il valore di OnSale deve essere true per il prodotto elencato in ProductName. In questo caso, OnSale è una colonna della struttura.

La seconda parte del filtro, per ProductsNotOnSale, ripete questa sintassi, ma applica il filtro in base ai prodotti per i quali il valore di OnSale è not true(!OnSale).

Infine, le condizioni vengono combinate e viene aggiunta un'ulteriore restrizione alla tabella del case. Il risultato è la stima degli acquisti di prodotti nell'elenco ProductsNotOnSale , in base ai case inclusi nell'elenco ProductsOnSale , per tutti i clienti di età superiore ai 25 anni.

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)

Esempio 8: Filtri sulle date

È possibile filtrare le colonne di input in base alle date, come per qualsiasi altro tipo di dati. Le date contenute in una colonna di tipo data/ora sono valori continui; è pertanto possibile specificare un intervallo di date usando operatori come maggiore di () o minore di (><). Se l'origine dati non rappresenta le date come tipo di dati Continuous, ma come valori discreti o di testo, non sarà possibile filtrare in base a un intervallo di date, ma sarà necessario specificare singoli valori discreti.

Tuttavia, non è possibile creare un filtro sulla colonna delle date in un modello Time Series se la colonna delle date utilizzata per il filtro è anche la colonna chiave per il modello. Ciò accade poiché nei modelli Time Series e Sequence Clustering la colonna delle date potrebbe essere gestita come tipo KeyTime o KeySequence.

Quando è necessario applicare un filtro alle date continue in un modello Time Series, è possibile creare una copia della colonna nella struttura di data mining e filtrare il modello nella nuova colonna.

L'espressione seguente, ad esempio, rappresenta un filtro applicato a una colonna delle date di tipo continue aggiunta al modello Forecasting.

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

Nota

L'aggiunta di una qualsiasi colonna al modello può influire sui risultati. Pertanto, se non si desidera che la colonna venga utilizzata nel calcolo della serie, sarà necessario aggiungere la colonna solo alla struttura di data mining e non al modello. È anche possibile impostare il flag del modello della colonna su PredictOnly o Ignore. Per altre informazioni, vedere Flag di modellazione (data mining).

Per altri tipi di modello, è possibile utilizzare le date come criteri di input o criteri di filtro come si farebbe per qualsiasi altra colonna. Tuttavia, se è necessario usare un livello di granularità specifico non supportato da un tipo di dati continuo , sarà possibile creare un valore derivato nell'origine dati usando espressioni per estrarre l'unità da usare per filtri e analisi.

Avviso

Quando si specificano le date come criteri di filtro, è necessario usare il formato seguente, indipendentemente dal formato di data del sistema operativo attualmente in uso: mm/dd/yyyy. Qualsiasi altro formato restituirà un errore.

Se, ad esempio, si desidera filtrare i risultati del call center in modo da visualizzare solo i fine settimana, è possibile creare un'espressione nella vista origine dati che estragga il nome del giorno della settimana per ciascuna data e utilizzare quindi il valore del nome del giorno della settimana come input o come un valore discreto per i filtri. È sufficiente ricordare che la ripetizione dei valori può influire sul modello ed è quindi necessario utilizzare solo una delle colonne, non la colonna delle date insieme al valore derivato.

Vedere anche

Filtri per i modelli di data mining (Analysis Services - Data mining)
Test e convalida (Data mining)