Manipulowanie danymi MDX — SELECT

Pobiera dane z określonego sześcianu.

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

Wyrażenie_docelowe
Poprawne wyrażenie z wyrażeń wielowymiarowych (MDX), które zwraca zbiór.

Liczba całkowita
Liczba całkowita z zakresu od 0 do 127.

Cube_Name
Poprawny ciąg znaków nadających nazwę kostce.

Tuple_Expression
Poprawne wyrażenie z zakresu wyrażeń wielowymiarowych (MDX), które zwraca krotkę.

CellProperty_Name
Poprawny ciąg reprezentujący właściwość komórki.

DimensionProperty_Name
Poprawny ciąg reprezentujący właściwość wymiarową.

LevelProperty_Name
Poprawny ciąg reprezentujący właściwość poziomu.

MemberProperty_Name
Poprawny ciąg reprezentujący własność członkowską.

Remarks

Wyrażenie <SELECT slicer axis clause> musi zawierać członków w wymiarach i hierarchiach innych niż te wymienione w określonych <SELECT query axis clause> wyrażeniach.

Jeśli atrybut w kostce zostanie pominięty w określonych <SELECT query axis clause> wyrażeniach i <SELECT slicer axis clause> wartości, domyślny członek atrybutu jest domyślnie dodawany do osi sekatora.

Opcja NIE-VISUAL w instrukcji subselect pozwala filtrować członków, zachowując prawdziwe sumy zamiast filtrowanych. Pozwala to na uzyskanie liczby dziesięciu największych sprzedaży (osób/produktów/regionów) i uzyskania rzeczywistej sumy sprzedaży dla wszystkich zapytanych członków, zamiast całkowitej wartości sprzedaży dla dziesięciu najczęściej zwróconych. Zobacz poniższe przykłady, aby uzyskać więcej informacji.

Obliczone elementy mogą być uwzględnione w <klauzuli> osi zapytania SELECT za każdym razem, gdy połączenie było otwierane za pomocą podzapytań parametrów parametry połączenia subqueries=1; zobacz Supported XMLA Properties (XMLA) oraz ConnectionString dotyczące wykorzystania parametrów. Przykład podano na obliczanych członkach w podselekcjach.

Autoexists

Gdy w instrukcji SELECT użyte są dwa lub więcej atrybutów tego wymiaru, Usługi Analizy oceniają wyrażenia atrybutów, aby upewnić się, że członkowie tych atrybutów są właściwie ograniczeni do kryteriów wszystkich pozostałych atrybutów. Załóżmy na przykład, że pracujesz z atrybutami z wymiaru Geography. Jeśli masz jedno wyrażenie, które zwraca wszystkich członków z atrybutu City, oraz inne, które ogranicza członków atrybutu Country do wszystkich krajów/regionów Europy, to spowoduje, że członkowie City będą ograniczeni tylko do tych miast należących do krajów/regionów Europy. Ta cecha usług analitycznych nazywana jest autoistami i dotyczy tylko atrybutów w tym samym wymiarze. Funkcja Autoexists ma zastosowanie tylko do atrybutów z tego samego wymiaru, ponieważ próbuje zapobiec włączaniu rekordów z jednego wyrażenia atrybutu do innych wyrażeń atrybutów, jeśli zostały wykluczone w tym pierwszym. Autoegzystencje można również rozumieć jako powstałe przecięcie różnych wyrażeń atrybutów nad rekordami wymiarowymi. Zobacz poniższe przykłady:

//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]  

Uzyskany zestaw wyników to:

Nazwa modelu + Miary Wartość sprzedaży odsprzedawcy Kwota rabatu Rabat PCT
Mountain-200 14 356 699,36 USD 19 012,71 USD 0.13%
Road-250 $9,377,457,68 4032,47 USD 0.04%
Mountain-100 8568 958,27 USD 139 393,27 USD 1.63%
Road-650 $7,442,141.81 39 698,30 USD 0.53%
Touring-1000 6723 794,29 USD 166 144,17 USD 2.47%
Road-550-W $3,668,383.88 1901,97 USD 0.05%
Road-350-W $3,665,932.31 20 946,50 USD 0,57%
Ramka górska HL 3365 069,27 USD 174,11 USD 0.01%
Road-150 2363 805,16 USD 0,00 USD 0.00%
Touring-3000 $2,046,508.26 79 582,15 USD 3.89%

Uzyskany zestaw produktów wydaje się być taki sam jak Preferred10Products; dlatego, sprawdzając zestaw 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]  

Zgodnie z poniższymi wynikami oba zestawy (Top10SellingProducts, Preferred10Products) są takie same

Nazwa modelu + Miary Wartość sprzedaży odsprzedawcy Kwota rabatu Rabat PCT
Mountain-200 14 356 699,36 USD 19 012,71 USD 0.13%
Road-250 $9,377,457,68 4032,47 USD 0.04%
Mountain-100 8568 958,27 USD 139 393,27 USD 1.63%
Road-650 $7,442,141.81 39 698,30 USD 0.53%
Touring-1000 6723 794,29 USD 166 144,17 USD 2.47%
Road-550-W $3,668,383.88 1901,97 USD 0.05%
Road-350-W $3,665,932.31 20 946,50 USD 0,57%
Ramka górska HL 3365 069,27 USD 174,11 USD 0.01%
Road-150 2363 805,16 USD 0,00 USD 0.00%
Touring-3000 $2,046,508.26 79 582,15 USD 3.89%

W poprzednich przykładach stworzyliśmy dwa zbiory: jeden jako wyrażenie obliczone, a drugi jako wyrażenie stałe. Te przykłady ilustrują różne odmiany Autoexists.

Autoegzystencje mogą być stosowane głęboko lub płytko do wyrażeń. Domyślne ustawienie to głębokie. Na poniższym przykładzie zostanie zilustrowana koncepcja głębokich Autoexists. W tym przykładzie filtrujemy Top10SellingProducts według atrybutu [Product].[Product Line] dla tych w grupie [Mountain]. Należy pamiętać, że oba atrybuty (fragmentator i oś) należą do tego samego wymiaru [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]  

Tworzy następujący zestaw wyników:

Nazwa modelu + Miary Wartość sprzedaży odsprzedawcy Kwota rabatu Rabat PCT
Mountain-200 14 356 699,36 USD 19 012,71 USD 0.13%
Mountain-100 8568 958,27 USD 139 393,27 USD 1.63%
Ramka górska HL 3365 069,27 USD 174,11 USD 0.01%
Mountain-300 1907 249,38 USD 876,95 USD 0.05%
Mountain-500 $1,067,327,31 17 266,09 USD 1.62%
Mountain-400-W $592,450.05 303,49 USD 0.05%
Ramka górska LL $521,864.42 252,41 USD 0.05%
ML Mountain Frame-W 482 953,16 USD 206,95 USD 0.04%
Ramka górska ML 343 785,29 USD 161,82 USD 0.05%
Szorty górskie kobiet $260,304.09 6675,56 USD 2.56%

W poprzednim zestawie wyników mamy siedmiu nowych osób na liście Top10SellingProducts, a Mountain-200, Mountain-100 i HL Mountain Frame znalazły się na szczycie listy. W poprzednim zestawie wyników te trzy wartości były przeplatane

Jest to nazywane Deep Autoexists, ponieważ zestaw Top10SellingProducts jest oceniany w celu spełnienia warunków selekcji zapytania. Głębokie autoeksistencje oznaczają, że wszystkie wyrażenia będą obliczane w celu osiągnięcia najgłębszej możliwej przestrzeni po zastosowaniu zmiennych fragmentatora, wyrażeń podzapytania na osi itp.

Jednak można chcieć przeprowadzić analizę na dziesięciu najlepiej sprzedających się produktach, które są odpowiednikiem dziesięciu preferowanych produktów, jak w poniższym przykładzie:

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]  

Tworzy następujący zestaw wyników:

Nazwa modelu + Miary Wartość sprzedaży odsprzedawcy Kwota rabatu Rabat PCT
Mountain-200 14 356 699,36 USD 19 012,71 USD 0.13%
Mountain-100 8568 958,27 USD 139 393,27 USD 1.63%
Ramka górska HL 3365 069,27 USD 174,11 USD 0.01%

W powyższych wynikach fragmentowanie daje wynik, który zawiera tylko te produkty z Preferred10Products, które są częścią grupy [Mountain] w [Product]. [Product Line]; zgodnie z oczekiwaniami, ponieważ Preferred10Products jest wyrażeniem stałym.

Ten zbiór wyników rozumie się również jako płytkie autoegzystencje. Jest to spowodowane tym, że wyrażenie jest oceniane przed klauzulą fragmentowania. W poprzednim przykładzie wyrażenie było wyrażeniem stałym dla celów ilustracyjnych w celu wprowadzenia koncepcji.

Zachowanie Autoexists można modyfikować na poziomie sesji przy użyciu właściwości parametrów połączenia Autoexists. Poniższy przykład rozpoczyna się od otwarcia nowej sesji i dodania właściwości Autoexists=3 do parametrów połączenia. Aby to zrobić, musisz otworzyć nowe połączenie. Po nawiązaniu połączenia z włączonym ustawieniem Autoexist, będzie ono obowiązywać do momentu zakończenia tego połączenia.

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]  

Poniższy zestaw wyników pokazuje teraz powierzchowne zachowanie Autoexists.

Nazwa modelu + Miary Wartość sprzedaży odsprzedawcy Kwota rabatu Rabat PCT
Mountain-200 14 356 699,36 USD 19 012,71 USD 0.13%
Mountain-100 8568 958,27 USD 139 393,27 USD 1.63%
Ramka górska HL 3365 069,27 USD 174,11 USD 0.01%

Zachowanie funkcji Autoexists można modyfikować przy użyciu parametru AUTOEXISTS=[1|2|3] w parametrach połączenia; Zobacz Obsługiwane właściwości XMLA (XMLA) i ConnectionString informacje o użyciu parametru.

Examples

Poniższy przykład zwraca sumę Measures.[Order Quantity] członków, zagregowaną z pierwszych ośmiu miesięcy roku kalendarzowego 2003, które znajdują się w wymiarze Date , z sześcianu 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]  

Aby zrozumieć NIEWIZUALNOŚĆ, poniższy przykład to zapytanie [Adventure Works], aby uzyskać dane [Kwota sprzedaży Resellera] w tabeli, gdzie kategorie produktów to kolumny, a typy biznesu resellerów to wiersze. Należy zauważyć, że łączne wartości są podawane zarówno dla produktów, jak i dla resellerów.

Następujące oświadczenie SELECT:

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

Tworzy następujące wyniki:

Typ działalności + Kategoria Wszystkie produkty Akcesoria Rowery Odzież Składniki
Wszyscy odsprzedawcy 80 450 596,98 USD 571 297,93 USD 66 302 381,56 USD $1,777,840.84 11 799 076,66 USD
Sklep z rowerami specjalnymi 6756 166,18 USD 65 125,48 USD $6,080,117,73 252 933,91 USD 357 989,07 USD
Odsprzedawca z wartością dodaną 34 967 517,33 USD 175 002,81 USD $30,892,354,33 592 385,71 USD 3307 774,48 USD
Warehouse 38 726 913,48 USD 331 169,64 USD 29 329 909,50 USD 932 521,23 USD $8,133,313.11

Aby stworzyć tabelę zawierającą dane wyłącznie dla produktów Akcesoria i Odzież, resellerzy Value Added i Warehouse, przy jednoczesnym zachowaniu łącznych sum, można by zapisać następująco, używając NIEWIDOCZNYCH PRODUKTÓW:

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]  

Tworzy następujące wyniki:

Typ działalności + Kategoria Wszystkie produkty Akcesoria Odzież
Wszyscy odsprzedawcy 80 450 596,98 USD 571 297,93 USD $1,777,840.84
Odsprzedawca z wartością dodaną 34 967 517,33 USD 175 002,81 USD 592 385,71 USD
Warehouse 38 726 913,48 USD 331 169,64 USD 932 521,23 USD

Aby utworzyć tabelę, która wykonuje wizualne sumowanie kolumn, ale dla sum wierszy przedstawia rzeczywistą sumę wszystkich [Category], należy użyć następującego zapytania.

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]  

Zwróć uwagę, że BRAK ELEMENTÓW WIZUALNYCH jest stosowany tylko w [Kategorii].

Powyższe zapytanie generuje następujące wyniki:

Typ działalności + Kategoria Wszystkie produkty Akcesoria Odzież
Wszyscy resellerzy 73 694 430,80 USD 506 172,45 USD 1524 906,93 USD
Odsprzedawca z wartością dodaną 34 967 517,33 USD 175 002,81 USD 592 385,71 USD
Magazyn 38 726 913,48 USD 331 169,64 USD 932 521,23 USD

W porównaniu z poprzednimi wynikami można zauważyć, że wiersz [Wszyscy odsprzedawcy] dodaje teraz wyświetlane wartości dla [Value Added Reseller] i [Warehouse], ale w kolumnie [Wszystkie produkty] jest wyświetlana łączna wartość wszystkich produktów, w tym tych, które nie są wyświetlane.

Poniższy przykład pokazuje, jak wykorzystać wyliczone elementy w podselekcjach do ich filtrowania. Aby móc odtworzyć tę próbkę, połączenie musi zostać nawiązane za pomocą podzapytań parametrów parametry połączenia=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]  
)  

Powyższe zapytanie generuje następujące wyniki:

Wartość sprzedaży odsprzedawcy Całkowity koszt produktu resellera Zysk brutto resellera Marża zysku brutto resellera
80 450 596,98 USD $79,980,114.38 470 482,60 dolarów 0,58%