Modellfiltersyntax und Beispiele (Analysis Services - Data Mining)
Dieser Abschnitt enthält ausführliche Informationen zur Syntax für Filter 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, NOTavPredicate
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)
Hinweis 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)
!= (ungleich)
IS NULL
Wenn <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, das heißt in diesem Fall 25-35.
nestedTablePredicate
Filterausdruck, der für eine geschachtelte Tabelle gilt. Kann nur in Modellfiltern verwendet werden.Das Unterabfrageargument von <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 vom Typ <avPredicates> sein. Außerdem können die Prädikate nur auf Spalten verweisen, die in der aktuellen geschachtelten Tabelle enthalten sind, welche durch <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.
Zurück zum Anfang
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 sein.
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 auf mehrere Attribute 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, gibt an, dass der Kunde in einer Transaktion mindestens zwei Einheiten von 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 auf die 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 mit Kunden trainiert, 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 auf mehrere Werte in geschachtelten Tabellen
Der Zweck des Beispiels ist, das Filtern von geschachtelten Tabellen zu 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 auf Attribute 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 auf Produkte, für die der Wert fürOnSalenot 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 von Typ Continuous dar, die dem Forecasting-Modell hinzugefügt wurde.
=[DateCopy] > '12:31:2003:00:00:00'
Hinweis |
---|
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, der 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 bei der Filterung und Analyse verwendet werden soll.
Vorsicht |
---|
Wenn Sie ein Datum als Filterkriterium angeben, muss das folgende Format unabhängig von Datumsformat des aktuellen Betriebssystems verwendet werden: mm/dd/yyyy. Andernfalls wird ein Fehler ausgelöst. |
Wenn Sie beispielsweise die Callcenterergebnisse so filtern möchten, dass nur Wochenenden angezeigt werden, 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