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:
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 :
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:
Jedyną rzeczą jaką musimy skonfigurować musimy ustawić właściwość UnaryOperatorColumn dla atrybutu ParentGroup (zawierającego hierarchię Parent-Child):
Teraz możemy sprawdzić rezultat naszej pracy wykorzystując dowolny eksplorator kostki:
Jak można zauważyć wszystko działa. Zmieńmy nasz wymiar aby osiągnąć bardziej skomplikowaną logikę:
Dodajmy również dane do tabeli faktów:
Po przeprocesowaniu otrzymujemy prawidłowe rezultaty:
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.
- Avoiding Issues: Monitoring Query Pushdowns in Databricks Federated Queries - October 27, 2024
- Microsoft Fabric: Using Workspace Identity for Authentication - September 25, 2024
- Executing SQL queries from Azure DevOps using Service Connection credentials - August 28, 2024
Last comments