Operatory unarne w Analysis Services

W niniejszym poście chciałbym krótko wprowadzić czytelnika w tematykę i zachęcić do zgłębienia tematu – szczególnie, że ta technika bywa niezwykle przydatna. Czym są operatory unarne? Jest to technika pozwalająca zaprogramować dostosowane do określonych potrzeb operacje agregacji/zwijania.

W standardowych hierarchiach elementy dzieci są agregowane przy użyciu standardowych funkcji agregacji takich jak np. suma której znakiem jest unarnym +. W niektórych przypadkach występują różne operatory dla różnych elementów dzieci – jak coś takiego osiągnąć? Można użyć języka MDX lub właśnie operatorów unarnych przeznaczonych do tego typu zastosowań. Ponadto zalecaną praktyką jest używanie wbudowanych funkcjonalności gdy to tylko możliwe zamiast osiągać ten sam efekt w sposób programowy.

Operatory unarne pozwalają nam osiągnąć pożądany efekt z wykorzystaniem tabeli wymiaru takiego jak został przedstawiony na poniższym zrzucie:

parent-child-table

Co oznaczają symbole w polu UnaryOperator? To co następuje:

Total=LevelA+LevelB

LevelA=LevelA1-LevelA2-LevelA3

LevelB=-LevelB1

Oczywiście + i – nie są jedynymi dostępnymi operatorami – poniższa tabela zawiera pełną listę operatorów dostępnych w Analysis Services (aby powiększyć obrazek kliknij):

unary operators table

Po zapoznaniu się z dostępnymi operatorami unarnymi zbudujmy przykładowy wymiar z zaimplementowanymi operatorami unarnymi. Wykorzystam wymiar DimCost, przedstawiony wyżej, który stworzyłem w mojej testowej bazie danych. Pierwszym krokiem jest implementacja standardowej hierarchii parent-child:

parent-child-dimension

Jedyną rzeczą jaką musimy skonfigurować musimy ustawić właściwość UnaryOperatorColumn dla atrybutu ParentGroup (zawierającego hierarchię Parent-Child):

properities

Teraz możemy sprawdzić rezultat naszej pracy wykorzystując dowolny eksplorator kostki:

cube browser

Jak można zauważyć wszystko działa. Zmieńmy nasz wymiar aby osiągnąć bardziej skomplikowaną logikę:

table

Dodajmy również dane do tabeli faktów:

table2

Po przeprocesowaniu otrzymujemy prawidłowe rezultaty:

result

Jak można zauważyć operatory unarne dają nam możliwość prostej implementacji nawet bardzo złożonych obliczeń. Z własnego doświadczenia z pracą z różnymi implementacjami kostek wielowymiarowych wiem, że funkcjonalność ta jest bardzo słabo znana wśród deweloperów- mam nadzieję, że wy teraz znając tą technikę będziecie mogli ją wykorzystać w razie potrzeby w swoich własnych projektach.

Adrian Chodkowski
Follow me

Adrian Chodkowski

SQL geek, Data enthusiast, Consultant & Developer
Adrian Chodkowski
Follow me

Latest posts by Adrian Chodkowski (see all)

Leave a Comment

Your email address will not be published. Required fields are marked *