Udostępnij za pośrednictwem


Ulepszenia wydajności MDX w programie SQL Server 2008Analysis Services

Dla tej wersja Usługi Analysis Services, szczególnym zostało podjęte w celu poprawy wydajności przy wykonywaniu obliczeń wyrażeń wielowymiarowych (MDX).Kilka ważnych zmian Architektura aparatu do osiągnięcia tych wzrost wydajności.Jednakże aby wykorzystać te ulepszenia wydajności, konieczne jest do optymalizacji kodu MDX.

Ten dokument pomaga zrozumieć, gdzie problemy mogą występować w istniejących wyrażenie MDX kod zapobiec występuje ulepszenia wydajności i udzielić porady dotyczące sposobu uniknięcia tych problemów w kodowania nowych MDX.Ten dokument zawiera również listę funkcji, które korzystają z poprawę wydajności.

Przeglądając kod, aby uzyskać maksymalną wydajność zyski w języku MDX

Podczas recenzowania kodu, staraj się unikać następujący zestaw scenariuszy lub kodowania sytuacji, mogą one uniemożliwić instrukcji MDX na osiągnięcie wydajności zyski początku zaimplementowane w SQL Server 2008 Analysis Services (SSAS).Jednakże jeśli nie ma możliwości praktycznych zmienić kod, aby uniknąć sytuacji wymienionych, można oczekiwać, że kod MDX mają ten sam poziom osiągów, jak w SQL Server 2005 Analysis Services (SSAS).

Użyteczne definicje

Miejsca

Zestaw komórek, które jest obliczane wyrażenie.

Dowolnego kształtu

Miejsce, które nie mogą być wyrażone jako łączyć krzyżowego dwóch lub więcej zbiorach.Na przykład miejsce {(Drink, USA), (Food, Canada)} reprezentuje dowolny kształt, ponieważ jest to podzbiór łączyć krzyżowego pomiędzy {Drink, Food} * {USA, Canada} = {(Drink, USA), (Drink, Canada), (Food, USA), (Food, Canada)}.

Wyrażenie statyczne

Wyrażenie jest określane jako statyczny jest niezmienne przez obszar, na którym jest obliczana.

Na przykład nad przestrzeń CrossJoin(Product.Members, Customer.Members) poniższe wyrażenia są niezależna.

  • 1, wyrażenie stała

  • Product.Members.Count

Wyrażenie dynamiczne

Wyrażenie jest nazywany dynamicznej podczas umożliwia rozwiązanie różnych wartości dla każdej komórka nad obszarem na której jest obliczany.

Na przykład nad przestrzeń CrossJoin(Product.Members, Customer.Members) poniższe wyrażenia są dynamiczne.

  • Sales, ponieważ sprzedaż jest miara jej wartość jest inna dla każdej komórka w przestrzeni.

Atrybut różnym

Atrybut różnych dysków sposób wyrażenie jest oceniane i sprawia, że wyrażenie zależne go.Na przykład, wyrażenie Customer.Geography.CurrentMember zależy od atrybutów w hierarchii Geografia.

Zwykle różne atrybuty zmniejszyć ilość miejsca, w którym wyrażenia są przetwarzane.Rozważmy następujące wyrażenie:

with member measures.x as Customers.Geography.currentmember.uniquename

Select Customers.Geography.City.members on 0,

Product.members on 1

From sales

Where measures.x

W tym wyrażeniu Customers.Geography jest wyrażenie statyczne.The currentmember function is a varying attribute because it introduces a dependency on the City attribute.Uniquename adds no varying attributes because it is bound to currentmember in a 1:1 relationship.Stąd uniquename będzie oceniana tylko jeden czas dla każdego klienta i nie jest powtarzany dla każdego Product.Dlatego miejsca całe wyrażenie skutecznie został zmniejszony nad różnym atrybut.

Użycie wyrażenia w innych niż wartość właściwości komórka

Dowolnego wyrażenie MDX, która użyta do przypisywania wartości właściwość innych niż wartość komórka nie będą korzystać z poprawy wydajności.Wydajność pozostanie w tym samym poziom jako SQL Server 2005 Analysis Services (SSAS).

Użycie funkcji wymienionych

Użycie wszelkich funkcja, które nie są wymienione w tym dokumencie kodu MDX nie będą korzystać z zysku oczekiwaną wydajność tej wersja produktu.Zobacz Functions with enhanced performance w tym dokumencie.

Użycie zabezpieczeń komórki

Oceny wyrażenie MDX w miejscu, w którym zdefiniowano komórka zabezpieczeń będzie zapobiegać uzyskiwaniu zwiększona wydajność kodu.

Związek między komórka zabezpieczeń i wydajności jest przedstawione w poniższej tabela.

Komórka zabezpieczeń

Oczekiwaną wydajność

Brak

Najlepsze

Odczyt

Pośrednie

Warunkowe odczytu

Najniższy

See Ustawianie uprawnień dane komórki za pomocą wyrażeń MDX and Przyznanie niestandardowe dostępu do danych komórki

Obciążenie dynamiczne wymiarze

Obciążenie dynamiczne wymiarze wyrażeń w kod MDX będzie zapobiegać uzyskiwaniu zwiększona wydajność kodu.Na przykład, takich jak wyrażenia Sum( IIF( Sales > 10000, h1.Members, h2.Members)) nie przyniesie korzyści, ponieważ kod jest zmiana członkom sumowane jako Sales jest obliczane wyrażenie.Innym przykładem może być scenariusz, gdzie należy użyć Członkowskich od roku kalendarzowego lub składnik hierarchii roku obrachunkowego, które zależą od atrybut, który należy do bieżący element członkowski atrybut konta porównanie o równoważnej wartości okresu równoległego.Wyrażenie MDX wymaganego w tym scenariuszu będzie podobny do następujący przykładowy kod.

ParallelPeriod(Iif( Account.CurrentMember.Properties("UsesFiscalCalendar")="Y", FiscalTime, CalendarTime).CurrentMember)

Ponownie wymiary dynamicznie zmienić bieżący element członkowski zmiany wymiar konta.

Obciążenie dynamiczne parametrów

Obciążenie dynamiczne parametrów w kodzie wyrażeń MDX będzie zapobiegać uzyskiwaniu zwiększona wydajność kodu.Na przykład wyrażenie like KpiGoal("Sales_" & [Fiscal Year].currentmember.UniqueName) zależy od komórek, od których ona jest przeliczana, natomiast wyrażenie KpiGoal("Sales_" & Cstr(Year(Now))) jest niezależna.

Ważna informacjaWażne:

Może być przypadek, wyrażenie KpiGoal("Sales_" & [Fiscal Year].currentmember.UniqueName) oblicza wartość nad obszarem jest obliczona caliJednakże, nie byłoby wystarczająco silnika zapewniają wzrost wydajności oczekiwane.

Dynamiczne odwołania do elementu członkowskiego

Obciążenie dynamiczne wszelkich element członkowski odwołania do kodu MDX będzie zapobiegać uzyskaniu zwiększona wydajność kodu.Na przykład w następującejwyrażenie

(IIF( e, mbr1, mbr2), Sales)

nie ma możliwości znać wynikowy spójna kolekcja aż do IIF() na wykonanie jest obliczane wyrażenie czas.Jednakże w następujących równoważnewyrażenie

IIF( e, (mbr1, Sales), (mbr1, Sales))

albo wynikowym krotek są znane przed obliczeniem wyrażenie e.

Zdefiniowane przez użytkownika procedury przechowywane (COM lub.NET)

Użycia przez użytkownika procedur przechowywanych w kod MDX będzie zapobiegać uzyskiwaniu zwiększona wydajność kodu.

Ostrzeżenie

Usługi Analysis Services zawiera procedury przechowywane, zoptymalizowanych dla poprawy wydajności.

Użycie nazwane zestawy lub Alias ustawić parametry

Dowolny czas nazwany zestaw lub aliasu zestawu używany jako pierwszy parametr w funkcjach Sum, Min, Max, Avg, lub Aggregate w kodzie wyrażeń MDX kodu nie będą korzystać z poprawy wydajności.

Na przykład następujące wyrażenie MDX zlicza, ile członkowie mają więcej niż jeden element podrzędność.

Sum(h.members as S, Iif(S.Current.Children.Count > 1, 1, 0))

Ponieważ h.members są wygładzone jako S i później bieżącą wartość funkcja pochodzi z zestaw aliasu, zapobiega oczekiwanej poprawy wydajności z uzyskuje.

Innym typowym przykładem takiej sytuacji jest zilustrowane w poniższym kodzie.

WITH

SET [Core Products] AS '{[Product].[Category].[Bikes]}'

MEMBER [Measures].[Core Products Sales] AS SUM([Core Products], [Measures].[Internet Average Unit Price] * [Measures].[Internet Order Quantity])

Select [Measures].[Core Products Sales] on 0

From [Adventure Works]

SUM Funkcjonować w element członkowski definicji nie uzyskać lepszą wydajność oczekiwana, ponieważ jest oparta na nazwany zestaw.

Użycie późnego wiązania w wyrażeniach zbiorczego niestandardowe

Wszelkie czas że wyrażenie niestandardowy pakiet zbiorczy odwołuje się składnik obliczeniowy lub inne wyrażenie MDX, której wartość jest wyznaczana w wykonanie czas, wyrażenie niestandardowy pakiet zbiorczy uniemożliwia lepszą wydajność.

Sposób użycia odwołań do przodu w skryptach

Dowolny czas Tworzenie odwołania do przodu definicji w jednostkowym sprawozdaniu w kod MDX, kod nie będą korzystać z poprawy wydajności.Na przykład poniższy urywek kodu skryptu MDX odniesienia do przodu jest tworzony na y podczas x definicji.

Create Member X as Y * 2;

Create Member Y as ( Sales, [Date].[Calendar].[Month].PreviousMember);

Aby naprawić tę sytuację, należy umieścić definicję y przed x definicji, jak w poniższym fragmencie.

Create Member Y as ( Sales, [Date].[Calendar].[Month].PreviousMember);

Create Member X as Y * 2;

Funkcje ze zwiększoną wydajność

Funkcje skalarne

Poniższa lista funkcji wartość skalarna zawiera funkcje, których można się spodziewać Zobacz lepszą wydajność.Pierwsza kolumna na liście zawiera operatory wartość skalarna.

-

OR

KEY

*

XOR

LEVELS.COUNT

/

CALCULATIONPASSVALUE

MEMBERTOSTR

+

CASE

MEMBERVALUE

<

COALESCEEMPTY

NAME

<=

HIERARCHIES.COUNT

ORDINAL

<>

ID

PROPERTIES

=

IIF

UNIQUENAME

>

IS

USERNAME

>=

ISANCESTOR

VALIDMEASURE

unary minus

ISEMPTY

VALUE

NOT

ISLEAF

 

AND

ISSIBLING

 

Ostrzeżenie

Wszystkie zdefiniowane przez użytkownika procedura składowana, COM lub kod zarządzany nie zobaczą poprawy wydajności w porównaniu z SQL Server 2005 Analysis Services (SSAS).Aby uzyskać więcej informacji, zobacz użytkownika określone procedury przechowywane (COM lub.NET) wcześniej w tym dokumencie.Stałych wyrażeń literalnych lub liczbowe, będą korzystać z poprawy wydajności.

Funkcje składowe

Poniższa lista funkcji element członkowski zawiera funkcje, których można się spodziewać Zobacz lepszą wydajność.

.CurrentMember

.FirstSibling

.LastSibling

.DataMember

.Item

.Lead

.DefaultMember

.Lag

.Parent

.FirstChild

.LastChild

.UnknownMember

Ancestor

KPIStatus

NextMember

Ancestors

KPITrend

OpeningPeriod

Ascendants

KPIValue

ParallelPeriod

ClosingPeriod

KPIWeight

PrevMember

Cousin

LastPeriods

StrToMember(<String Expression>, CONSTRAINED)

KPIGoal

LinkMember

 

Ostrzeżenie

StrToMember(<String Expression>, CONSTRAINED)podczas uzyskiwania możliwie najlepszą wydajność <String Expression> jest wyrażenie statyczne.

Zestaw funkcji

Poniższa lista funkcji zestaw zawiera funkcje, których można się spodziewać Zobacz lepszą wydajność.

Aggregate

Max

Sum

Avg

Min

 

Jednakże, gdy używasz jednej z funkcji wymienionych pierwszy parametr musi być wyrażenie używającego dowolnej kombinacji następujących funkcji.

- (z wyjątkiem operator)

.Children

MTD

(<set expression>,(<set expression>, …,(<set expression>) (cross operator łączyć)

.Members

PeriodsToDate

* (cross operator łączyć)

.Siblings

QTD

: (operator zakres)

AddCalculatedMembers

StrToSet(<String Expression>, CONSTRAINED)

+ (union operator)

Crossjoin(<set expression>,(<set expression>, …,(<set expression>)

Tail

 

Descendants

Union

 

Distinct

Unorder

 

Except

WTD

 

Hierarchize

YTD

 

Intersect

 

Ostrzeżenie

Ustawia statyczny, łącznie z pustego zestaw będzie również korzystać z zysków oczekiwanej wydajności.

Funkcje języka VBA

Poniższa lista funkcji programu VBA zawiera funkcje, których można oczekiwać, że zobaczyć lepszą wydajność.

ABS

CLng

Len

CDate

CStr

Teraz

CDbl

Int

Prawa

CInt

Lewa

Round

Następujące funkcje języka VBA mogą oczekiwać Zobacz lepszą wydajność, jeśli funkcja obliczonego różne atrybuty.

ASC

Format

Sgn

AscW

WP

SIN

Atn

Szesnastkowy

SLN

CBool

Godziny

Miejsca

CByte

IPMT

Sqr

CCur

LCase

Str

CDec

Dziennik

StrComp

Chr

LTrim

StrConv

ChrW

Minuta

String

COS

Miesiąc

FUNKCJA SYD

CSng

Liczba_rat

Tan

CVar

KTZ

Czasomierz

Data

Partycja

TimeSerial

DateAdd

Rata

TimeValue

DateDiff

PPmt

TRIM

DatePart

PV

TypeName

DateSerial

QBColor

UCase

Funkcja Data.wartość

Stawki

Val

Dzień

RBG

Dzień tygodnia

FUNKCJA DDB

Rnd

Rok

EXP

RTrim

 

Poprawka

Drugie