Modellfiltersyntax und Beispiele (Analysis Services - Data Mining)

Gilt für: SQL Server 2019 und frühere Analysis Services Azure Analysis Services Fabric/Power BI Premium

Von Bedeutung

Data Mining wurde in SQL Server 2017 Analysis Services verworfen und ist in SQL Server 2022 Analysis Services eingestellt worden. Die Dokumentation wird nicht für veraltete und nicht mehr unterstützte Features aktualisiert. Weitere Informationen finden Sie unter "Analysis Services-Abwärtskompatibilität".

In diesem Artikel werden die Modellfiltersyntax beschrieben und Beispielausdrücke bereitgestellt.

Filtersyntax

Filter nach Fallattributen

Filter nach geschachtelten Tabellenattributen

Filter nach mehreren geschachtelten Tabellenattributen

Filtert Attribute, die in der geschachtelten Tabelle fehlen

Filtert nach mehreren geschachtelten Tabellenwerten

Filter nach geschachtelten Tabellenattributen und EXISTS

Filterkombinationen

Filtert nach Datumsangaben

Syntax für Filter

Filterausdrücke entsprechen in der Regel Ausdrücken in einer WHERE Klausel. Kombinieren Sie mehrere Bedingungen mit den logischen Operatoren AND, ORund NOT.

Verwenden Sie in geschachtelten Tabellen die EXISTS Operatoren und NOT EXISTS Eine EXISTS-Bedingung ergibt true, wenn die Unterabfrage mindestens eine Zeile zurückgibt. Verwenden Sie diese Bedingung, um das Modell auf Fälle zu beschränken, die einen bestimmten Wert in der geschachtelten Tabelle enthalten, z. B. Kunden, die ein Element mindestens einmal erworben haben.

Eine NOT EXISTS Bedingung ergibt true, wenn die Unterabfrage keine Zeilen zurückgibt. Verwenden Sie diese Bedingung, um das Modell auf Kunden einzuschränken, die nie einen bestimmten Artikel erworben haben.

Hier ist die allgemeine Syntax:

<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 sind.

Prädikatliste
Mindestens ein gültiger Filterausdruck, getrennt durch logische Operatoren.

Columnname
Der Name einer Miningstrukturspalte.

Logischer Operator
UND, ODER, NICHT

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 fortlaufende Spalte angewendet werden. :

  • < (kleiner als)

  • > (größer als)

  • >= (größer oder gleich)

  • <= (kleiner oder gleich)

Hinweis

Wenden Sie diese Operatoren unabhängig vom Datentyp nicht auf Spalten vom Typ Discrete, Discretizedoder Key.

Ein Ausdruck, der einen der folgenden Operatoren verwendet, kann auf eine fortlaufende, diskrete, diskretisierte oder Schlüsselspalte angewendet werden:

  • = (entspricht)

  • != (nicht gleich)

  • IS NULL

Wenn ein avPredicate Wert auf eine diskretisierte Spalte angewendet wird, verwenden Sie einen beliebigen Wert aus dem Ziel-Bucket im Filter.

Definieren Sie die Bedingung nicht als AgeDisc = '25-35'. Verwenden Sie stattdessen einen Wert aus diesem Intervall.

Stellt beispielsweise AgeDisc = 27 einen beliebigen Wert im selben Intervall wie 27 dar, der in diesem Beispiel 25 bis 35 beträgt.

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

Das nestedTablePredicate akzeptiert eine Unterabfrage nur für eine Spalte einer Tabellenminingstruktur.

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

Verwenden Sie nur avPredicate Prädikate. Jedes Prädikat kann nur auf Spalten in der aktuellen geschachtelten Tabelle verweisen, die durch columnName gekennzeichnet ist.

Einschränkungen bei der Filtersyntax

Die folgenden Einschränkungen gelten für Filter:

  • Verwenden Sie nur einfache Prädikate in einem Filter, einschließlich mathematischer Operatoren, Skalaren und Spaltennamen.

  • Die Filtersyntax unterstützt keine benutzerdefinierten Funktionen.

  • Die Filtersyntax unterstützt keine nicht booleschen Operatoren, z. B. Plus- und Minuszeichen.

Beispiele für Filter

Die folgenden Beispiele zeigen, wie Filter auf ein Miningmodell angewendet werden. Wenn Sie den Filterausdruck mithilfe von SQL Server Data Tools erstellen, werden im Eigenschaftenfenster und im Bereich Ausdruck des Filterdialogfelds nur die Zeichenfolge nach den WITH FILTER Schlüsselwörtern angezeigt. Jedes Beispiel enthält die Definition der Miningstruktur, um den Spaltentyp und die Verwendung zu verdeutlichen.

Beispiel 1: Typische Filterung auf Fallebene

Dieses Beispiel zeigt einen einfachen Filter, der die im Modell verwendeten Fälle auf Kunden einschränkt, deren Beruf Architekt ist und deren Alter über 30 Jahre beträgt.

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

Beispiel 2: Filterung auf Fallebene mit geschachtelten Tabellenattributen

Wenn Ihre Miningstruktur geschachtelte Tabellen enthält, können Sie entweder nach dem Vorhandensein eines Werts in einer geschachtelten Tabelle filtern oder nach geschachtelten Tabellenzeilen filtern, die einen bestimmten Wert enthalten. In diesem Beispiel werden die Fälle, die für das Modell verwendet werden, auf Kunden mit mehr als 30 Jahren beschränkt, die mindestens einen Kauf mit Milch getätigt haben.

Der Filter kann Spalten verwenden, die das Modell nicht enthält. Die geschachtelte Tabelle Products ist Teil der Miningstruktur, aber das Miningmodell enthält sie nicht. Sie können weiterhin nach Werten und Attributen in der geschachtelten Tabelle filtern. Aktivieren Sie Drillthrough zum Anzeigen der Falldetails.

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

Beispiel 3: Filterung auf Fallebene nach mehreren geschachtelten Tabellenattributen

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 > 30gilt für eine Spalte in der Falltabelle. Die verbleibenden Bedingungen gelten für die geschachtelte Tabelle.

Die zweite Bedingung, EXISTS (SELECT * FROM Products WHERE ProductName='Milk'), überprüft, ob die geschachtelte Tabelle mindestens einen Kauf enthält, die Milch enthält. Die dritte Bedingung erfordert, Quantity >= 2dass der Kunde mindestens zwei Milcheinheiten in einer Transaktion kauft.

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

Beispiel 4: Filterung auf Fallebene nach fehlenden geschachtelten Tabellenattributen

In diesem Beispiel werden Fälle auf Kunden beschränkt, die kein bestimmtes Element erworben haben, indem nach dem Fehlen eines Attributs in der geschachtelten Tabelle gefiltert wird. Das Modell verwendet Kunden im Alter von über 30 Jahren, die 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') )  

Beispiel 5: Filtern nach mehreren geschachtelten Tabellenwerten

Dieses Beispiel zeigt die geschachtelte Tabellenfilterung. Der geschachtelte Tabellenfilter wird nach dem Fallfilter ausgeführt und schränkt nur geschachtelte Tabellenzeilen ein.

Dieses Modell könnte 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  

Beispiel 6: Filtern nach geschachtelten Tabellenattributen und EXISTS

In diesem Beispiel begrenzt der Filter für geschachtelte Tabellen die Zeilen auf diejenigen, die Milch oder Wasser in Flaschen enthalten. Eine EXISTS Anweisung schränkt das Modell dann auf Fälle mit einer nicht leeren geschachtelten Tabelle ein.

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

Beispiel 7: Komplexe Filterkombinationen

Dieses Szenario ähnelt dem Szenario in Beispiel 4, ist aber viel komplexer. Die geschachtelte Tabelle "ProductsOnSale" weist die Filterbedingung (OnSale)auf, was bedeutet, dass der Wert von OnSale für das in "ProductName" aufgeführte Produkt sein true muss. In diesem Fall ist OnSale eine Strukturspalte.

Der zweite Teil des Filters für ProductsNotOnSale verwendet dieselbe Syntax, filtert jedoch Produkte, für die OnSalefalse ist (!OnSale).

Schließlich kombinieren Sie die Bedingungen und fügen der Falltabelle eine weitere Einschränkung hinzu. Das Ergebnis ist die Vorhersage von Käufen von Produkten in der Liste "ProductsNotOnSale ", basierend auf den Fällen, die in der ProductsOnSale-Liste enthalten sind, für alle Kunden im Alter von 25 Jahren.

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)

Beispiel 8: Filtern nach Datumsangaben

Sie können Eingabespalten wie alle anderen Daten nach Datumsangaben filtern. Datumsangaben, die in einer Spalte vom Typ "Datum/Uhrzeit" enthalten sind, sind fortlaufende Werte; Daher können Sie einen Datumsbereich mithilfe von Operatoren wie größer als (>) oder kleiner als (<) angeben. Wenn Ihre Datenquelle keine Datumsangaben durch einen Fortlaufenden Datentyp darstellt, aber als diskrete oder Textwerte, können Sie nicht nach einem Datumsbereich filtern, sondern einzelne diskrete Werte angeben.

Sie können jedoch keinen Filter für die Datumsspalte in einem Zeitreihenmodell erstellen, wenn die für den Filter verwendete Datumsspalte auch die Schlüsselspalte für das Modell ist. Diese Einschränkung besteht, da die Datumsspalte in Zeitreihenmodellen und Sequenzclusteringmodellen möglicherweise als KeyTime - oder KeySequence-Typ behandelt wird.

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

Der folgende Ausdruck filtert beispielsweise eine fortlaufende Datumsspalte , die dem Prognosemodell hinzugefügt wird.

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

Hinweis

Alle zusätzlichen Spalten, die Sie dem Modell hinzufügen, wirken sich möglicherweise auf die Ergebnisse aus. Wenn die Spalte nicht bei der Berechnung der Datenreihe verwendet werden soll, fügen Sie die Spalte nur der Miningstruktur und nicht dem Modell hinzu. Sie können auch die Modellkennzeichnung in der Spalte auf "PredictOnly" oder auf "Ignorieren" festlegen. Weitere Informationen finden Sie unter Modeling Flags (Data Mining).

Bei anderen Modelltypen können Sie Datumswerte wie in jeder anderen Spalte als Eingabekriterien oder Filterkriterien verwenden. Wenn Sie jedoch eine bestimmte Granularitätsebene verwenden müssen, die ein fortlaufender Datentyp nicht unterstützt, erstellen Sie einen abgeleiteten Wert in der Datenquelle, indem Sie Ausdrücke verwenden, um die Einheit zu extrahieren, die in Filter- und Analysevorgängen verwendet werden soll.

Warnung

Wenn Sie ein Datum als Filterkriterium angeben, verwenden Sie das mm/dd/yyyy Format unabhängig vom Datumsformat des aktuellen Betriebssystems. Jedes andere Format verursacht einen Fehler.

Wenn Sie beispielsweise Die Ergebnisse des Callcenters so filtern möchten, dass nur Wochenenden angezeigt werden, können Sie in der Datenquellenansicht einen Ausdruck erstellen, der den Wochentagsnamen für jedes Datum extrahiert, und dann diesen Wochentagnamenwert für eingaben oder als diskreter Wert beim Filtern verwenden. Denken Sie daran, dass sich wiederholte Werte auf das Modell auswirken können. Verwenden Sie also nur eine der Spalten, nicht die Datumsspalte und den abgeleiteten Wert.

Siehe auch

Filter für Miningmodelle (Analysis Services – Data Mining)
Testen und Überprüfen (Data Mining)