Manipulace s daty MDX – SELECT

Získává data z určené krychle.

Syntax

  
[ WITH <SELECT WITH clause>   
   [ , <SELECT WITH clause>...n ]   
]   
SELECT   
     [ *   
    | ( <SELECT query axis clause>   
                  [ , <SELECT query axis clause>,...n ]   
            )   
            ]  
FROM   
   <SELECT subcube clause>   
      [ <SELECT slicer axis clause> ]  
      [ <SELECT cell property list clause> ]  
  
<SELECT WITH clause> ::=  
     ( CELL CALCULATION <CREATE CELL CALCULATION body clause> )   
   | ( [ CALCULATED ] MEMBER <CREATE MEMBER body clause>)   
   | ( SET <CREATE SET body clause>)  
   | ( MEASURE = <measure body clause> )  
  
<SELECT query axis clause> ::=  
   [ NON EMPTY ] Set_Expression  
   [ <SELECT dimension property list clause> ]   
      ON   
            Integer_Expression   
       | AXIS(Integer)   
       | COLUMNS   
       | ROWS   
       | PAGES   
       | SECTIONS   
       | CHAPTERS   
  
<SELECT subcube clause> ::=  
      Cube_Name   
   | [NON VISUAL] (SELECT   
                  [ *   
       | ( <SELECT query axis clause> [ ,   
           <SELECT query axis clause>,...n ] )   
         ]   
            FROM   
         <SELECT subcube clause>   
         <SELECT slicer axis clause> )  
  
<SELECT slicer axis clause> ::=   
      WHERE Tuple_Expression  
  
<SELECT cell property list clause> ::=   
   [ CELL ] PROPERTIES CellProperty_Name   
      [ , CellProperty_Name,...n ]  
  
<SELECT dimension property list clause> ::=  
   [DIMENSION] PROPERTIES   
      (DimensionProperty_Name   
         [,DimensionProperty_Name,...n ] )   
    | (LevelProperty_Name   
         [, LevelProperty_Name,...n ] )   
    | (MemberProperty_Name   
         [, MemberProperty_Name,...n ] )  

Arguments

Nastavit_výraz
Platný výraz Multidimensional Expressions (MDX), který vrací množinu.

Celé číslo
Celé číslo od 0 do 127.

Cube_Name
Platný řetězec, který poskytuje jméno krychle.

Tuple_Expression
Platný výraz Multidimensional Expressions (MDX), který vrací n-tici.

CellProperty_Name
Platný řetězec, který reprezentuje vlastnost buňky.

DimensionProperty_Name
Platný řetězec, který reprezentuje vlastnost dimenze.

LevelProperty_Name
Platný řetězec, který reprezentuje vlastnost úrovně.

MemberProperty_Name
Platný řetězec, který reprezentuje vlastnost člena.

Remarks

Výraz <SELECT slicer axis clause> musí obsahovat členy v dimenzích a hierarchiích odlišných od těch, na které se odkazuje ve specifikovaných <SELECT query axis clause> výrazech.

Pokud je atribut v krychle vynechán ze specifikovaných <SELECT query axis clause> výrazů a hodnoty <SELECT slicer axis clause> , výchozí člen atributu je implicitně přidán k ose sliceru.

Možnost NON VISUAL v příkazu subselect umožňuje filtrovat členy a zároveň zachovat skutečné součty místo filtrovaných. To vám umožní vyhledat deset největších prodejů (osoby/produkty/regiony) a získat skutečný součet prodejů všech dotazovaných členů, místo celkové hodnoty prodejů pro deset nejlepších vrácených členů. Více informací najdete v příkladech níže.

Vypočítané členy lze zahrnout do <klauzule> osi dotazu SELECT vždy, když bylo spojení otevřeno pomocí poddotazů parametrů připojovací řetězec=1; viz Podporované vlastnosti XMLA (XMLA) a ConnectionString pro použití parametrů. Příklad je uveden na vypočítaných členech v podvýběrech.

Automatická existence

Když jsou v příkazu SELECT použity dva nebo více atributů této dimenze, Analytické služby vyhodnocují výrazy atributů, aby zajistily, že členové těchto atributů jsou správně omezeni tak, aby splňovali kritéria všech ostatních atributů. Předpokládejme například, že pracujete s atributy z dimenze Zeměpis. Pokud máte jeden výraz, který vrací všechny členy podle atributu City, a jiný výraz, který omezuje členy z atributu Country na všechny země/regiony v Evropě, pak budou členové City omezeni pouze na ta města, která patří do zemí/regionů Evropy. Tato vlastnost Analysis Services se nazývá Autoexists a vztahuje se pouze na atributy ve stejné dimenzi. Autoexists platí pouze pro atributy ze stejné dimenze, protože se snaží zabránit záznamům dimenzí vyloučeným v jednom výrazu atributu, aby byly zahrnuty jinými výrazy atributů. Autoexisty lze také chápat jako výsledný průnik různých výrazů atributů nad záznamy dimenzí. Viz následující příklady níže:

//Obtain the Top 10 best reseller selling products by Name  
with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'  
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'  
set Preferred10Products as '  
{[Product].[Model Name].&[Mountain-200],  
[Product].[Model Name].&[Road-250],  
[Product].[Model Name].&[Mountain-100],  
[Product].[Model Name].&[Road-650],  
[Product].[Model Name].&[Touring-1000],  
[Product].[Model Name].&[Road-550-W],  
[Product].[Model Name].&[Road-350-W],  
[Product].[Model Name].&[HL Mountain Frame],  
[Product].[Model Name].&[Road-150],  
[Product].[Model Name].&[Touring-3000]  
}'  
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,  
Top10SellingProducts on 1  
from [Adventure Works]  

Získaná sada výsledků je:

Název modelu + Míry Částka z prodeje přeprodejcem Částka slevy PCT Sleva
Mountain-200 14 356 699,36 Kč 19 012,71 Kč 0.13%
Cesta-250 9 377 457,68 Kč 4 032,47 Kč 0,04%
Hora-100 8 568 958,27 Kč 139 393,27 Kč 1,63%
Cesta-650 7 442 141,81 Kč 39 698,30 Kč 0,53%
Touring-1000 6 723 794,29 Kč 166 144,17 Kč 2.47%
Road-550-W 3 668 383,88 Kč 1 901,97 Kč 0,05%
Road-350-W 3 665 932,31 Kč 20 946,50 Kč 0,57%
HL Mountain Frame 3 365 069,27 Kč 174,11 Kč 0.01%
Cesta-150 2 363 805,16 Kč $0,00 0,00%
Touring-3000 2 046 508,26 Kč 79 582,15 Kč 3,89%

Získaná sada výrobků se zdá být stejná jako Preferred10Products; proto ověřte sadu Preferred10Products:

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'  
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'  
set Preferred10Products as '  
{[Product].[Model Name].&[Mountain-200],  
[Product].[Model Name].&[Road-250],  
[Product].[Model Name].&[Mountain-100],  
[Product].[Model Name].&[Road-650],  
[Product].[Model Name].&[Touring-1000],  
[Product].[Model Name].&[Road-550-W],  
[Product].[Model Name].&[Road-350-W],  
[Product].[Model Name].&[HL Mountain Frame],  
[Product].[Model Name].&[Road-150],  
[Product].[Model Name].&[Touring-3000]  
}'  
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,  
Preferred10Products on 1  
from [Adventure Works]  

Podle následujících výsledků jsou obě sady (Top10SellingProducts, Preferred10Products) stejné.

Název modelu + Míry Částka z prodeje přeprodejcem Částka slevy PCT Sleva
Mountain-200 14 356 699,36 Kč 19 012,71 Kč 0.13%
Cesta-250 9 377 457,68 Kč 4 032,47 Kč 0,04%
Hora-100 8 568 958,27 Kč 139 393,27 Kč 1,63%
Cesta-650 7 442 141,81 Kč 39 698,30 Kč 0,53%
Touring-1000 6 723 794,29 Kč 166 144,17 Kč 2.47%
Road-550-W 3 668 383,88 Kč 1 901,97 Kč 0,05%
Road-350-W 3 665 932,31 Kč 20 946,50 Kč 0,57%
HL Mountain Frame 3 365 069,27 Kč 174,11 Kč 0.01%
Cesta-150 2 363 805,16 Kč $0,00 0,00%
Touring-3000 2 046 508,26 Kč 79 582,15 Kč 3,89%

V předchozích příkladech jsme vytvořili dvě množiny: jednu jako vypočítaný výraz a druhou jako konstantní výraz. Tyto příklady ilustrují různé varianty Autoexists.

Autoexisty lze na výrazy aplikovat hluboko nebo mělce. Výchozí nastavení je hluboké. Následující příklad ilustruje koncept hlubokých Autoexists. V příkladu filtrujeme "Top10SellingProducts" podle atributu [Product].[Produktová řada] pro produkty ve skupině [Mountain]. Všimněte si, že oba atributy (průřez a osa) patří do stejné dimenze [Product].

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'  
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'  
// Preferred10Products set removed for clarity  
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,  
Top10SellingProducts on 1  
from [Adventure Works]  
where [Product].[Product Line].[Mountain]  

Vytvoří následující sadu výsledků:

Název modelu + Míry Částka z prodeje přeprodejcem Částka slevy PCT Sleva
Mountain-200 14 356 699,36 Kč 19 012,71 Kč 0.13%
Hora-100 8 568 958,27 Kč 139 393,27 Kč 1,63%
HL Mountain Frame 3 365 069,27 Kč 174,11 Kč 0.01%
Mountain-300 1 907 249,38 Kč 876,95 Kč 0,05%
Mountain-500 1 067 327,31 Kč 17 266,09 Kč 1,62%
Mountain-400-W 592 450,05 Kč 303,49 Usd 0,05%
LL Mountain Frame 521 864,42 Kč 252,41 Kč 0,05%
ML Mountain Frame-W 482 953,16 Kč 206,95 Kč 0,04%
ML Mountain Frame 343 785,29 Kč 161,82 Kč 0,05%
Dámské horské šortky 260 304,09 Kč 6 675,56 Kč 2,56%

V předchozí sadě výsledků máme sedm nováčků na seznamu Top10SellingProducts a Mountain-200, Mountain-100 a HL Mountain Frame se posunuly na vrchol seznamu. V předchozí sadě výsledků byly tyto tři hodnoty prokládány

Tomu se říká Deep Autoexists, protože sada Top10SellingProducts se vyhodnocuje tak, aby splňovala podmínky segmentace dotazu. Deep Autoexists znamená, že všechny výrazy budou vyhodnoceny tak, aby splňovaly co nejhlubší možný prostor po aplikaci slicer výrazů, dílčích výběrů na ose a podobně.

Můžete však chtít provést analýzu nad Top10SellingProducts jako ekvivalent k Preferred10Products, jak je znázorněno v následujícím příkladu:

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'  
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'  
set Preferred10Products as '  
{[Product].[Model Name].&[Mountain-200],  
[Product].[Model Name].&[Road-250],  
[Product].[Model Name].&[Mountain-100],  
[Product].[Model Name].&[Road-650],  
[Product].[Model Name].&[Touring-1000],  
[Product].[Model Name].&[Road-550-W],  
[Product].[Model Name].&[Road-350-W],  
[Product].[Model Name].&[HL Mountain Frame],  
[Product].[Model Name].&[Road-150],  
[Product].[Model Name].&[Touring-3000]  
}'  
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,  
Preferred10Products on 1  
from [Adventure Works]  
where [Product].[Product Line].[Mountain]  

Vytvoří následující sadu výsledků:

Název modelu + Míry Částka z prodeje přeprodejcem Částka slevy PCT Sleva
Mountain-200 14 356 699,36 Kč 19 012,71 Kč 0.13%
Hora-100 8 568 958,27 Kč 139 393,27 Kč 1,63%
HL Mountain Frame 3 365 069,27 Kč 174,11 Kč 0.01%

Ve výše uvedených výsledcích poskytuje řezání výsledek, který obsahuje pouze ty produkty z Preferred10Products, které jsou součástí skupiny [Mountain] v [Product].[Produktová řada]; jak se očekává, protože Preferred10Products je konstantní výraz.

Tato množina výsledků je také chápána jako mělké Autoexistuje. Důvodem je to, že se výraz vyhodnotí před klauzulí řezu. V předchozím příkladu byl výraz konstantním výrazem pro ilustrační účely, aby byl koncept představen.

Chování funkce Autoexists lze upravit na úrovni relace pomocí vlastnosti připojovacího řetězce. Následující příklad začíná otevřením nové relace a přidáním vlastnosti Autoexists=3 do připojovacího řetězce. Abyste mohli tento příklad provést, musíte otevřít nové připojení. Jakmile se připojení vytvoří pomocí nastavení Autoexist, bude platit, dokud se připojení nedokončí.

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'  
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'  
//Preferred10Products set removed for clarity  
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,  
Top10SellingProducts on 1  
from [Adventure Works]  
where [Product].[Product Line].[Mountain]  

Následující sada výsledků nyní ukazuje zjednodušené chování funkce Autoexists.

Název modelu + Míry Částka z prodeje přeprodejcem Částka slevy PCT Sleva
Mountain-200 14 356 699,36 Kč 19 012,71 Kč 0.13%
Hora-100 8 568 958,27 Kč 139 393,27 Kč 1,63%
HL Mountain Frame 3 365 069,27 Kč 174,11 Kč 0.01%

Chování autoexistů lze upravit pomocí parametru AUTOEXISTS=[1|2|3] v připojovacím řetězci; Viz Podporované vlastnosti XMLA (XMLA) a ConnectionString informace o použití parametrů.

Examples

Následující příklad vrací součet Measures.[Order Quantity] členů, agregovaný za prvních osm měsíců kalendářního roku 2003, které jsou obsaženy v Date dimenzi, z krychle Adventure Works .

WITH MEMBER [Date].[Calendar].[First8Months2003] AS  
    Aggregate(  
        PeriodsToDate(  
            [Date].[Calendar].[Calendar Year],   
            [Date].[Calendar].[Month].[August 2003]  
        )  
    )  
SELECT   
    [Date].[Calendar].[First8Months2003] ON COLUMNS,  
    [Product].[Category].Children ON ROWS  
FROM  
    [Adventure Works]  
WHERE  
    [Measures].[Order Quantity]  

Pro pochopení NEVIZUÁLNÍHO OBSAHU je následující příklad dotaz na [Adventure Works] pro získání údajů [Částka prodeje prodejců] v tabulce, kde kategorie produktů jsou sloupce a typy podnikání resellerů jsou řádky. Všimněte si, že součty jsou uvedeny jak pro produkty, tak pro prodejce.

Následující příkaz SELECT:

select [Category].members on 0,  
[Business Type].members on 1  
from [Adventure Works]  
where [Measures].[Reseller Sales Amount]  

Vytvoří následující výsledky:

Typ podnikání + Kategorie Všechny produkty Příslušenství Bikes Clothing Komponenty
Všichni prodejci 80 450 596,98 Kč 571 297,93 Kč 66 302 381,56 Kč 1 777 840,840 Kč 11 799 076,66 Kč
Speciální obchod s koly 6 756 166,18 Kč 65 125,48 Kč 6 080 117,73 Kč 252 933,91 Kč 357 989,07 Kč
Prodejce s přidanou hodnotou 34 967 517,33 Kč 175 002,81 Kč 30 892 354,33 Kč 592 385,71 Kč 3 307 774,48 Kč
Warehouse 38 726 913,48 Kč 331 169,64 Kč 29 329 909,50 Kč 932 521,23 Kč 8 133 313,11 Kč

Pro vytvoření tabulky obsahující data pouze pro produkty Accessories and Clothing, přeprodejce s přidanou hodnotou a sklady, přičemž celkové součty lze zapsat následovně pomocí NON VISUAL:

select [Category].members on 0,  
[Business Type].members on 1  
from NON VISUAL (Select {[Category].Accessories, [Category].Clothing} on 0,  
{[Business Type].[Value Added Reseller], [Business Type].[Warehouse]} on 1  
from [Adventure Works])  
where [Measures].[Reseller Sales Amount]  

Vytvoří následující výsledky:

Typ podnikání + Kategorie Všechny produkty Příslušenství Clothing
Všichni prodejci 80 450 596,98 Kč 571 297,93 Kč 1 777 840,840 Kč
Prodejce s přidanou hodnotou 34 967 517,33 Kč 175 002,81 Kč 592 385,71 Kč
Warehouse 38 726 913,48 Kč 331 169,64 Kč 932 521,23 Kč

Pokud chcete vytvořit tabulku, která vizuálním způsobem sčítá sloupce, ale u součtů řádků zobrazuje skutečný součet všech [Category], měl by být vydán následující dotaz:

select [Category].members on 0,  
[Business Type].members on 1  
from NON VISUAL (Select {[Category].Accessories, [Category].Clothing} on 0  
from ( Select {[Business Type].[Value Added Reseller], [Business Type].[Warehouse]} on 0  
from [Adventure Works])  
)  
where [Measures].[Reseller Sales Amount]  

Všimněte si, že se na [Kategorie] používá pouze non visual.

Výše uvedený dotaz vytvoří následující výsledky:

Typ podnikání + Kategorie Všechny produkty Příslušenství Clothing
Všichni prodejci 73 694 430,80 Kč 506 172,45 Kč 1 524 906,93 Kč
Prodejce s přidanou hodnotou 34 967 517,33 Kč 175 002,81 Kč 592 385,71 Kč
Sklad 38 726 913,48 Kč 331 169,64 Kč 932 521,23 Kč

Ve srovnání s předchozími výsledky můžete vidět, že řádek [Všichni prodejci] se teď přičte k zobrazeným hodnotám pro [Value Added Reseller] a [Warehouse], ale že sloupec [Všechny produkty] zobrazuje celkovou hodnotu všech produktů, včetně těch, které se nezobrazují.

Následující příklad ukazuje, jak použít vypočítané členy v podvýběrech k jejich filtrování. Aby bylo možné tento vzorek reprodukovat, musí být spojení navázáno pomocí poddotazů parametrů připojovací řetězec subqueries=1.

select Measures.allmembers on 0  
from (  
Select { [Measures].[Reseller Sales Amount]  
, [Measures].[Reseller Total Product Cost]  
, [Measures].[Reseller Gross Profit]  
, [Measures].[Reseller Gross Profit Margin]  
} on 0  
from [Adventure Works]  
)  

Výše uvedený dotaz vytvoří následující výsledky:

Částka z prodeje přeprodejcem Celkové náklady na produkt u přeprodejce Hrubý zisk prodejce Hrubá zisková marže přeprodejce
80 450 596,98 Kč $79,980,114,38 470 482,60 $ 0,58%