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