Condividi tramite


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

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

Sintassi del filtro

Filtri sugli attributi dei case

Filtri sugli attributi delle tabelle nidificate

Filtri su più attributi delle tabelle nidificate

Filtri sugli attributi mancanti nella tabella nidificata

Filtri su più valori delle tabelle nidificate

Filtri su attributi di tabelle nidificate e clausola EXISTS

Combinazioni di filtri

Filtri su date

Sintassi del filtro

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

Nelle tabelle nidificate è anche possibile utilizzare 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 specifica 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 utilizzata sia nei filtri dei modelli sia nei filtri della tabella nidificata.

    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 Discrete, Discretized o Key.

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

    • = (è uguale a)

    • != (diverso da)

    • IS NULL

    Se <avPredicate> si applica a una colonna discretizzata, il valore utilizzato 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 utilizzato un valore dall'intervallo.

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

  • nestedTablePredicate
    Espressione di filtro applicabile alle tabelle nidificate. Può essere utilizzata solo nei filtri dei modelli.

    L'argomento della sub-query di <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 <avPredicates>.. Inoltre, i predicati possono fare riferimento solo a colonne incluse nella tabella nidificata corrente, identificata da <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 utilizzando Business Intelligence Development Studio, nella finestra Proprietà e nel riquadro Espressione della finestra di dialogo del filtro viene 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.

Torna all'inizio

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

Torna all'inizio

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

Torna all'inizio

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

Torna all'inizio

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

Torna all'inizio

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

Torna all'inizio

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

Torna all'inizio

Esempio 7: Combinazioni di filtri complessi

Lo scenario per questo modello assomiglia a quello dell'esempio 4, ma è molto più complesso. La tabella nidificata, ProductsOnSale possiede 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 limitazione alla tabella del case. Il risultato è stimare gli 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)

Torna all'inizio

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 indicate in una colonna di tipo data/ora sono valori continui; pertanto, è possibile specificare un intervallo di date mediante operatori, ad esempio maggiore di (>) o minore di (<) (se l'origine dati non rappresenta date con un tipo di dati Continuo, ma come valori di testo o discreti, non è possibile applicare filtri in base a un intervallo di date, ma è necessario specificare valori discreti singoli).

Tuttavia, non è possibile creare un filtro sulla colonna data in un modello Time Series se la colonna data utilizzata per il filtro è anche la colonna chiave del modello. Questa condizione è dovuta al fatto che, in modelli serie temporali e clustering delle sequenze, la colonna data potrebbe essere gestita come KeyTime o KeySequence del tipo.

Se è necessario filtrare in base a 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.

Ad esempio, l'espressione seguente rappresenta un filtro in una colonna data di tipo Continuous aggiunta al modello Forecasting.

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

[!NOTA]

Si noti che qualsiasi colonna aggiuntiva aggiunta al modello potrebbe influire sui risultati. Tuttavia, se non si desidera che la colonna venga utilizzata nel calcolo delle serie, è necessario aggiungere la colonna solo alla struttura di data mining e non al modello. È inoltre possibile impostare il flag del modello nella colonna su PredictOnly o su Ignore. Per ulteriori informazioni, vedere Flag di modellazione (data mining).

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

Nota di attenzioneAttenzione

Quando vengono specificate date come criteri di filtro, è necessario utilizzare il formato seguente, indipendentemente dal formato di data per il sistema operativo corrente: mm/dd/yyyy. Qualsiasi altro formato comporta un errore.

Ad esempio, se si desidera filtrare i risultati del call center in modo che vengano visualizzati solo i fine settimana, è possibile creare un'espressione nella vista origine dati che estragga il nome del giorno della settimana per ciascuna data e utilizza tale valore per l'input o come valore discreto per il filtro. Ricordare che i valori ripetuti possono influire sul modello, è quindi necessario utilizzare solo una colonna, non la colonna data più il valore derivato. Per un esempio di come creare una colonna con i nuovi valori basati su una colonna data, vedere Aggiunta di una vista origine dati per i dati del call center (Esercitazione intermedia sul data mining).

Torna all'inizio