Sdílet prostřednictvím


StructureColumn (DMX)

platí pro: SQL Server Analysis Services

Vrátí hodnotu sloupce struktury odpovídající zadanému případu nebo hodnotu tabulky pro vnořenou tabulku v zadaném případě.

Syntax

  
StructureColumn('structure column name')  

Argumenty

structure-column-name.
Název sloupce struktury dolování velkých a malých písmen nebo vnořených tabulek

Typ výsledku

Vrácený typ závisí na typu sloupce odkazovaného v názvu sloupce struktury <> parametru. Pokud například sloupec dolování, na který se odkazuje, obsahuje skalární hodnotu, vrátí funkce skalární hodnotu.

Pokud sloupec struktury dolování, na který se odkazuje, je vnořená tabulka, vrátí funkce hodnotu tabulky. Vrácenou hodnotu tabulky lze použít v klauzuli FROM příkazu sub-SELECT.

Poznámky

Tato funkce je polymorfní a dá se použít kdekoli v příkazu, který umožňuje výrazy, včetně seznamu výrazů SELECT, výrazu podmínky WHERE a výrazu ORDER BY.

Název sloupce ve struktuře dolování je řetězcová hodnota a jako taková musí být uzavřena do jednoduchých uvozovek: například StructureColumn('sloupec 1'). Pokud existuje více sloupců se stejným názvem, název se přeloží v kontextu ohraničujícího příkazu SELECT.

Výsledky vrácené z dotazu pomocí funkce StructureColumn jsou ovlivněny přítomností jakýchkoli filtrů v modelu. To znamená, že filtr modelu řídí případy, které jsou součástí modelu dolování. Dotaz na sloupec struktury proto může vrátit pouze ty případy, které byly použity v modelu dolování. V části Příklady v tomto tématu najdete ukázku kódu, která ukazuje vliv filtrů modelu dolování na tabulky velkých a vnořených tabulek.

Další informace o použití této funkce v příkazu DMX SELECT naleznete v tématu SELECT FROM <model>. PŘÍPADY (DMX) nebo struktury SELECT FROM <>. PŘÍPADY.

Chybové zprávy

Pokud uživatel nemá oprávnění podrobné analýzy k nadřazené dolování, vyvolá se následující chyba zabezpečení:

Uživatel '%{user/}' nemá oprávnění procházet nadřazenou dolování struktury '%{model/}' dolování.

Pokud je zadán neplatný název sloupce struktury, vyvolá se následující chybová zpráva:

Sloupec struktury dolování {structure-column-name/}%nebyl nalezen v nadřazené struktuře%{structure/} v aktuálním kontextu (řádek %{line/}, sloupec %{column/}).

Příklady

Pro tyto příklady použijeme následující dolování. Všimněte si, že dolování struktura obsahuje dva vnořené sloupce tabulky, Products a Hobbies. Vnořená tabulka ve sloupci Hobbies má jeden sloupec, který se používá jako klíč pro vnořenou tabulku. Vnořená tabulka ve sloupci Products je složitá vnořená tabulka, která obsahuje klíčový sloupec i další sloupce používané pro vstup. Následující příklady ukazují, jak lze navrhnout strukturu dolování dat tak, aby zahrnovala mnoho různých sloupců, i když model nemusí používat každý sloupec. Některé z těchto sloupců nemusí být užitečné na úrovni modelu pro zobecnění vzorů, ale mohou být velmi užitečné pro podrobnou analýzu.

CREATE MINING STRUCTURE [MyStructure]   
(  
CustomerName TEXT KEY,  
Occupation TEXT DISCRETE,  
Age LONG CONTINUOUS,  
MaritalStatus TEXT DISCRETE,  
Income LONG CONTINUOUS,  
Products  TABLE  
 (  
    ProductNameTEXT KEY,  
    Quantity LONG CONTINUOUS,  
    OnSale BOOLEAN  DISCRETE  
)  
 Hobbies  TABLE  
 (  
    Hobby KEY  
 ))  

Dále vytvořte model dolování založený na struktuře, kterou jste právě vytvořili, pomocí následujícího ukázkového kódu:

ALTER MINING STRUCTURE [MyStructure] ADD MINING MODEL [MyModel] (  
CustomerName,  
Age,  
MaritalStatus,  
Income PREDICT,  
Products   
(  
ProductName  
) WITH FILTER(NOT OnSale)  
) USING Microsoft_Decision_Trees   
WITH FILTER(EXISTS (Products))  

Ukázkový dotaz 1: Vrácení sloupce ze struktury dolování

Následující ukázkový dotaz vrátí sloupce CustomerName a Age, které jsou definovány jako součást modelu dolování. Dotaz však vrátí také sloupec Age, který je součástí struktury, ale není součástí dolování modelu.

SELECT CustomerName, Age, StructureColumn('Occupation') FROM MyModel.CASES   
WHERE Age > 30  

Všimněte si, že filtrování řádků pro omezení případů na zákazníky starší 30 let probíhá na úrovni modelu. Tento výraz proto nevrací případy, které jsou součástí dat struktury, ale model je nepoužívá. Vzhledem k tomu, že podmínka filtru použitá k vytvoření modelu (EXISTS (Products)) omezuje případy pouze na zákazníky, kteří zakoupili produkty, mohou existovat případy ve struktuře, které tento dotaz nevrátí.

Ukázkový dotaz 2: Použití filtru ve sloupci Struktura

Následující ukázkový dotaz nejen vrátí sloupce modelu CustomerName a Agea vnořenou tabulku Products, ale také vrátí hodnotu sloupce Quantity v vnořené tabulce, která není součástí modelu.

SELECT CustomerName, Age,  
(SELECT ProductName, StructureColumn('Quantity') FROM Products) FROM MA.CASES   
WHERE StructureColumn('Occupation') = 'Architect'  

Všimněte si, že v tomto příkladu se ve sloupci struktury použije filtr, který omezí případy na zákazníky, jejichž povolání je Architekt (WHERE StructureColumn('Occupation') = 'Architect'). Vzhledem k tomu, že podmínka filtru modelu se vždy použije u případů, kdy je model vytvořen, jsou v modelových případech zahrnuté pouze případy, které obsahují alespoň jeden opravňující řádek v tabulce Products. Proto se použije filtr ve vnořené tabulce Products i filtr ('Occupation')případu.

Ukázkový dotaz 3: Výběr sloupců z vnořené tabulky

Následující ukázkový dotaz vrátí názvy zákazníků, kteří se použili jako trénovací případy z modelu. Dotaz pro každého zákazníka také vrátí vnořenou tabulku, která obsahuje podrobnosti o nákupu. I když model obsahuje sloupec ProductName, model nepoužívá hodnotu sloupce ProductName. Model pouze kontroluje, jestli byl produkt zakoupen za běžnou cenu (NOT``OnSale). Tento dotaz nejen vrací název produktu, ale také vrátí zakoupené množství, které není součástí modelu.

SELECT CustomerName,    
(SELECT ProductName, StructureColumn('Quantity')FROM Products)   
FROM MyModel.CASES  

Všimněte si, že nelze vrátit sloupec ProductName nebo sloupec Quantity, pokud není u modelu dolování povolená podrobná analýza.

Ukázkový dotaz 4: Filtrování a vrácení vnořených sloupců tabulky

Následující ukázkový dotaz vrátí sloupce s případem a vnořenými tabulkami, které jsou součástí dolování struktury, ale ne v modelu. Model je již filtrován podle přítomnosti OnSale produktů, ale tento dotaz přidá filtr na sloupec dolování struktury, Quantity:

SELECT CustomerName, Age, StructureColumn('Occupation'),   
(SELECT ProductName, StructureColumn('Quantity') FROM Products)   
FROM MyModel.CASES   
WHERE EXISTS (SELECT * FROM Products WHERE StructureColumn('Quantity')>1)  

Viz také

Referenční rozšíření dolování dat (DMX)
funkcí (DMX)
obecných prediktivních funkcí (DMX)