Zaznacz instrukcję (MDX)
Pobiera dane z określonego moduł.
Składnia
[ 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>)
<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 ] )
Argumenty
Set_Expression
Prawidłowe wyrażenie Multidimensional Expressions (MDX), które zwraca zestaw.Integer
Liczba całkowita od 0 do 127.Cube_Name
Prawidłowy ciąg zawiera nazwę moduł.Tuple_Expression
Prawidłowe wyrażenie Multidimensional Expressions (MDX), które zwraca spójna kolekcja.CellProperty_Name
Nieprawidłowy ciąg, który reprezentuje komórka właściwość.DimensionProperty_Name
Prawidłowy ciąg, który reprezentuje właściwość wymiar.LevelProperty_Name
Prawidłowy ciąg, który reprezentuje właściwość poziom.MemberProperty_Name
Nieprawidłowy ciąg, który reprezentuje właściwość element członkowski.
Uwagi
<SELECT slicer axis clause> Wyrażenie musi zawierać członków z wymiarów i hierarchii innych niż wskazane w określonym <SELECT query axis clause> wyrażeń.
Jeśli atrybut w moduł jest pominięty z określonego <SELECT query axis clause> wyrażeń i <SELECT slicer axis clause> wartość atrybut domyślny element członkowski jest dodane niejawnie na oś fragmentatora.
Opcja bez VISUAL w instrukcja subselect umożliwia odfiltrować członków, podczas gdy łączne true zamiast filtrowanego sum.Umożliwia kwerendy górny dziesięciu sprzedaży (osób/produkty/regiony) i uzyskać prawdziwe całkowitą wielkość sprzedaży dla wszystkich członków poszukiwanej, zamiast całkowitej wartości sprzedaży dla najważniejszych zwracane.Zobacz przykłady poniżej, aby uzyskać więcej informacji.
Składniki obliczeniowe mogą być zawarte w <Wybierz kwerendę oś klauzula> ilekroć połączenie został otwarty za pomocą połączenia ciąg parametr subqueries=1; zobacz Właściwości obsługiwane XMLA (XMLA) i ConnectionString dla parametru zużycie.Przykładem jest dostarczany na składniki obliczeniowe w subselects.
Autoexists
Kiedy dwa lub więcej atrybutów wymiar są używane w instrukcja SELECT, Analysis Services ocenia atrybutów wyrażenia, aby upewnić się, że członkowie tych atrybutów właściwie są ograniczone do spełnienia kryteriów innych atrybutów.Załóżmy, że pracujesz z atrybutów z wymiar Geografia.Jeśli jedno wyrażenie, które zwraca wszystkie elementy członkowskie z atrybut miasta i innego wyrażenia członków tego granicach z atrybut kraju do wszystkich krajów w Europie, następnie spowoduje członków Miasto są ograniczone do tych miast, które należą do krajów Europy.Ta cecha Analysis Services dotyczy tylko atrybuty w tym samym i nosi nazwę Autoexists wymiar.Autoexists dotyczy tylko atrybuty z tego samego wymiar, ponieważ będzie próbował zapobiec rekordów wymiar wykluczone w jedno wyrażenie atrybut zostaną uwzględnione przez inne wyrażenia atrybutu.Autoexists może być rozumiany jako przecięcie powstałe wyrażeń różne atrybuty nad rekordów wymiar.Zobacz poniższe przykłady poniżej:
//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]
Otrzymany zestaw wyników jest:
|
Kwota sprzedaży sprzedawcy |
Kwota rabatu |
Rabat PCT |
Rower górski 200 |
$14,356,699.36 |
$19,012.71 |
0.13% |
Road-250 |
$9,377,457.68 |
$4,032.47 |
0.04% |
Mountain-100 |
$8,568,958.27 |
$139,393.27 |
1.63% |
Road-650 |
$7,442,141.81 |
$39,698.30 |
0.53% |
Touring-1000 |
$6,723,794.29 |
$166,144.17 |
2.47% |
Drogi-550-W |
$3,668,383.88 |
$1,901.97 |
0.05% |
Drogi-350-W |
$3,665,932.31 |
$20,946.50 |
0.57% |
Rama górska HL |
$3,365,069.27 |
$174.11 |
0.01% |
Road-150 |
$2,363,805.16 |
$0.00 |
0.00% |
Touring-3000 |
$2,046,508.26 |
$79,582.15 |
3.89% |
Zestaw uzyskanych produktów wydaje się być taka sama, jak Preferred10Products; tak więc Weryfikowanie 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]
Według następujące wyniki obu zestawów (Top10SellingProducts, Preferred10Products) są takie same
|
Kwota sprzedaży sprzedawcy |
Kwota rabatu |
Rabat PCT |
Rower górski 200 |
$14,356,699.36 |
$19,012.71 |
0.13% |
Road-250 |
$9,377,457.68 |
$4,032.47 |
0.04% |
Mountain-100 |
$8,568,958.27 |
$139,393.27 |
1.63% |
Road-650 |
$7,442,141.81 |
$39,698.30 |
0.53% |
Touring-1000 |
$6,723,794.29 |
$166,144.17 |
2.47% |
Drogi-550-W |
$3,668,383.88 |
$1,901.97 |
0.05% |
Drogi-350-W |
$3,665,932.31 |
$20,946.50 |
0.57% |
Rama górska HL |
$3,365,069.27 |
$174.11 |
0.01% |
Road-150 |
$2,363,805.16 |
$0.00 |
0.00% |
Touring-3000 |
$2,046,508.26 |
$79,582.15 |
3.89% |
W poprzednich przykładach utworzyliśmy dwa zestawy: jedno wyrażenie obliczeniowe, a drugi jako wyrażenie stała.Poniższe przykłady ilustrują różne podtypy z Autoexists.
Autoexists mogą być stosowane płytkich lub głębokich wyrażenia.Ustawienie domyślne to głębokie.Poniższy przykład będzie ilustrują pojęcia głębokie Autoexists.W przykładzie mamy filtrowania Top10SellingProducts przez produktu [Product].Atrybut [linii produktów] dla tych grup [górskich].Należy zauważyć, że zarówno atrybuty (fragmentator i oś) należą do tego samego wymiar [produktu 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]
Generuje następujący zestaw wyników:
|
Kwota sprzedaży sprzedawcy |
Kwota rabatu |
Rabat PCT |
Rower górski 200 |
$14,356,699.36 |
$19,012.71 |
0.13% |
Mountain-100 |
$8,568,958.27 |
$139,393.27 |
1.63% |
Rama górska HL |
$3,365,069.27 |
$174.11 |
0.01% |
Mountain-300 |
$1,907,249.38 |
$876.95 |
0.05% |
Rower górski 500 |
$1,067,327.31 |
$17,266.09 |
1.62% |
Mountain-400-W |
$592,450.05 |
$303.49 |
0.05% |
Rama górska LL |
$521,864.42 |
$252.41 |
0.05% |
Górskie ML ramki w |
$482,953.16 |
$206.95 |
0.04% |
Rama górska ML |
$343,785.29 |
$161.82 |
0.05% |
Women's Mountain Shorts |
$260,304.09 |
$6,675.56 |
2.56% |
zestaw wyników poprzednich mamy siedem rolnikom do listy Top10SellingProducts i Mountain-200 Mountain-100 i rama górska HL przeniósł się na górze listy.zestaw wyników poprzednich przeplatane były te trzy wartości
Nazywa głęboko Autoexists, ponieważ zestaw Top10SellingProducts jest szacowany na spełniają warunki skalowania kwerendy.Głębokie Autoexists oznacza, że wszystkie wyrażenia będą oceniane spełniać podziałowej miejsca możliwe po zastosowaniu wyrażenia fragmentator sub wyrażeń select na oś i itd.
Jednak jeden ma być możliwe do wykonania analizy nad Top10SellingProducts jako równoważne z Preferred10Products, jak w następującym 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]
Generuje następujący zestaw wyników:
|
Kwota sprzedaży sprzedawcy |
Kwota rabatu |
Rabat PCT |
Rower górski 200 |
$14,356,699.36 |
$19,012.71 |
0.13% |
Mountain-100 |
$8,568,958.27 |
$139,393.27 |
1.63% |
Rama górska HL |
$3,365,069.27 |
$174.11 |
0.01% |
Wyniki powyższych krojenie daje wynik, zawierającej tylko produkty z Preferred10Products, które są częścią grupy [górskich] produktu [Product].[Linii produktów]; zgodnie z oczekiwaniami, ponieważ Preferred10Products jest wyrażenie stała.
Ten zestaw wyników jest również rozumieć jako Autoexists skrócona.Jest tak, ponieważ wyrażenie jest sprawdzane przed klauzula skalowania.W poprzednim przykładzie wyrażenie było wyrażenie stała dla celów ilustracyjnych do koncepcję.
Zachowanie Autoexists mogą być modyfikowane w sesja poziom używający Autoexists połączenia ciąg właściwość.Poniższy przykład rozpoczyna się od otwarcia nowej sesja i dodanie Autoexists=3 Właściwości połączenia ciąg.W tym celu w przykładzie należy otworzyć nowe połączenie.Po ustanowieniu połączenia z ustawieniem Autoexist pozostanie w mocy do 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]
Zestaw wyników następujących teraz pokazuje skrócona zachowanie Autoexists.
|
Kwota sprzedaży sprzedawcy |
Kwota rabatu |
Rabat PCT |
Rower górski 200 |
$14,356,699.36 |
$19,012.71 |
0.13% |
Mountain-100 |
$8,568,958.27 |
$139,393.27 |
1.63% |
Rama górska HL |
$3,365,069.27 |
$174.11 |
0.01% |
Autoexists zachowanie można modyfikować za pomocą AUTOEXISTS = parametr [1|2|3] w połączeniu z ciąg; zobacz Właściwości obsługiwane XMLA (XMLA) i ConnectionString dla parametru zużycie.
Przykłady
Poniższy przykład zwraca sumę Measures.[Order Quantity] element członkowski, zagregowane w ciągu pierwszych ośmiu miesięcy roku kalendarzowego 2003 znajdujących się w Date wymiar, z Adventure Works moduł.
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ć NON VISUAL, przykładzie jest kwerenda [Adventure Works] uzyskanie [odsprzedawcy Sales Amount] dane tabela, gdzie kategorie produktu są kolumny i typy biznesowych odsprzedawcy wierszy.Należy zauważyć, że sumy są podane dla produktów i sprzedawców.
Wybierz następujące instrukcja:
select [Category].members on 0,
[Business Type].members on 1
from [Adventure Works]
where [Measures].[Reseller Sales Amount]
Generuje następujące wyniki:
|
Wszystkie produkty |
Accessories |
Bikes |
Clothing |
Components |
Wszystkich sprzedawców. |
$80,450,596.98 |
$571,297.93 |
$66,302,381.56 |
$1,777,840.84 |
$11,799,076.66 |
Specjalizacja Bike Shop |
$6,756,166.18 |
$65,125.48 |
$6,080,117.73 |
$252,933.91 |
$357,989.07 |
Wartości dodanej sprzedawcy |
$34,967,517.33 |
$175,002.81 |
$30,892,354.33 |
$592,385.71 |
$3,307,774.48 |
Magazyn |
$38,726,913.48 |
$331,169.64 |
$29,329,909.50 |
$932,521.23 |
$8,133,313.11 |
Do utworzenia tabela zawierającej dane tylko dla theAccessories i odzieżowych, wartość dodana sprzedawcy i sprzedawcom magazynu, jeszcze prowadzenie ogólnej sumy może być zapisany w następujący sposób za pomocą innych niż wizualne:
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]
Generuje następujące wyniki:
|
Wszystkie produkty |
Accessories |
Clothing |
Wszystkich sprzedawców. |
$80,450,596.98 |
$571,297.93 |
$1,777,840.84 |
Wartości dodanej sprzedawcy |
$34,967,517.33 |
$175,002.81 |
$592,385.71 |
Magazyn |
$38,726,913.48 |
$331,169.64 |
$932,521.23 |
Do utworzenia tabela, wizualnie sumy kolumn, ale wiersz sum przełącza true łącznie wszystkie [Kategorie], powinny być wydawane następującej kwerendy:
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]
Należy zwrócić uwagę, jak VISUAL nie stosuje się tylko do [kategorii].
Kwerendy powyżej generuje następujące wyniki:
|
Wszystkie produkty |
Accessories |
Clothing |
Wszystkich sprzedawców. |
$73,694,430.80 |
$506,172.45 |
$1,524,906.93 |
Wartości dodanej sprzedawcy |
$34,967,517.33 |
$175,002.81 |
$592,385.71 |
Magazyn |
$38,726,913.48 |
$331,169.64 |
$932,521.23 |
W porównaniu z poprzednich wyniki, można zaobserwować, że wiersz [wszystkie odsprzedawców] teraz sumuje wartości wyświetlane dla [wartość dodana sprzedawcy] i [Magazyn], ale że kolumna [wszystkie produkty] pokazuje sumę wartości wszystkich produktów, włączając te nie są wyświetlane.
Poniższy przykład ilustruje sposób użycia składników obliczeniowych w subselects do filtrowania na nich.Aby można było odtworzyć tej próbki, musi ustanowić połączenia przy użyciu połączenia ciąg parametr 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]
)
Kwerendy powyżej generuje następujące wyniki:
Kwota sprzedaży sprzedawcy |
Całkowity koszt produktu sprzedawcy |
Zysk brutto sprzedawcy |
Marża zysku brutto sprzedawcy |
$80,450,596.98 |
$79,980,114.38 |
$470,482.60 |
0.58% |
Zobacz także