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.
![]() |
---|
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 |
|