Syntaxis en voorbeelden van modelfilters (Analysis Services - gegevensanalyse)

Van toepassing op: SQL Server 2019 en eerder Analysis Services Azure Analysis Services Fabric/Power BI Premium

Belangrijk

Data mining werd verouderd verklaard in SQL Server 2017 Analysis Services en is nu stopgezet in SQL Server 2022 Analysis Services. Documentatie wordt niet bijgewerkt voor afgeschafte en stopgezette functies. Zie Analysis Services-compatibiliteit met eerdere versies voor meer informatie.

In dit artikel worden de syntaxis van het modelfilter beschreven en worden voorbeeldexpressies weergegeven.

Filtersyntaxis

Filters op casekenmerken

Filters op geneste tabelattributen

Filters op meerdere geneste tabelkenmerken

Filterskenmerken ontbreken in geneste tabel

Filters op meerdere geneste tabelwaarden

Filters op geneste tabeleigenschappen en EXISTS

Filtercombinaties

Filters op datums

Filtersyntaxis

Filterexpressies zijn over het algemeen equivalent aan expressies in een WHERE-clausule. Meerdere voorwaarden combineren met de logische operators AND, ORen NOT.

Gebruik de EXISTS en NOT EXISTS operators in geneste tabellen. Een EXISTS-voorwaarde evalueert naar true als de subquery ten minste één rij retourneert. Gebruik deze voorwaarde om het model te beperken tot gevallen die een specifieke waarde in de geneste tabel bevatten, zoals klanten die ten minste één keer een item hebben gekocht.

Een NOT EXISTS-voorwaarde resulteert in true als de subquery geen rijen retourneert. Gebruik deze voorwaarde om het model te beperken tot klanten die nooit een specifiek artikel hebben gekocht.

Dit is de algemene syntaxis:

<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
Bevat een of meer predicaten, verbonden door logische operators.

predicaatlijst
Een of meer geldige filterexpressies, gescheiden door logische operators.

Kolomnaam
De naam van een kolom van een mijnbouwstructuur.

logische operator
EN, OF, NIET

avPredicate
Filterexpressie die alleen kan worden toegepast op de kolom scalaire mijnbouwstructuur. Een avPredicate-expressie kan worden gebruikt in zowel modelfilters als geneste tabelfilters.

Een expressie die gebruikmaakt van een van de volgende operators, kan alleen worden toegepast op een doorlopende kolom. :

  • < (kleiner dan)

  • > (groter dan)

  • >= (groter dan of gelijk aan)

  • <= (kleiner dan of gelijk aan)

Opmerking

U kunt deze operatoren niet toepassen op kolommen van het type Discrete, Discretizedof Key, ongeacht het gegevenstype.

Een uitdrukking die gebruikmaakt van een van de volgende operators kan worden toegepast op een continue, discrete, gediscretiseerde of sleutelkolom.

  • = (is gelijk aan)

  • != (niet gelijk aan)

  • IS NULL

Wanneer een avPredicate wordt toegepast op een gediscretiseerde kolom, gebruik dan een willekeurige waarde uit de doelbucket in het filter.

Definieer de voorwaarde niet als AgeDisc = '25-35'. Gebruik in plaats daarvan een waarde uit dat interval.

Vertegenwoordigt bijvoorbeeld AgeDisc = 27 een waarde in hetzelfde interval als 27, dat in dit voorbeeld 25-35 is.

nestedTablePredicate
Filterexpressie die van toepassing is op een geneste tabel. Kan alleen worden gebruikt in modelfilters.

nestedTablePredicate accepteert alleen een subquery voor een kolom van een tabelminingstructuur.

Subquery
Een SELECT-instructie gevolgd door een geldig predicaat of een lijst met predicaten.

Gebruik alleen avPredicate predicaten. Elk predicaat kan alleen verwijzen naar kolommen in de huidige geneste tabel die wordt geïdentificeerd door columnName.

Beperkingen voor filtersyntaxis

De volgende beperkingen gelden voor filters:

  • Gebruik alleen eenvoudige predicaten in een filter, waaronder wiskundige operatoren, scalaire waarden en kolomnamen.

  • Filtersyntaxis biedt geen ondersteuning voor door de gebruiker gedefinieerde functies.

  • Filtersyntaxis biedt geen ondersteuning voor niet-Booleaanse operatoren, zoals plus- en mintekens.

Voorbeelden van filters

In de volgende voorbeelden ziet u hoe u filters toepast op een mijnbouwmodel. Als u de filterexpressie maakt met behulp van SQL Server Data Tools, worden in het venster Eigenschap en het deelvenster Expressie van het filtervenster alleen de tekenreeks na de WITH FILTER trefwoorden weergegeven. Elk voorbeeld bevat de definitie van de mijnbouwstructuur om het kolomtype en het gebruik te verduidelijken.

Voorbeeld 1: Typische filtering op hoofdletter-/kleineletterniveau

In dit voorbeeld ziet u een eenvoudig filter waarmee de gevallen die in het model worden gebruikt, worden beperkt tot klanten van wie de bezetting architect is en waarvan de leeftijd ouder is dan 30.

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

Voorbeeld 2: Filteren op caseniveau met geneste tabelattributen

Als uw mijnbouwstructuur geneste tabellen bevat, kunt u filteren op het bestaan van een waarde in een geneste tabel of filteren op geneste tabelrijen die een specifieke waarde bevatten. In dit voorbeeld worden de gevallen die voor het model worden gebruikt beperkt tot klanten ouder dan 30 jaar die ten minste één aankoop hebben gedaan die melk bevatte.

Het filter kan kolommen gebruiken die het model niet bevat. De geneste tabel Producten maakt deel uit van de mijnbouwstructuur, maar het mijnbouwmodel bevat deze niet. U kunt nog steeds filteren op waarden en attributen in de geneste tabel. Schakel drillthrough in om de details van de zaak te bekijken.

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

Voorbeeld 3: Filteren op casusniveau op meerdere geneste tabelattributen

In dit voorbeeld ziet u een driedelig filter: een voorwaarde is van toepassing op de casetabel, een andere voorwaarde op een kenmerk in de geneste tabel en een andere voorwaarde op een specifieke waarde in een van de geneste tabelkolommen.

De eerste voorwaarde in het filter, is Age > 30van toepassing op een kolom in de casetabel. De overige voorwaarden zijn van toepassing op de geneste tabel.

De tweede voorwaarde, EXISTS (SELECT * FROM Products WHERE ProductName='Milk'), controleert of de geneste tabel ten minste één aankoop bevat waarin melk is opgenomen. De derde voorwaarde, Quantity >= 2vereist dat de klant ten minste twee melkeenheden in één transactie koopt.

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

Voorbeeld 4: Filteren op caseniveau op basis van de afwezigheid van attributen van geneste tabellen

In dit voorbeeld worden gevallen beperkt tot klanten die geen specifiek item hebben gekocht door te filteren op het ontbreken van een kenmerk in de geneste tabel. Het model gebruikt klanten ouder dan 30 jaar die nooit melk hebben gekocht.

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

Voorbeeld 5: Filteren op meerdere geneste tabelwaarden

Dit voorbeeld toont het filteren van geneste tabellen. Het filter voor geneste tabellen wordt uitgevoerd na het hoofdletter-/kleineletterfilter en beperkt alleen de rijen in geneste tabellen.

Dit model kan meerdere gevallen bevatten waarin geneste tabellen leeg zijn, omdat EXISTS niet is gespecificeerd.

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  

Voorbeeld 6: Filteren op geneste tabelkenmerken en EXISTS

In dit voorbeeld beperkt het filter voor geneste tabellen de rijen tot de rijen die melk of flessenwater bevatten. Een EXISTS statement beperkt het model vervolgens tot gevallen met een niet-lege geneste tabel.

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

Voorbeeld 7: Complexe filtercombinaties

Dit scenario lijkt op het scenario in voorbeeld 4, maar is veel complexer. De geneste tabel ProductsOnSale heeft de filtervoorwaarde (OnSale), wat betekent dat de waarde van OnSale moet zijn true voor het product dat wordt vermeld in ProductName. In dit geval is OnSale een structuurkolom.

Het tweede deel van het filter, voor ProductsNotOnSale, gebruikt dezelfde syntaxis, maar filtert producten waarvoor OnSale is false (!OnSale).

Ten slotte combineert u de voorwaarden en voegt u nog een beperking toe aan de casetabel. Het resultaat is om aankopen van producten in de lijst ProductsNotOnSale te voorspellen, op basis van de gevallen die zijn opgenomen in de lijst ProductsOnSale voor alle klanten ouder dan 25 jaar.

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)

Voorbeeld 8: Filteren op datums

U kunt invoerkolommen filteren op datums, net zoals alle andere gegevens. Datums in een kolom van het type datum/tijd zijn doorlopende waarden; Daarom kunt u een datumbereik opgeven met behulp van operatoren zoals groter dan (>) of kleiner dan (<). Als uw gegevensbron geen datums weergeeft op basis van een doorlopend gegevenstype, maar als discrete waarden of tekstwaarden, kunt u niet filteren op een datumbereik, maar moet u afzonderlijke afzonderlijke waarden opgeven.

U kunt echter geen filter maken voor de datumkolom in een tijdreeksmodel als de datumkolom die voor het filter wordt gebruikt, ook de sleutelkolom voor het model is. Deze beperking bestaat omdat in tijdreeksmodellen en clusteringmodellen voor reeksen de datumkolom kan worden verwerkt als type KeyTime of KeySequence.

Als u wilt filteren op doorlopende datums in een tijdreeksmodel, kunt u een kopie van de kolom in de mijnbouwstructuur maken en het model filteren op de nieuwe kolom.

Deze expressie filtert bijvoorbeeld een datumkolom Continuous die is toegevoegd aan het Forecasting-model.

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

Opmerking

Eventuele extra kolommen die u aan het model toevoegt, kunnen van invloed zijn op de resultaten. Als u niet wilt dat de kolom wordt gebruikt in de berekening van de reeks, voegt u de kolom alleen toe aan de mijnbouwstructuur en niet aan het model. U kunt ook de modelvlag in de kolom instellen op PredictOnly of op Negeren. Zie Modeling Flags (Data Mining) voor meer informatie.

Voor andere modeltypen kunt u datums gebruiken als invoercriteria of filtercriteria, net zoals in elke andere kolom. Als u echter een specifiek granulariteitsniveau wilt gebruiken dat niet door een doorlopend gegevenstype wordt ondersteund, maakt u een afgeleide waarde in de gegevensbron met behulp van expressies om de eenheid te extraheren die moet worden gebruikt bij filteren en analyseren.

Waarschuwing

Wanneer u een datum opgeeft als filtercriterium, gebruikt u de mm/dd/yyyy notatie, ongeacht de datumnotatie van het huidige besturingssysteem. Elke andere indeling veroorzaakt een fout.

Als u bijvoorbeeld de resultaten van het callcentrum wilt filteren om alleen weekenden weer te geven, kunt u een expressie maken in de gegevensbronweergave waarmee de weekdagnaam voor elke datum wordt geëxtraheerd en die weekdagnaamwaarde vervolgens gebruikt voor invoer of als een discrete waarde bij het filteren. Houd er rekening mee dat herhalende waarden van invloed kunnen zijn op het model, dus gebruik slechts één van de kolommen, niet de datumkolom plus de afgeleide waarde.

Zie ook

Filters voor mijnbouwmodellen (Analysis Services - Gegevensanalyse)
Testen en valideren (gegevensanalyse)