Udostępnij za pośrednictwem


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:

  1. Lista obliczeń (CL) jest tworzona na podstawie wszystkich obliczeń na ziarnistość bieżącej komórka lub wcześniejsze

  2. Obliczenia w CL dzieli się na: Najwyższy WINS (HW) lub najbliżej WINS (CW)

    1. Niestandardowe pakiety zbiorcze, operatory jednoargumentowe, miary Semi-Additive zablokowania są w prawo

    2. Wszystkie obliczenia są HW

  3. Zamówiona Obliczanie listy (OCL) jest tworzona na podstawie wszystkich HW uporządkowane według przebiegu

  4. Dla każdego z pozostałych CW

    1. Dla każdego obliczeń (C) w OCL (począwszy od najwyższego do najniższego)

    2. Jeśli prawo jest wyżej w bieżącej komórce niż C, następnie wstawić CW OCL i przejdź do następnego CW

    3. Jeśli w wyższe karty niż C jest w prawo, następnie wstawić CW OCL i przejdź do następnego CW

    4. Przejdź do następnego C

  5. 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.