Modellfiltersyntax und Beispiele (Analysis Services - Data Mining)

Dieser Abschnitt enthält ausführliche Informationen zur Syntax von Modellfiltern sowie Beispielausdrücke.

Filtersyntax

Filter für Fallattribute

Filter für geschachtelte Tabellenattribute

Filter für mehrere geschachtelte Tabellenattribute

Filter für in der geschachtelten Tabelle fehlende Attribute

Filter für mehrere geschachtelte Tabellenwerte

Filter für geschachtelte Tabellenattribute und EXISTS

Filterkombinationen

Filter für Datumsangaben

Filtersyntax

Filterausdrücke entsprechen im Allgemeinen dem Inhalt einer WHERE-Klausel. Sie können mehrere Bedingungen mithilfe der logischen Operatoren AND, OR und NOT verbinden.

In geschachtelten Tabellen können Sie auch die Operatoren EXISTS und NOT EXISTS verwenden. Eine EXISTS-Bedingung ergibt true, wenn die Unterabfrage mindestens eine Zeile zurückgibt. Dies ist hilfreich, wenn Sie das Modell auf Fälle beschränken möchten, die in der geschachtelten Tabelle einen bestimmten Wert enthalten: beispielsweise Kunden, die einen Artikel mindestens ein Mal gekauft haben.

Eine NOT EXISTS-Bedingung ergibt true, wenn die in der Unterabfrage angegebene Bedingung nicht vorhanden ist. Ein Beispiel dafür ist, wenn Sie das Modell auf Kunden beschränken möchten, die einen bestimmten Artikel noch nie gekauft haben.

Die allgemeine Syntax lautet wie folgt:

<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
    Enthält ein oder mehrere Prädikate, die durch logische Operatoren verbunden werden.

  • predicate list
    Ein oder mehrere gültige Filterausdrücke, die durch logische Operatoren getrennt werden.

  • columnName
    Der Name einer Miningstrukturspalte.

  • logical operator
    AND, OR, NOT

  • avPredicate
    Filterausdruck, der nur auf skalare Miningstrukturspalten angewendet werden kann. Ein avPredicate-Ausdruck kann sowohl in Modellfiltern als auch in geschachtelten Tabellenfiltern verwendet werden.

    Ein Ausdruck, der einen der folgenden Operatoren verwendet, kann nur auf eine kontinuierliche Spalte angewendet werden. :

    • < (Kleiner als)

    • > (Größer als)

    • >= (größer als oder kleiner als)

    • <= (kleiner als oder gleich)

    HinweisHinweis

    Unabhängig vom Datentyp können diese Operatoren nicht auf eine Spalte angewendet werden, die den Typ Discrete, Discretized oder Key besitzt.

    Ein Ausdruck, der einen der folgenden Operatoren verwendet, kann nur auf eine Spalte vom Typ Continuous, Discrete, Discretized oder Key angewendet werden.

    • = (ist gleich)

    • != (ist ungleich)

    • IS NULL

    Wenn das Argument avPredicate für eine diskretisierte Spalte gilt, kann der im Filter verwendete Wert ein beliebiger Wert in einem bestimmten Bucket sein.

    Mit anderen Worten, Sie definieren die Bedingung nicht als AgeDisc = ’25-35’, sondern Sie berechnen und verwenden einen Wert aus diesem Intervall.

    Beispiel: AgeDisc = 27  bedeutet jeden Wert im gleichen Intervall wie 27, in diesem Fall also 25-35.

  • nestedTablePredicate
    Filterausdruck, der für eine geschachtelte Tabelle gilt. Kann nur in Modellfiltern verwendet werden.

    Das Unterabfrageargument des Arguments nestedTablePredicate kann nur auf eine Tabellenminingstrukturspalte angewendet werden.

  • subquery
    Eine SELECT-Anweisung, gefolgt von einem gültigen Prädikat oder einer Liste von Prädikaten.

    Alle Prädikate müssen dem in avPredicates beschriebenen Typ entsprechen. Außerdem können die Prädikate nur auf Spalten verweisen, die in der aktuellen geschachtelten Tabelle enthalten sind, die durch das Argument columnName angegeben wird.

Einschränkungen der Filtersyntax

Für Filter gelten die folgenden Einschränkungen:

  • Ein Filter kann nur einfache Prädikate enthalten. Dazu gehören mathematische Operatoren, Skalare und Spaltennamen.

  • Benutzerdefinierte Funktionen werden in der Filtersyntax nicht unterstützt.

  • Nichtboolesche Operatoren, z. B. das Plus oder das Minuszeichen, werden in der Filtersyntax nicht unterstützt.

Beispiele für Filter

In den folgenden Beispielen wird die Anwendung von Filtern auf ein Miningmodell veranschaulicht. Wenn Sie den Filterausdruck unter Verwendung von Business Intelligence Development Studio erstellen, sehen Sie im Fenster Eigenschaft und im Bereich Ausdruck des Dialogfelds Filter nur die Zeichenfolge, die nach den WITH FILTER-Schlüsselwörtern angezeigt wird. Hier wird die Definition der Miningstruktur eingefügt, um den Spaltentyp und die Spaltenverwendung verständlicher zu machen.

Beispiel 1: Typische Filterung auf Fallebene

Dieses Beispiel zeigt einen einfachen Filter, der die im Modell verwendeten Fälle auf Kunden mit dem Beruf Architekt und einem Alter von über 30 Jahren einschränkt.

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

Zurück zum Anfang

Beispiel 2: Filterung auf Fallebene unter Verwendung von Attributen in geschachtelten Tabellen

Wenn Ihre Miningstruktur geschachtelte Tabellen enthält, können Sie entweder auf das Vorhandensein eines Werts in einer geschachtelten Tabelle filtern oder auf Zeilen in der geschachtelten Tabelle, die einen bestimmten Wert enthalten. Dieses Beispiel schränkt die für das Modell verwendeten Fälle auf Kunden ein, die über 30 Jahre alt sind und mindestens einen Einkauf getätigt haben, der Milch enthielt.

Dieses Beispiel zeigt, dass der Filter nicht nur Spalten zu verwenden braucht, die im Modell enthalten sind. Die geschachtelte Tabelle Products ist Bestandteil der Miningstruktur, ist jedoch nicht im Miningmodell enthalten. Sie können jedoch auf Werte und Attribute in der geschachtelten Tabelle filtern. Um die Details dieser Fälle anzuzeigen, muss Drillthrough aktiviert werden.

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

Zurück zum Anfang

Beispiel 3: Filterung auf Fallebene unter Verwendung von mehreren Attributen in geschachtelten Tabellen

Dieses Beispiel zeigt einen dreiteiligen Filter: Eine Bedingung gilt für die Falltabelle, eine andere Bedingung für ein Attribut in der geschachtelten Tabelle und eine weitere Bedingung für einen bestimmten Wert in einer der geschachtelten Tabellenspalten.

Die erste Bedingung im Filter, Age > 30, gilt für eine Spalte in der Falltabelle. Die übrigen Bedingungen gelten für die geschachtelte Tabelle.

Die zweite Bedingung, EXISTS (SELECT * FROM Products WHERE ProductName=’Milk’, überprüft, ob in der geschachtelten Tabelle mindestens ein Einkauf vorhanden ist, der Milch beinhaltet. Die dritte Bedingung, Quantity>=2, bedeutet, dass der Kunde in einer Transaktion mindestens zwei Einheiten Milch gekauft haben muss.

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

Zurück zum Anfang

Beispiel 4: Filterung auf Fallebene unter Verwendung der Abwesenheit von Attributen in der geschachtelten Tabelle

Dieses Beispiel zeigt, wie Fälle auf Kunden beschränkt werden, die einen bestimmten Artikel nicht gekauft haben, indem auf das Nichtvorhandensein eines Attributs in der geschachtelten Tabelle gefiltert wird. In diesem Beispiel wird das Modell so eingerichtet, dass damit Kunden ermittelt werden können, die älter als 30 Jahre sind und noch nie Milch gekauft haben.

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

Zurück zum Anfang

Beispiel 5: Filterung unter Verwendung von mehreren Werten in geschachtelten Tabellen

Dieses Beispiel soll das Filtern von geschachtelten Tabellen veranschaulichen. Der Filter für geschachtelte Tabellen wird nach dem Fallfilter angewendet und schränkt nur Zeilen in geschachtelten Tabellen ein.

Dieses Modell kann mehrere Fälle mit leeren geschachtelten Tabellen enthalten, da EXISTS nicht angegeben ist.

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

Zurück zum Anfang

Beispiel 6: Filterung unter Verwendung von Attributen in geschachtelten Tabellen und EXISTS

In diesem Beispiel beschränkt der Filter für die geschachtelte Tabelle die Zeilen auf solche, die entweder Milch oder Wasser in Flaschen enthalten. Anschließend werden die Fälle im Modell mithilfe einer EXISTS-Anweisung eingeschränkt. Dies stellt sicher, dass die geschachtelte Tabelle nicht leer ist.

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

Zurück zum Anfang

Beispiel 7: Komplexe Filterkombinationen

Das Szenario für dieses Modell ähnelt dem von Beispiel 4, ist jedoch wesentlich komplexer. Die geschachtelte Tabelle ProductsOnSale besitzt die Filterbedingung (OnSale), was bedeutet, dass der Wert von OnSale für das in ProductName aufgelistete Produkt true sein muss. Hier ist OnSale eine Strukturspalte.

Der zweite Teil des Filters für ProductsNotOnSale wiederholt diese Syntax, filtert jedoch nach Produkten, bei denen der Wert für OnSalenot true(!OnSale) ist.

Schließlich werden die Bedingungen kombiniert und der Falltabelle wird eine weitere Einschränkung hinzugefügt. Das Ergebnis ist die Vorhersage des Kaufs von Produkten in der Liste ProductsNotOnSale auf der Grundlage der Fälle in der Liste ProductsOnSale für alle Kunden mit einem Alter von über 25.

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)

Zurück zum Anfang

Beispiel 8: Filtern unter Verwendung von Datumsangaben

Sie können Eingabespalten genau wie alle anderen Daten nach Datumsangaben filtern. In einer Spalte des Typs Datum/Uhrzeit enthaltene Datumsangaben sind kontinuierliche Werte. Sie können daher mit Operatoren wie Größer als (>) oder Kleiner als (<) einen Datumsbereich festlegen. (Wenn die Datenquelle Datumsangaben nicht durch einen kontinuierlichen Datentyp, sondern als Einzel- oder Textwerte darstellt, können Sie nicht nach einem Datumsbereich filtern, sondern müssen einzelne Werte angeben.)

Sie können jedoch keinen Filter für die Datumsspalte in einem Zeitreihenmodell erstellen, wenn die für den Filter verwendete Datumsspalte gleichzeitig die Schlüsselspalte für das Modell ist. Dies liegt daran, dass die Datumsspalte in Zeitreihenmodellen und Sequenzclustermodellen als eine Spalte vom Typ KeyTime oder KeySequence verarbeitet werden kann.

Wenn Sie in einem Zeitreihenmodell nach kontinuierlichen Datumsangaben filtern müssen, können Sie in der Miningstruktur eine Kopie der Spalte erstellen und das Modell unter Verwendung der neuen Spalte filtern.

Der folgende Ausdruck stellt beispielsweise einen Filter für eine Datumsspalte vom Typ Continuous dar, die dem Forecasting-Modell hinzugefügt wurde.

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

HinweisHinweis

Beachten Sie, dass sich alle zusätzlichen Spalten, die Sie dem Modell hinzufügen, auf die Ergebnisse auswirken können. Wenn Sie nicht möchten, dass die Spalte zur Berechnung der Reihe verwendet wird, sollten Sie die Spalte daher nur der Miningstruktur und nicht dem Modell hinzufügen. Sie können auch das Modellflag für die Spalte auf PredictOnly oder Ignore festlegen. Weitere Informationen finden Sie unter Modellierungsflags (Data Mining).

Für andere Modelltypen können Sie Datumsangaben ebenso wie jede andere Spalte als Eingabekriterien oder Filterkriterien verwenden. Wenn Sie jedoch einen bestimmten Grad an Granularität benötigen, die von einem Continuous-Datentyp nicht unterstützt wird, können Sie einen abgeleiteten Wert in der Datenquelle erstellen, indem Sie mithilfe von Ausdrücken die Einheit extrahieren, die zur Filterung und Analyse verwendet werden soll.

VorsichtshinweisVorsicht

Wenn Sie Datumsangaben als Filterkriterien angeben, müssen Sie unabhängig vom Datumsformat für das aktuelle Betriebssystem das folgende Format verwenden: mm/dd/yyyy. Jedes andere Format führt zu einem Fehler.

Wenn Sie beispielsweise die Callcenterergebnisse filtern möchten, um nur Wochenenden anzuzeigen, können Sie in der Datenquellensicht einen Ausdruck erstellen, der den Namen des Wochentags für jedes Datum extrahiert, und dann diesen Wert als Eingabe oder als diskreten Wert für die Filterung verwenden. Bedenken Sie jedoch, dass sich wiederholende Werte auf das Modell auswirken können. Sie sollten deshalb nicht die Datumsspalte und den abgeleiteten Wert, sondern nur eine der Spalten verwenden. Ein Beispiel zum Erstellen einer Spalte mit neuen Werten, die auf einer Datumsspalte basieren, finden Sie unter Hinzufügen einer Datenquellensicht für Callcenterdaten (Data Mining-Lernprogramm für Fortgeschrittene).

Zurück zum Anfang