Modellfiltersyntax och exempel (Analysis Services – datautvinning)

Gäller för: SQL Server 2019 och tidigare Analysis Services Azure Analysis Services Fabric/Power BI Premium

Viktigt!

Datautvinningen upphörde i SQL Server 2017 Analysis Services och upphörde nu i SQL Server 2022 Analysis Services. Dokumentationen uppdateras inte för inaktuella och utgångna funktioner. Mer information finns i Analysis Services bakåtkompatibilitet.

Den här artikeln beskriver modellfiltersyntaxen och innehåller exempeluttryck.

Filtersyntax

Filter för ärendeattribut

Filter på kapslade tabellattribut

Filter för flera kapslade tabellattribut

Filterattribut saknas i kapslad tabell

Filter på flera kapslade tabellvärden

Filter på kapslade tabellattribut och EXISTS

Filterkombinationer

Filter på datum

Syntax för filter

Filteruttryck är i allmänhet likvärdiga med uttryck i en WHERE sats. Kombinera flera villkor med de logiska operatorerna AND, ORoch NOT.

Använd operatorerna EXISTS och NOT EXISTS i kapslade tabeller. Ett EXISTS villkor utvärderas till true om underfrågan returnerar minst en rad. Använd det här villkoret för att begränsa modellen till fall som innehåller ett specifikt värde i den kapslade tabellen, till exempel kunder som har köpt ett objekt minst en gång.

Ett NOT EXISTS villkor utvärderas till true om underfrågan inte returnerar några rader. Använd det här villkoret för att begränsa modellen till kunder som aldrig har köpt ett specifikt objekt.

Här är den allmänna syntaxen:

<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
Innehåller ett eller flera predikat som är anslutna med logiska operatorer.

predikatlista
Ett eller flera giltiga filteruttryck, avgränsade med logiska operatorer.

Columnname
Namnet på en kolumn för gruvstruktur.

logisk operator
OCH, ELLER, INTE

avPredicate
Filteruttryck som endast kan tillämpas på kolumnen för skalbar gruvstruktur. Ett avPredicate-uttryck kan användas i båda modellfilter eller kapslade tabellfilter.

Ett uttryck som använder någon av följande operatorer kan bara tillämpas på en kontinuerlig kolumn. :

  • < (mindre än)

  • > (större än)

  • >= (större än eller lika med)

  • <= (mindre än eller lika med)

Anmärkning

Oavsett datatyp ska du inte tillämpa dessa operatorer på kolumner av typen Discrete, Discretizedeller Key.

Ett uttryck som använder någon av följande operatorer kan tillämpas på en kontinuerlig, diskret, diskretiserad eller nyckelkolumn:

  • = (lika med)

  • != (inte lika med)

  • ÄR NULL

När en avPredicate gäller för en diskret kolumn använder du valfritt värde från mål bucketen i filtret.

Definiera inte villkoret som AgeDisc = '25-35'. Använd i stället ett värde från det intervallet.

Representerar till exempel AgeDisc = 27 valfritt värde i samma intervall som 27, vilket är 25–35 i det här exemplet.

nestedTablePredicate
Filteruttryck som gäller för en kapslad tabell. Kan endast användas i modellfilter.

Accepterar nestedTablePredicate endast en underfråga för en kolumn för tabellbrytningsstruktur.

Underfråga
En SELECT-instruktion följt av ett giltigt predikat eller en lista över predikat.

Använd endast avPredicate predikat. Varje predikat kan endast referera till kolumner i den aktuella kapslade tabellen som identifieras av columnName.

Begränsningar för filtersyntax

Följande begränsningar gäller för filter:

  • Använd endast enkla predikat i ett filter, inklusive matematiska operatorer, skalärer och kolumnnamn.

  • Filtersyntaxen stöder inte användardefinierade funktioner.

  • Filtersyntaxen stöder inte icke-booleska operatorer, till exempel plus- och minustecken.

Exempel på filter

Följande exempel visar hur du tillämpar filter på en gruvmodell. Om du skapar filteruttrycket med hjälp av SQL Server Data Tools visas endast strängen efter nyckelorden WITH FILTER i egenskapsfönstret och fönstret Uttryck i filterdialogrutan. Varje exempel innehåller definitionen av gruvstruktur för att klargöra kolumntypen och användningen.

Exempel 1: Typisk filtrering på fallnivå

Det här exemplet visar ett enkelt filter som begränsar de fall som används i modellen till kunder vars yrke är arkitekt och vars ålder är över 30 år.

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

Exempel 2: Filtrering på ärendenivå med hjälp av kapslade tabellattribut

Om din gruvstruktur innehåller kapslade tabeller kan du antingen filtrera på förekomsten av ett värde i en kapslad tabell eller filtrera på kapslade tabellrader som innehåller ett specifikt värde. Det här exemplet begränsar de fall som används för modellen till kunder över 30 år som gjorde minst ett köp som inkluderade mjölk.

Filtret kan använda kolumner som modellen inte innehåller. Den kapslade tabellen Products är en del av gruvstrukturen, men gruvmodellen inkluderar den inte. Du kan fortfarande filtrera efter värden och attribut i den kapslade tabellen. Aktivera drillthrough för att visa ärendedetaljerna.

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

Exempel 3: Filtrering på ärendenivå för flera kapslade attribut i tabeller

Det här exemplet visar ett filter i tre delar: ett villkor gäller för skiftlägestabellen, ett annat villkor för ett attribut i den kapslade tabellen och ett annat villkor för ett specifikt värde i en av de kapslade tabellkolumnerna.

Det första villkoret i filtret, Age > 30, gäller för en kolumn i ärendetabellen. De återstående villkoren gäller för den kapslade tabellen.

Det andra villkoret, EXISTS (SELECT * FROM Products WHERE ProductName='Milk'), kontrollerar om den kapslade tabellen innehåller minst ett köp som innehåller mjölk. Det tredje villkoret, Quantity >= 2, kräver att kunden köper minst två mjölkenheter i en transaktion.

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

Exempel 4: Filtrering på ärendenivå utifrån frånvaron av attribut i kapslade tabeller

I det här exemplet begränsas ärenden till kunder som inte har köpt ett specifikt objekt genom att filtrera på avsaknaden av ett attribut i den kapslade tabellen. Modellen använder kunder över 30 år som aldrig köpte mjölk.

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

Exempel 5: Filtrera på flera kapslade tabellvärden

I det här exemplet visas kapslad tabellfiltrering. Filtret för kapslade tabeller körs efter ärendefiltret och begränsar endast rader i kapslade tabeller.

Den här modellen kan innehålla flera fall med tomma kapslade tabeller eftersom EXISTS inte har angetts.

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  

Exempel 6: Filtrering på kapslade tabellattribut och EXISTS

I det här exemplet begränsar det kapslade tabellfiltret rader till de som innehåller mjölk eller vatten på flaska. Ett EXISTS uttryck begränsar sedan modellen till fall med en kapslad tabell som inte är tom.

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

Exempel 7: Komplexa filterkombinationer

Det här scenariot liknar scenariot i exempel 4, men det är mycket mer komplext. Den kapslade tabellen ProductsOnSale har filtervillkoret (OnSale), vilket innebär att värdet för OnSale måste vara true för den produkt som anges i ProductName. I det här fallet är OnSale en strukturkolumn.

Den andra delen av filtret, för ProductsNotOnSale, använder samma syntax men filtrerar produkter där OnSale är false (!OnSale).

Slutligen kombinerar du villkoren och lägger till ytterligare en begränsning i ärendetabellen. Resultatet är att förutsäga köp av produkter i productsNotOnSale-listan , baserat på de fall som ingår i ProductsOnSale-listan , för alla kunder över 25 år.

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)

Exempel 8: Filtrera efter datum

Du kan filtrera indatakolumner på datum, precis som andra data. Datum som finns i en kolumn av typen datum/tid är kontinuerliga värden. Därför kan du ange ett datumintervall med hjälp av operatorer som större än (>) eller mindre än (<). Om din datakälla inte representerar datum efter en kontinuerlig datatyp, men som diskreta värden eller textvärden, kan du inte filtrera efter ett datumintervall, utan måste ange enskilda diskreta värden.

Du kan dock inte skapa ett filter för datumkolumnen i en tidsseriemodell om datumkolumnen som används för filtret också är nyckelkolumnen för modellen. Den begränsningen finns eftersom datumkolumnen i tidsseriemodeller och sekvensklustringsmodeller kan hanteras som typen KeyTime eller KeySequence.

Om du behöver filtrera på kontinuerliga datum i en tidsseriemodell kan du skapa en kopia av kolumnen i gruvstrukturen och filtrera modellen på den nya kolumnen.

Följande uttryck filtrerar till exempel en kolumn med kontinuerligt datum som lagts till i prognostiseringsmodellen.

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

Anmärkning

Eventuella extra kolumner som du lägger till i modellen kan påverka resultatet. Om du inte vill att kolumnen ska användas i beräkningen av serien lägger du bara till kolumnen i gruvstrukturen och inte till modellen. Du kan också ange modellflaggan i kolumnen till PredictOnly eller ignorera. Mer information finns i Modelleringsflaggor (datautvinning).

För andra modelltyper kan du använda datum som indatavillkor eller filtervillkor precis som i andra kolumner. Men om du behöver använda en viss detaljnivå som en kontinuerlig datatyp inte stöder, skapar du ett härlett värde i datakällan med hjälp av uttryck för att extrahera enheten som ska användas i filtrering och analys.

Varning

När du anger ett datum som ett filtervillkor använder du mm/dd/yyyy formatet oavsett det aktuella operativsystemets datumformat. Alla andra format orsakar ett fel.

Om du till exempel vill filtrera callcenterresultatet så att det bara visas helger kan du skapa ett uttryck i datakällans vy som extraherar veckodagsnamnet för varje datum och sedan använda veckodagsnamnets värde för indata eller som ett diskret värde i filtreringen. Kom ihåg att upprepade värden kan påverka modellen, så använd bara en av kolumnerna, inte datumkolumnen plus det härledda värdet.

Se även

Filter för gruvmodeller (Analysis Services – datautvinning)
Testning och validering (datautvinning)