Condividi tramite


Sintassi ed esempi di filtri del modello (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 sospeso 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 per i filtri del modello, insieme alle espressioni di esempio.

Sintassi del filtro

Filtri per gli attributi del case

Filtri per gli attributi di tabella annidati

Filtri per più attributi di tabella annidati

Attributi dei filtri mancanti nella tabella nidificata

Filtri su più valori di tabelle nidificate

Filtri per gli attributi di tabella annidati e EXISTS

Combinazioni di filtri

Filtri per le date

Sintassi del filtro

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

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

Una condizione NOT EXISTS restituisce true se la condizione specificata nella sottoquery non esiste. Un esempio è quando si vuole limitare il modello ai clienti che non hanno mai acquistato un particolare 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> ]  

filtro
Contiene uno o più predicati connessi da operatori logici.

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

Columnname
Nome di una colonna della struttura di mining.

Operatore logico
AND, OR, NOT

avPredicate
Espressione di filtro applicabile esclusivamente alla colonna scalare dello schema di data mining. Un'espressione avPredicate può essere usata sia nei filtri del modello che nei filtri di tabella annidati.

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

  • < (minore di)

  • > (maggiore di)

  • >= (maggiore o uguale a)

  • <= (minore o uguale a)

Annotazioni

Indipendentemente dal tipo di dati, questi operatori non possono essere applicati a una colonna con il tipo Discrete, Discretized o Key.

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

  • = (uguale a)

  • != (diverso da)

  • IS NULL

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

In altre parole, non si definisce la condizione come AgeDisc = '25-35', ma si calcola e quindi si usa un valore da tale intervallo.

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

nestedTablePredicate
Espressione di filtro che si applica a una tabella nidificata. Può essere usato solo nei filtri di modello.

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 o un elenco di predicati validi.

Tutti i predicati devono essere del tipo descritto in avPredicates. Inoltre, i predicati possono fare riferimento solo alle colonne incluse nella tabella nidificata corrente, identificate dall'argomento columnName.

Limitazioni per la sintassi del filtro

Le restrizioni seguenti si applicano ai filtri:

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

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

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

Esempi di filtri

Negli esempi seguenti viene illustrato l'uso 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. In questo caso, la definizione della struttura di mining è inclusa per facilitare la comprensione del tipo e dell'utilizzo delle colonne.

Esempio 1: Filtro tipico a livello di caso

Questo esempio mostra un filtro semplice che limita i casi usati 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: Filtraggio a livello di caso con attributi annidati di tabella

Se la struttura di data mining contiene tabelle nidificate, è possibile filtrare l'esistenza di un valore in una tabella nidificata oppure filtrare in base alle righe della tabella nidificate che contengono un valore specifico. Questo esempio limita i casi usati per il modello ai clienti di età superiore ai 30 anni che hanno effettuato almeno un acquisto che comprendeva latte.

Come illustrato in questo esempio, non è necessario che il filtro usi solo colonne incluse nel modello. La tabella nidificata Products fa parte della struttura di data mining, ma non è inclusa nel modello di data mining. Tuttavia, è comunque possibile filtrare i valori e gli attributi nella tabella nidificata. Per visualizzare i dettagli di questi casi, è necessario abilitare 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: Filtro a livello di casi su più attributi di tabella annidati

Questo esempio mostra un filtro in tre parti: una condizione si applica alla tabella case, un'altra condizione a un attributo nella tabella nidificata e un'altra condizione per 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 caso. Le condizioni rimanenti si applicano alla tabella nidificata.

La seconda condizione, EXISTS (SELECT * FROM Products WHERE ProductName='Milk', verifica la presenza di almeno un acquisto nella tabella nidificata 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: Filtraggio a livello di caso in assenza di attributi di tabella annidati

In questo esempio viene mostrato come limitare i casi ai clienti che non hanno acquistato un articolo specifico, filtrando in base all'assenza di un attributo nella tabella nidificata. In questo esempio viene eseguito il training del modello usando clienti di età superiore ai 30 anni che non hanno mai acquistato 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 nidificati di tabella

Lo scopo dell'esempio è mostrare il filtro delle tabelle nidificate. Il filtro tabella nidificata viene applicato dopo il filtro condizionale e limita solo le righe della tabella nidificate.

Questo modello può contenere più casi 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 sugli attributi di tabella annidati ed EXISTS

In questo esempio, il filtro sulla tabella nidificata limita le righe a quelle che contengono latte o acqua in bottiglia. I case nel modello vengono quindi limitati tramite un'istruzione EXISTS . In questo modo si garantisce che la tabella nidificata non sia 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 complesse

Lo scenario per questo modello è simile a quello dell'esempio 4, ma è molto più complesso. La tabella nidificata ProductsOnSale ha una condizione di filtro (OnSale) che indica che il valore di OnSale deve essere true per il prodotto elencato in ProductName. In questo caso OnSale è una colonna di struttura.

La seconda parte del filtro, per ProductsNotOnSale, ripete questa sintassi, ma filtra i prodotti per i quali il valore di OnSalenon è true(!OnSale).

Infine, le condizioni vengono combinate e viene aggiunta una restrizione alla tabella dei casi. Il risultato è prevedere gli acquisti di prodotti nell'elenco ProductsNotOnSale , in base ai casi 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: Applicazione di filtri in base alle date

È possibile filtrare le colonne di input in base alle date, come qualsiasi altro dato. 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 date in base a un tipo di dati Continuo, ma come valori discreti o di testo, non è possibile filtrare in base a un intervallo di date, ma è necessario specificare singoli valori discreti.

Tuttavia, non è possibile creare un filtro sulla colonna data in un modello time series se la colonna data usata per il filtro è anche la colonna chiave per il modello. Questo perché, nei modelli di serie temporali e nei modelli di clustering di sequenza, la colonna di data potrebbe essere gestita come tipo KeyTime o KeySequence.

Se è necessario filtrare le date continue in un modello di serie temporali, è possibile creare una copia della colonna nella struttura di data mining e filtrare il modello con la nuova colonna.

L'espressione seguente, ad esempio, rappresenta un filtro in base a una colonna data di tipo Continuous aggiunta al modello di previsione.

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

Annotazioni

Si noti che eventuali colonne aggiuntive aggiunte al modello potrebbero influire sui risultati. Pertanto, se non si desidera utilizzare la colonna nel calcolo della serie, è necessario aggiungere la colonna solo alla struttura di mining e non al modello. È anche possibile impostare il flag del modello nella colonna su PredictOnly o su Ignora. Per ulteriori informazioni, vedere Modeling Flags (Data Mining).

Per altri tipi di modello, è possibile usare date come criteri di input o criteri di filtro esattamente come in qualsiasi altra colonna. Tuttavia, se è necessario usare un livello specifico di granularità non supportato da un tipo di dati Continuous , è possibile creare un valore derivato nell'origine dati usando espressioni per estrarre l'unità da usare per filtrare e analizzare.

Avvertimento

Quando si specifica una data come criteri di filtro, è necessario usare il formato seguente, indipendentemente dal formato di data per il sistema operativo corrente: mm/dd/yyyy. Qualsiasi altro formato genera un errore.

Ad esempio, se si desidera filtrare i risultati del call center per visualizzare solo i fine settimana, è possibile creare un'espressione nella vista origine dati che estrae il nome del giorno della settimana per ogni data e quindi usare il valore del nome del giorno della settimana per l'input o come valore discreto nel filtro. Tenere presente che i valori ripetuti possono influire sul modello, pertanto è consigliabile usare solo una delle colonne, non la colonna data e il valore derivato.

Vedere anche

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