Zrozumienie kolejność obliczeń i rozwiązywania zamówienia (MDX)
Jeśli moduł jest obliczana jako wynik skryptu MDX, można przejść przez wiele etapów obliczeń w zależności od użycia różnych funkcji związanych z obliczeń.Każdy z tych etapów jest nazywane etap obliczania.
Przebieg obliczeń może sprawę z pozycji porządkowych, określany jako numer etap obliczania.Liczba przebiegów obliczeń niezbędnych do pełnego obliczyć wszystkie komórki kostki jest określany jako obliczenia przekazać głębokość moduł.
Tabela i zapisu danych fakt tylko wpływ na przebieg 0.Skrypty wypełniania danych po przechodzą 0; każdego przydziału oraz obliczyć instrukcja w skrypcie powoduje utworzenie nowego hasła.Poza skrypt MDX odwołania do przebiegu bezwzględne 0 odnoszą się do ostatniej karty utworzony przez skrypt dla moduł.
Składniki obliczeniowe są tworzone na wszystkich przebiegów, ale wyrażenie jest stosowany w bieżącej karty.Przed upływem zawierają miara obliczeniowej, ale z wartością null.
Kolejność rozwiązywania
kolejność rozwiązywania Określa priorytet obliczeń w przypadku wyrażeń konkurencyjnych.W jednym przebiegu kolejność rozwiązywania określa dwie rzeczy:
The order in which Microsoft SQL Server Analysis Services evaluates dimensions, members, calculated members, custom rollups, and calculated cells.
Kolejność, w którym Analysis Services oblicza niestandardowych składników, składniki obliczeniowe, niestandardowego pakietu zbiorczego i komórkach obliczeniowych.
Element członkowski z najwyższym kolejność rozwiązywania ma wyższy priorytet.
Uwaga
Wyjątkiem tej, priorytet jest funkcja agregująca.Składniki obliczeniowe z funkcja agregacja mieć niższej kolejności rozwiązywania niż wszystkie przecinające miara obliczeniowej.
Pierwszeństwo obliczeń
Obliczanie priorytet określa kolejność, w którym wartości są uzyskiwane dla określonego wyrażenie w bieżącej komórka.Priorytet obliczeń jest rozwiązywana według następującego algorytmu:
Lista obliczeń (CL) jest tworzona na podstawie wszystkich obliczeń na ziarnistość bieżącej komórka lub wcześniejsze
Obliczenia w CL dzieli się na: Najwyższy WINS (HW) lub najbliżej WINS (CW)
Niestandardowe pakiety zbiorcze, operatory jednoargumentowe, miary Semi-Additive zablokowania są w prawo
Wszystkie obliczenia są HW
Zamówiona Obliczanie listy (OCL) jest tworzona na podstawie wszystkich HW uporządkowane według przebiegu
Dla każdego z pozostałych CW
Dla każdego obliczeń (C) w OCL (począwszy od najwyższego do najniższego)
Jeśli prawo jest wyżej w bieżącej komórce niż C, następnie wstawić CW OCL i przejdź do następnego CW
Jeśli w wyższe karty niż C jest w prawo, następnie wstawić CW OCL i przejdź do następnego CW
Przejdź do następnego C
Jeśli najwyższy obliczenia w OCL nie znajduje się w tej samej ziarnistość bieżącej komórka, obliczenia wartości agregacja, za pomocą funkcji
Pierwszeństwo i kolejność rozwiązywania wartości
kolejność rozwiązywania wartości mogą obejmować zakres od-8181 do 65 535.W tym przedziale niektóre kolejność rozwiązywania wartości odpowiadają określonych rodzajów obliczenia, jak pokazano w poniższej tabela.
Obliczanie |
Kolejność rozwiązywania |
---|---|
element członkowski członkowski niestandardowych formułach |
-5119 |
Operatory jednoargumentowe |
-5119 |
Obliczanie sumy wizualne |
-4096 |
Wszystkie inne obliczenia (o ile nie inaczej) |
0 |
Stanowczo zaleca się używać tylko dodatnie liczby całkowite, ustawiając kolejność rozwiązywania wartości.Po przypisaniu wartości, które są niższe niż kolejność rozwiązywania wartości podane w powyższej tabela, w etap obliczania może być nieprzewidywalne.Na przykład obliczenia dla obliczany element członkowski odbiera kolejność rozwiązywania wartość, która jest mniejsza niż wartość niestandardowego pakietu zbiorczego formuły domyślne-5119.Takie niskim kolejność rozwiązywania wartość powoduje, że składników obliczeniowych ma zostać obliczona przed formuły niestandardowego pakietu zbiorczego i może spowodować nieprawidłowe wyniki.
Tworzenie i zmienianie kolejność rozwiązywania
W Projektancie moduł na Okienko obliczeń, można zmienić kolejność rozwiązywania składniki obliczeniowe i obliczone komórki zmieniając kolejność obliczeń.
W języku MDX, można użyć SOLVE_ORDER słowo kluczowe, aby utworzyć lub zmienić obliczone elementy członkowskie i komórkach obliczeniowych.
kolejność rozwiązywania Przykłady
Aby zilustrować potencjalnych złożonością, od kolejności rozwiązywania, Poniższa seria kwerendy MDX zaczyna się dwie kwerendy, każdy osobno mieć kolejność rozwiązywania problemów.Następnie łączone są te dwie kwerendy na kwerendę, która wymaga kolejność rozwiązywania.
Kwerendy 1 — przychody i wydatki
Dla pierwszej kwerendy MDX aby zobaczyć różnicę w dochodów i wydatków za każdą połowę roku, utworzyć prostą kwerendę MDX podobny do następującego:
WITH
MEMBER [Time].[Year Difference] AS
[Time].[2nd half] - [Time].[1st half]
SELECT
{ [Account].[Income], [Account].[Expenses] } ON COLUMNS,
{ [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS
FROM Financials
W tej kwerendy jest tylko jeden obliczany element członkowski, Year Difference. Ponieważ jest tylko jeden obliczany element członkowski, kolejność rozwiązywania nie jest problemem, tak długo, jak moduł nie używa żadnych składników obliczeniowych.
Ta kwerenda MDX daje zestaw podobnie do poniższej tabela wyników.
|
Przychód |
Wydatki |
---|---|---|
Pierwsza połowa |
5000 |
4200 |
druga połowa |
8000 |
7000 |
Różnica roku |
3000 |
2800 |
Kwerendy 2 — procentowy dochód netto po wydatki
Za drugą kwerendę aby wyświetlić procent zysku netto po wydatków za każdą połowę roku, użyj następującej kwerendy MDX:
WITH
MEMBER [Account].[Net Income] AS
([Account].[Income], [Account].[Expenses]) / [Account].[Income]
SELECT
{ [Account].[Income], [Account].[Expenses], [Account].[Net Income] } ON COLUMNS,
{ [Time].[1st half], [Time].[2nd half] } ON ROWS
FROM Financials
Tej kwerendy MDX, jak poprzedni, ma tylko jeden obliczany element członkowski, Net Income, a więc nie ma żadnego kolejność rozwiązywania komplikacji.
Ta kwerenda MDX generuje zestaw wyników nieco inaczej, podobnie jak w poniższej tabela.
|
Przychód |
Wydatki |
Zysk netto |
---|---|---|---|
Pierwsza połowa |
5000 |
4200 |
0.16 |
druga połowa |
8000 |
7000 |
0.125 |
Różnica w zestawach wyników kwerendy pierwszą i drugą kwerendę, pochodzi z różnicy umieszczenie obliczany element członkowski.W pierwszej kwerendy obliczany element członkowski jest częścią oś wiersze, a nie oś COLUMNS w drugą kwerendę.Ta różnica umieszczenie staje się ważne następną kwerendę, które łączy dwa składniki obliczeniowe w pojedynczą kwerendę MDX.
Kwerendy 3 — Scalonej Year Difference i obliczenia dochodu netto
W tej kwerendzie końcowe połączenie obu poprzednich przykładach w pojedynczą kwerendę MDX kolejność rozwiązywania staje się ważny.Aby upewnić się, że obliczenia występują w odpowiedniej kolejności, należy zdefiniować kolejność, w których występują obliczenia przy użyciu SOLVE_ORDER słowo kluczowe.
The SOLVE_ORDER keyword specifies the kolejność rozwiązywania of calculated members in an MDX query or a CREATE MEMBER command. Wartości całkowite, używany z SOLVE_ORDER słowa kluczowe są względne, nie musisz zaczynają się od zera, a nie trzeba następowały kolejno po sobie. Wartość po prostu informuje MDX do obliczania elementu członkowskiego, na podstawie wartości pochodzące z obliczenia członków z większą wartość.Jeśli obliczany element członkowski jest zdefiniowany bez SOLVE_ORDER słowo kluczowe, wartość domyślna, która oblicza członka jest równa zero.
Na przykład jeśli znajdzie się obliczenia użyte w pierwszych dwóch przykładowych kwerend, dwóch członków obliczeniowych, Year Difference i Net Income, przecinają się komórka danych wynik przykładu kwerendy MDX. Jedynym sposobem ustalenia, w jaki sposób Analysis Services oceni to komórka znajduje się kolejność rozwiązywania. Formuły, które są używane do konstruowania tej komórka da różne wyniki w zależności od kolejność rozwiązywania dwóch członków obliczeniowych.
Po pierwsze można spróbować łączenie obliczenia w dwóch pierwszych kwerendy w następującej kwerendy MDX:
WITH
MEMBER [Time].[Year Difference] AS
'[Time].[2nd half] - [Time].[1st half],
SOLVE_ORDER = 1
MEMBER [Account].[Net Income] AS
'([Account].[Income] - [Account].[Expenses]) / [Account].[Income]',
SOLVE_ORDER = 2
SELECT
{ [Account].[Income], [Account].[Expenses], [Account].[Net Income] } ON COLUMNS,
{ [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS
FROM Financials
In this combined MDX query example, Net Income has the highest solve order, so it takes precedence when the two expressions interact.Analysis Services evaluates the cell in question by using the Net Income formula.Wyniki tego zagnieżdżone obliczenia, jak pokazano w poniższej tabela.
|
Przychód |
Wydatki |
Zysk netto |
---|---|---|---|
Pierwsza połowa |
5000 |
4200 |
0.16 |
druga połowa |
8000 |
7000 |
0.125 |
Różnica roku |
3000 |
2800 |
0.066 |
Wynik komórka udostępnionego jest oparty na wzór formuła) Net Income. Oznacza to, Analysis Services Oblicza wynik komórka udostępnionego z Year Difference dane produkcji następująca formuła (wynik jest zaokrąglany do jasności):
((8000 - 5000) - (7000 - 4200)) / (8000 - 5000) = 0.066
lub
(3000 - 2800) / 3000 = 0.066
Jednak Analysis Services Oblicza wynik komórka udostępnionego inaczej po przełączeniu zamówień rozwiązywania elementów obliczeniowych w kwerendzie MDX. Następująca kwerenda MDX Scalonej Odwraca kolejność rozwiązywania elementów obliczeniowych:
WITH
MEMBER [Time].[Year Difference] AS
'[Time].[2nd half] - [Time].[1st half],
SOLVE_ORDER = 2
MEMBER [Money].[Net Income] AS
'([Money].[Income] - [Money].[Expenses]) / [Money].[Income]',
SOLVE_ORDER = 1
SELECT
{ [Money].[Income], [Money].[Expenses], [Money].[Net Income] } ON COLUMNS,
{ [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS
FROM TestCube
Jak przełączył kolejność składników obliczeniowych Analysis Services używa Year Difference Formuła do oceny komórka, jak pokazano w poniższej tabela.
|
Przychód |
Wydatki |
Zysk netto |
---|---|---|---|
Pierwsza połowa |
5000 |
4200 |
0.16 |
druga połowa |
8000 |
7000 |
0.125 |
Różnica roku |
3000 |
2800 |
-0.035 |
Ponieważ korzysta z tej kwerendy Year Difference formuły z Net Income dane, formuły komórka udostępnionego jest podobny do następującego obliczenia:
((8000 - 7000) / 8000) - ((5000 - 4200) / 5000) = -0.035
Or
0.125 - 0.16 = -0.035
Dodatkowe zagadnienia
kolejność rozwiązywania może być bardzo skomplikowane problemu do rozwiązania, szczególnie w moduły z dużą liczbę wymiarów obliczany element członkowski, formuły niestandardowego pakietu zbiorczego lub komórek obliczeniowych.Kiedy Analysis Services wynikiem kwerendy MDX Analysis Services bierze pod uwagę wartości kolejności rozwiązywania dla wszystkich zaangażowanych w ramach danej karty, w tym wymiary moduł określonego w kwerendzie MDX.