Syntaxe a příklady filtrů modelů (Analysis Services – dolování dat)

Platí pro: SQL Server 2019 a starší služby Analysis Services Azure Analysis Services Fabric/ Power BI Premium

Důležité

Dolování dat bylo v SQL Serveru 2017 Analysis Services zastaralé a nyní ukončeno ve službě SQL Server 2022 Analysis Services. Dokumentace se neaktualizuje pro zastaralé a ukončené funkce. Další informace najdete v tématu Zpětná kompatibilita služby Analysis Services.

Tento článek popisuje syntaxi filtru modelu a poskytuje ukázkové výrazy.

Syntaxe filtru

Filtry na atributy případu

Filtry na atributech vnořených tabulek

Filtry u více atributů z vnořených tabulek

Chybějící atributy filtrů v vnořené tabulce

Filtry pro více vnořených hodnot tabulek

Filtry na atributech vnořené tabulky a EXISTS

Kombinace filtrů

Filtry podle kalendářních dat

Syntaxe filtru

Výrazy filtru jsou obecně ekvivalentní výrazům v WHERE klauzuli. Kombinování více podmínek s logickými operátory AND, ORa NOT.

Ve vnořených tabulkách použijte operátory NOT EXISTS a EXISTS. Podmínka EXISTS se vyhodnotí jako true v případě, že poddotaz vrátí alespoň jeden řádek. Pomocí této podmínky můžete model omezit na případy, které obsahují konkrétní hodnotu v vnořené tabulce, například na zákazníky, kteří položku zakoupili alespoň jednou.

NOT EXISTS Podmínka se vyhodnotí jako true v případě, že poddotaz nevrátí žádné řádky. Pomocí této podmínky můžete model omezit na zákazníky, kteří si určitou položku nikdy nekoupili.

Tady je obecná syntaxe:

<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
Obsahuje jeden nebo více predikátů spojených logickými operátory.

seznam predikátů
Jeden nebo více platných výrazů filtru oddělených logickými operátory.

Columnname
Název sloupce dolování.

logický operátor
ANEBONE

avPredicate
Filtrovací výraz, který lze použít pouze pro skalární sloupec těžební struktury. Výraz avPredicate lze použít v obou filtrech modelu nebo vnořených filtrech tabulky.

Výraz, který používá některý z následujících operátorů, lze použít pouze na souvislý sloupec. :

  • < (menší než)

  • > (větší než)

  • >= (větší než nebo rovno)

  • <= (menší než nebo rovno)

Poznámka:

Bez ohledu na datový typ nepoužívejte tyto operátory na sloupce typu Discrete, Discretizednebo Key.

Výraz, který používá některý z následujících operátorů, lze použít na souvislý, diskrétní, diskretizovaný nebo klíčový sloupec:

  • = (rovná se)

  • != (nerovná se)

  • JE NULL

Pokud platí avPredicate pro diskretizovaný sloupec, použijte libovolnou hodnotu z cílového kontejneru ve filtru.

Nedefinujte podmínku jako AgeDisc = '25-35'. Místo toho použijte hodnotu z daného intervalu.

Například AgeDisc = 27 představuje jakoukoli hodnotu ve stejném intervalu jako 27, což je v tomto příkladu 25–35.

nestedTablePredicate
Filtrovací výraz, který se vztahuje na vnořenou tabulku. Lze použít pouze ve filtrech modelu.

nestedTablePredicate přijímá vnořený dotaz pouze pro sloupec struktury dolování v tabulce.

Poddotaz
Příkaz SELECT následovaný platným predikátem nebo seznamem predikátů.

Používejte pouze avPredicate predikáty. Každý predikát může odkazovat pouze na sloupce v aktuální vnořené tabulce identifikované pomocí columnName.

Omezení syntaxe filtru

Pro filtry platí následující omezení:

  • Ve filtru používejte pouze jednoduché predikáty, včetně matematických operátorů, skalárů a názvů sloupců.

  • Syntaxe filtru nepodporuje uživatelem definované funkce.

  • Syntaxe filtru nepodporuje nebooleovské operátory, jako jsou znaménka plus a minus.

Příklady filtrů

Následující příklady ukazují, jak použít filtry na model dolování. Pokud vytváříte výraz filtru pomocí SQL Server Data Tools, okno Vlastnost a podokno Výraz v dialogovém okně filtru zobrazí pouze řetězec za WITH FILTER klíčovými slovy. Každý příklad obsahuje definici struktury pro dolování dat, která upřesňuje typ sloupce a jeho použití.

Příklad 1: Typické filtrování na úrovni případu

Tento příklad ukazuje jednoduchý filtr, který omezuje případy použité v modelu na zákazníky, jejichž povolání je architekt a jehož věk je více než 30.

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

Příklad 2: Filtrování na úrovni případu pomocí vnořených atributů tabulky

Pokud struktura dolování obsahuje vnořené tabulky, můžete buď filtrovat existenci hodnoty v vnořené tabulce, nebo filtrovat řádky vnořené tabulky, které obsahují určitou hodnotu. Tento příklad omezuje případy použité pro model na zákazníky ve věku 30 let, kteří provedli alespoň jeden nákup, který zahrnoval mléko.

Filtr může používat sloupce, které model neobsahuje. Vnořená tabulka Products je součástí struktury dolování, ale model dolování dat ji nezahrnuje. Stále můžete filtrovat hodnoty a atributy v vnořené tabulce. Pokud chcete zobrazit podrobnosti případu, povolte podrobnou analýzu.

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

Příklad 3: Filtrování na úrovni případů podle více atributů vnořené tabulky

Tento příklad ukazuje třídílný filtr: podmínka se vztahuje na tabulku případu, další podmínku atributu v vnořené tabulce a další podmínku pro konkrétní hodnotu v jednom ze sloupců vnořené tabulky.

První podmínka ve filtru, Age > 30 platí pro sloupec v tabulce případů. Zbývající podmínky platí pro vnořenou tabulku.

Druhá podmínka EXISTS (SELECT * FROM Products WHERE ProductName='Milk') kontroluje, zda vnořená tabulka obsahuje alespoň jeden nákup, který obsahuje mléko. Třetí podmínka, Quantity >= 2, vyžaduje, aby si zákazník v rámci jedné transakce koupil alespoň dvě balení mléka.

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

Příklad 4: Filtrování případů podle nepřítomnosti atributů vnořené tabulky

Tento příklad omezuje případy na zákazníky, kteří nezakoupili konkrétní položku filtrováním podle absence atributu v vnořené tabulce. Model používá zákazníky starší než 30 let, kteří nikdy nekoupili mléko.

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

Příklad 5: Filtrování podle více vnořených hodnot tabulky

Tento příklad ukazuje filtrování vnořených tabulek. Filtr vnořených tabulek se spustí po filtru případu a omezí pouze vnořené řádky tabulky.

Tento model může obsahovat více případů s prázdnými vnořenými tabulkami, protože EXISTS není zadaný.

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  

Příklad 6: Filtrování podle atributů vnořené tabulky a EXISTS

V tomto příkladu filtr v zanořené tabulce omezuje řádky pouze na ty, které obsahují mléko nebo balenou vodu. Příkaz EXISTS pak model omezí na případy s neprázdnou vnořenou tabulkou.

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

Příklad 7: Složité kombinace filtrů

Tento scénář se podobá scénáři v příkladu 4, ale je mnohem složitější. Vnořená tabulka ProductsOnSale má podmínku (OnSale)filtru , což znamená, že hodnota OnSale musí být true pro produkt uvedený v ProductName. V tomto případě je OnSale sloupec struktury.

Druhá část filtru, pro ProductsNotOnSale, používá stejnou syntaxi, ale filtruje produkty, u nichž je false (!OnSale).

Nakonec zkombinujete podmínky a přidáte do tabulky případu jedno další omezení. Výsledkem je predikce nákupů produktů v seznamu ProductsNotOnSale na základě případů zahrnutých v seznamu ProductsOnSale pro všechny zákazníky starší 25 let.

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)

Příklad 8: Filtrování podle kalendářních dat

Vstupní sloupce můžete filtrovat podle kalendářních dat stejně jako jakákoli jiná data. Kalendářní data obsažená ve sloupci typu datum a čas jsou souvislé hodnoty; proto můžete zadat rozsah kalendářních dat pomocí operátorů, jako jsou například větší než (>) nebo menší než (<). Pokud zdroj dat nepředstavuje kalendářní data podle typu Průběžný, ale jako diskrétní nebo textové hodnoty, nemůžete filtrovat rozsah kalendářních dat, ale musíte zadat jednotlivé diskrétní hodnoty.

Pokud je sloupec kalendářních dat použitý pro filtr také klíčovým sloupcem modelu časové řady, nemůžete vytvořit filtr ve sloupci kalendářního data použitého pro tento filtr. Toto omezení existuje, protože v modelech časových řad a modelech sekvenčního clusteringu může být sloupec kalendářního data zpracován jako typ KeyTime nebo KeySequence.

Pokud potřebujete filtrovat souvislá data v modelu časové řady, můžete vytvořit kopii sloupce ve struktuře dolování a filtrovat model podle nového sloupce.

Následující výraz například filtruje sloupec průběžného data přidaného do modelu prognózování.

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

Poznámka:

Všechny další sloupce, které přidáte do modelu, můžou ovlivnit výsledky. Pokud nechcete, aby se sloupec používal při výpočtu datové řady, přidejte ho pouze do dolovací struktury, ne do modelu. Příznak modelu ve sloupci můžete také nastavit na PredictOnly nebo Ignorovat. Další informace naleznete v tématu Modeling Flags (Data Mining).

U jiných typů modelů můžete kalendářní data použít jako vstupní kritéria nebo kritéria filtru stejně jako v jakémkoli jiném sloupci. Pokud ale potřebujete použít konkrétní úroveň členitosti, kterou datový typ Continuous nepodporuje, vytvořte odvozenou hodnotu ve zdroji dat pomocí výrazů k extrahování jednotky, která se má použít při filtrování a analýze.

Výstraha

Pokud zadáte datum jako kritérium filtru, použijte mm/dd/yyyy formát bez ohledu na formát data aktuálního operačního systému. Jakýkoli jiný formát způsobí chybu.

Pokud například chcete filtrovat výsledky call centra tak, aby zobrazovaly jenom víkendy, můžete vytvořit výraz v zobrazení zdroje dat, který extrahuje název dne v týdnu pro každé datum a pak tuto hodnotu názvu dne v týdnu použít pro vstup nebo jako samostatnou hodnotu při filtrování. Mějte na paměti, že opakující se hodnoty můžou mít vliv na model, proto používejte pouze jeden ze sloupců, nikoli sloupec kalendářních dat a odvozenou hodnotu.

Viz také

Filtry pro modely dolování (Analysis Services – Dolování dat)
Testování a ověřování (dolování dat)