Udostępnij za pośrednictwem


Ulepszenia wydajności dla wyrażeń MDX z usług analiz programu SQL Server 2008

W tej wersja Analysis Services, szczególnym została podjęta, aby zwiększyć wydajność przy wykonywaniu obliczeń Multidimensional Expressions (MDX). Kilka istotnych zmian dokonano architektury aparat do osiągnięcia tych wzrost wydajności.Niemniej jednak aby skorzystać z tych usprawnień wydajności, konieczne jest do optymalizacji kodu MDX.

Ten dokument pomóc w zrozumieniu, gdy problemy mogą występować w sieci istniejących MDX kod, który będzie uniemożliwić występuje poprawę wydajności i porad na temat uniknąć tych problemów w źródłowym nowego języka MDX.Ten dokument zawiera również listę funkcji, które korzystają z poprawę wydajności.

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

Podczas przeglądania kodu, staraj się unikać następujący zestaw scenariuszy lub kodowania sytuacje, jak je można spowodować, że Twoje instrukcji MDX z osiągnięcia wzrost wydajności w SQL Server 2008 Analysis Services (SSAS). Niemniej jednak jeśli nie ma praktycznego można zmienić kod w celu uniknięcia wymienionych sytuacji, można oczekiwać, że kod MDX mają ten sam poziom wydajności w SQL Server 2005 Analysis Services (SSAS).

Użyteczne definicje

Miejsce na

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

Dowolnego kształtu

Miejsce, które nie może być wyrażona jako łączyć krzyżowego dwa lub więcej zestawów.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, gdy jest on over niezmienny miejsca, na których jest obliczana.

Na przykład za pośrednictwem przestrzeń CrossJoin(Product.Members, Customer.Members) Poniższe wyrażenia są niezmienne.

  • 1, wyrażenie stała

  • Product.Members.Count

Wyrażenie dynamiczne

Wyrażenie jest określane jako dynamiczne, gdy jest rozwiązywana jako do innej wartości dla każdej komórka w miejsce na których jest obliczana.

Na przykład za pośrednictwem przestrzeń CrossJoin(Product.Members, Customer.Members) Poniższe wyrażenia są dynamiczne.

  • Sales, ponieważ sprzedaży jest miarą jej wartość jest inny dla każdej komórka w obszarze.

Zmiana atrybut

Atrybut różnych dysków sposób wyrażenie jest oceniane i sprawia, że zależne od wyrażenia na niego.Na przykład wyrażenie Customer.Geography.CurrentMember zależy od tego, atrybuty w hierarchii Lokalizacja geograficzna.

Zwykle różne atrybuty zmniejszyć ilość miejsca, w którym wyrażeń zostaną obliczone.Należy wziąć pod uwagę 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 to 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.Tak więc uniquename zostanie ocenione tylko jeden czas dla każdego klienta i nie są powtarzane dla każdego Product. Dlatego miejsca całe wyrażenie skutecznie został zmniejszony przez różne atrybut.

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

Każde wyrażenie MDX używanej do przypisywania wartości właściwość-wartość komórka nie będą korzystać z poprawę wydajności.Wydajność pozostanie na tym samym poziomie, co SQL Server 2005 Analysis Services (SSAS).

Użycie innych niż wymienione funkcje

Użycie dowolnej funkcja nie są wymienione w niniejszym dokumencie, w kodzie wyrażeń MDX nie będą korzystać z zysku oczekiwanej wydajności w tej wersja produktu.Zobacz Functions with enhanced performance w tym dokumencie.

Użycie zabezpieczeń komórka

Ocena wyrażenie MDX w miejsca, które zdefiniowano komórka zabezpieczeń będzie zapobiegać uzyskaniu wyższą wydajność kodu.

W poniższej tabela przedstawiono relację między komórka bezpieczeństwo i wydajność.

Komórka zabezpieczeń

Oczekiwanej wydajności

None

Najlepsze

Odczyt

Pośrednie

Odczyt warunkowych

Najniższy

Zobacz Using MDX Expressions to Set Cell Data Permissions i Granting Custom Access to Cell Data

Użycie dynamicznych wymiarze

Sposób użycia wyrażeń wymiarze dynamicznego kodu MDX będzie zapobiegać uzyskaniu wyższą wydajność kodu.Na przykład takich jak wyrażenia Sum( IIF( Sales > 10000, h1.Members, h2.Members)) nie będzie korzystać, ponieważ kod jest zmieniany być sumowane jako członków Sales wyrażenie jest oceniane. Innym przykładem może być scenariusza, w których należy składnik roku kalendarzowego lub składnik hierarchii rok finansowy, które zależą od atrybutu, który należy do bieżącego elementu członkowskiego atrybut konta dokonać porównania z odpowiadającą jej wartością okresu równoległego.Wyrażenie MDX, wymagane w tym scenariuszu będzie podobną do następujący przykładowy kod.

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

Ponownie wymiary dynamicznie zmieniać, gdy bieżący element członkowski o zmianach wymiaru konta.

Użycie dynamicznych parametry

Sposób użycia parametrów dynamicznego kodu MDX będzie zapobiegać uzyskaniu wyższą wydajność kodu.Na przykład wyrażenie, takie jak KpiGoal("Sales_" & [Fiscal Year].currentmember.UniqueName) zmienia się w komórkach, od których ona jest obliczana, W przeciwieństwie wyrażenie KpiGoal("Sales_" & Cstr(Year(Now))) jest niezmienny.

Important noteImportant Note:

Może on być przypadek których wyrażenie KpiGoal("Sales_" & [Fiscal Year].currentmember.UniqueName) ma taką samą wartość w polu jest obliczana. Jednakże, nie będzie wystarczająco aparat umożliwia zwiększenie wydajności oczekiwane.

Dynamiczne Członkowskich materiały referencyjne

Użycie odwołania do wszelkich dynamicznych element członkowski kodu MDX będzie zapobiegać uzyskaniu wyższą wydajność kodu.Na przykład w następującej wyrażenie

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

nie ma możliwości znać wynikowy spójnej kolekcji do IIF() wyrażenie jest oceniane na wykonanie czas. Jednak w następujących odpowiednik wyrażenie

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

znane są albo krotek, wynikowe przed wylicza wyrażenie e.

Wskazówki do planu

Wskazówki dotyczące planu stanowią rozszerzenie do języka MDX do wskazania aparat jak ocenić wyrażeń.W tej wersja Analysis Services, wskazówki do planu zostały wprowadzone przez funkcja IIF(,,) tylko.

Plan wskazówki mogą być wskazywane na wyrażenie MDX wyrażenie lub globalnie skonfigurowane na właściwości konfiguracja serwera.

Wskazówki dotyczące planu w funkcjach IIF()

W IIF(,,) wskazówki wyrażenia są oznaczane przy użyciu następującej składni:

IIF(<cond>, <expr>, <expr>) [HINT <hints>]

<expr> ::= <expr> [HINT <hints>]

<hints> ::= <hint> [<hints>]

<hint> ::= EAGER | STRICT | LAZY

  • EAGER powoduje, że wyrażenie, które ma być oceniane przez całą subspace IIF.

  • STRICT powoduje, że wyrażenie jest sprawdzane tylko w wynikowym subspace zgodnie z wyniki wyrażenie warunku.

  • LAZY powoduje, że wyrażenie, które ma być oceniane w trybie komórek przez komórka.

  • CHCESZ i ściśle wzajemnie się wykluczają one do wskazówkę dotyczącą; mogą być używane w tym samym IIF(,,) za pośrednictwem różnych wyrażeń.

Przykład składni:

IIF([Measures].[Internet Sales Amount]=0

, {([Date].[Calendar Year].CURRENTMEMBER, [Customer].[Country].[All Customers])} HINT EAGER

, {{[Date].[Calendar Year].CURRENTMEMBER} * [Customer].[Country].[Country].MEMBERS} STRICT LAZY

)

Wskazówki dotyczące planu we właściwościach konfiguracja

Następujące właściwości konfiguracja zostały wprowadzone do obsługi ścieżce OLAP\Query plan wskazówki:

Nazwa właściwość

Dopuszczalne wartości

Wyjaśnienie

IIFThenMode

0 | 1 | 2

0, Wskazówka nr (domyślnie)

1, EAGER

2, ŚCISŁE

IIFElseMode

0 | 1 | 2

0, Wskazówka nr (domyślnie)

1, EAGER

2, ŚCISŁE

LazyEnabled

0 | 1

0, Wyłączone (ustawienie domyślne)

1, Włączone

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

Użycie procedury przechowywane przez użytkownika w kodzie wyrażeń MDX będzie zapobiegać uzyskaniu wyższą wydajność kodu.

Uwaga

SQL Server 2008 Analysis Services (SSAS) zawiera procedury przechowywane, które są zoptymalizowane dla poprawy wydajności.

Sposób użycia nazwane zestawy lub ustaw alias w parametrach

Wszelkie czas nazwanego zestawu lub alias zestaw jest używany jako pierwszy parametr w funkcjach Sum, Min, Max, Avg, lub Aggregate w kodzie wyrażeń MDX kodu nie będą korzystać z poprawę 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 Trwa aliasu jako S i funkcja później bieżąca wartość jest pobierana z zestaw aliasu, uniemożliwia oczekiwanego poprawy wydajności z są uzyskiwane.

Innym przykładem typowych tej 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]

The SUM funkcja in the element członkowski definition does not obtain the expected performance improvement because it is based on a named zestaw.

Użycie opóźnione wiązania w wyrażenia zestawienie niestandardowe

Wszelkie czas, odwołuje się wyrażenie niestandardowego pakietu zbiorczego obliczany element członkowski lub inne wyrażenie MDX, której wartość jest wyznaczana w wykonanie czas, wyrażenie pakietu niestandardowego zapobiega lepszą wydajność.

Użycie odwołania do przodu w skrypty

Każdorazowym utworzeniu odwołania do definicji do przodu, w oddzielnych instrukcje w kodzie wyrażeń MDX, kodu nie będą korzystać z poprawę wydajności.Na przykład w poniższym fragmencie skryptu MDX odwołanie do przodu jest tworzone w chwili 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ć Y definicji przed X definicji, jak w poniższym fragmencie.

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

Create Member X as Y * 2;

Funkcje za pomocą rozszerzonych wydajności

Funkcje skalarne

Na poniższej liście funkcji wartość skalarna zawiera funkcje, nad którymi należy się spodziewać wyświetlić większą 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

 

Uwaga

Wszelkie zdefiniowane przez użytkownika procedura przechowywana, COM lub kod zarządzany nie zobaczą wszelkie poprawy wydajności w porównaniu z SQL Server 2005 Analysis Services (SSAS). Aby uzyskać więcej informacji zobacz użytkownika zdefiniowane przez procedury przechowywane (COM lub .NET) we wcześniejszej części tego dokumentu.Wyrażenia stała, numeryczną, albo literału będą korzystać z poprawę wydajności.

Funkcje element członkowski

Poniższa lista funkcji element członkowski zawiera funkcje, nad którymi należy się spodziewać wyświetlić większą 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

 

Uwaga

StrToMember(<String Expression>, CONSTRAINED) gdy uzyskuje celu uzyskania jak najlepszej wydajności <String Expression> to wyrażenie statyczne.

Funkcje zestaw

Na poniższej liście zestaw funkcji zawiera funkcje, nad którymi należy się spodziewać wyświetlić większą wydajność.

Aggregate

Max

Sum

Avg

Min

 

Używając dowolnego z wymienionych funkcji, pierwszy parametr musi być wyrażenie korzystające z dowolnej kombinacji następujących funkcji.

- (z wyjątkiem operator)

.Children

MTD

(<set expression>,(<set expression>, …,(<set expression>) (operator łączyć krzyżowego)

.Members

PeriodsToDate

* (operator łączyć krzyżowego)

.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

 

Uwaga

Zestawy statyczne, włączając w to pusty zestaw będzie również korzystać z wzrost oczekiwanej wydajności.

Funkcje języka VBA

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

ABS

CLng

Długość

CDate

CStr

Teraz

CDbl

Int

Right

CInt

Left

Round

Dla następujących funkcji VBA można oczekiwać, że zobaczyć większą wydajność, czy funkcja obliczonego różne atrybuty.

Rosnąco

Format

Sgn

AscW

WP

SIN

Atn

Szesnastkowy

SLN

Cbool

Godziny

Miejsce na

Cbyte

IPMT

Sqr

Ccur

Lcase

Ciąg

Cdec

Dziennik

StrComp

Chr

LTrim

StrConv

ChrW

Minuta

String

COS

Miesiąc

SYD

CSng

Okresy

Tan

Cvar

Paź

Czasomierz

Data

Partycji

TimeSerial

DateAdd

Rata

TimeValue

DateDiff

PPmt

Przytnij

DatePart

WA

TypeName

DateSerial

QBColor

Ucase

DateValue

Stawka

Val

Dzień

RBG

Dzień tygodnia

DDB

Rnd

Rok

EXP

Rtrim

 

Poprawka

Sekundy