Autoexists
Pojęcie autoexistsogranicza miejsce moduł do tych komórek, które rzeczywiście istnieją w module w contraposition do tych, które mogą istnieć z tworzenia wszystkie możliwe kombinacje hierarchia atrybut członków z tej samej hierarchii.Wynika to składniki hierarchii jeden atrybut nie może istnieć ze składników innej hierarchia atrybutu w tej samej wymiar.Kiedy dwa lub więcej hierarchii atrybut tego samego wymiar są używane w instrukcja SELECT, Analysis Services ocenia atrybut 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.To jest cechą autoexists Analysis Services.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 w wierszach wymiar.
Istnienie komórki
Zawsze istnieją następujące komórki:
element członkowski (wszystkie) każdej hierarchii, gdy przekraczane z członkami innych hierarchii w tym samym wymiar.
Składniki obliczeniowe, gdy przekraczane z ich-obliczane elementy równorzędne, lub z rodziców lub podrzędnych ich-obliczane elementy równorzędne.
Dostarczanie nieistniejący komórek
Istniejące komórka jest dostarczane przez system w odpowiedzi na kwerendę lub obliczenie, które żąda komórki, która nie istnieje w moduł.Na przykład jeśli masz moduł, który ma hierarchia atrybutu miasta i kraju hierarchii atrybut należących do wymiar Geografia oraz miara Internet Sales Amount obszar ten moduł obejmuje tylko te elementy, które istnieją między sobą.Na przykład jeśli miasta hierarchia atrybut zawiera miast w Nowym Jorku, Londyn, Paryż, Tokio i Melbourne; a krajem hierarchia atrybutu zawiera krajów Stanów Zjednoczonych, Zjednoczonego Królestwa, Francji, Japonii i Australii. następnie miejsca moduł nie ma miejsca (komórka) na przecięciu Paryż i Stanów Zjednoczonych.
Podczas badania komórek, które nie istnieją, nieistniejącej komórki zwrócić null; oznacza to, że nie zawierają obliczenia i obliczanie, w którym zapisuje w tym miejscu nie można definiować.Na przykład następująca instrukcja zawiera komórki, które nie istnieją.
SELECT [Customer].[Gender].[Gender].Members ON COLUMNS,
{[Customer].[Customer].[Aaron A. Allen]
,[Customer].[Customer].[Abigail Clark]} ON ROWS
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
Ostrzeżenie
Ta kwerenda używa członków (zbiór) (MDX) funkcja zwraca zestaw elementów członkowskich hierarchii atrybut płci na kolumna oś i krzyżowania to zestaw z określony zestaw elementów członkowskich z hierarchii atrybut nabywcy na oś wierszy.
Gdy wykonać poprzedniej kwerendy, komórka na przecięciu Aaronowi A.Allen i samica Wyświetla wartość null.Podobnie komórka na przecięciu Wróblewska Abigail i samców Wyświetla wartość null.Komórki te nie istnieje i nie może zawierać wartości, ale komórek, które nie istnieją mogą być wyświetlane w wynikach kwerendy.
Podczas korzystania z crossjoin (mdx) funkcja zwraca iloczyn krzyżowy atrybut elementów członkowskich hierarchii z hierarchii atrybut w tej samej wymiar, auto istnieje limitów tych krotek są zwracane do zestaw krotek, która faktycznie istnieje, zamiast zwrócenie pełnej kartezjańskim.Na przykład uruchomić i przeanalizować wyniki wykonanie następującej kwerendy.
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
[Customer].[State-Province].Members
) ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
Ostrzeżenie
Należy zauważyć, że 0 jest używany do wyznaczenia kolumna oś, która jest skróconą formą oś(0) - który jest kolumna oś.
Poprzedniej kwerendy zwraca tylko komórek dla członków z każdej hierarchia atrybutu w kwerendzie, które istnieją między sobą.Poprzedniej kwerendy można również zapisać przy użyciu nowych * wariant * (Crossjoin) (MDX) funkcja.
SELECT
[Customer].[Country].[United States] *
[Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
Poprzedniej kwerendy można również zapisywane w następujący sposób:
SELECT [Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE (Measures.[Internet Sales Amount],
[Customer].[Country].[United States])
Zwracane wartości komórek będą identyczne, chociaż metadane zestaw wyników będą różne.Na przykład z poprzedniej kwerendy hierarchii kraju został przeniesiony do oś fragmentatora (w klauzula WHERE) i dlatego nie ma wyraźnie zestaw wyników.
Each of these three previous queries demonstrates the effect of the auto-exists behavior in SQL Server Usługi Analysis Services.
Głębokie i Autoexists skrócona
Autoexists can be applied to the expressions as Deep or Shallow.Deep Autoexists means that all expressions will be evaluated to meet the deepest possible space after applying the slicer expressions, the sub select expressions in the axis, and so on.Shallow Autoexists means that external expressions are evaluated before the current expression and those results are passed to the current expression.Ustawienie domyślne to głębokie autoexists.
Następujący scenariusz i przykłady pomogą ilustrują różne typy Autoexistss.W poniższych przykładach utworzone zostaną dwa zestawy: jedno wyrażenie obliczeniowe, a drugi jako wyrażenie stała.
//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% |
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 powyżej 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 tych trzech 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.