W języku MDX zaimplementowano pewną mało znana funkcjonalność, chodzi mianowicie o zestaw funkcji języka VBA. Tak więc jeśli chcemy przeprowadzić proste operacje podobne do tych jakie wykonujemy formułami w Excelu możemy użyć wspomnianych funkcji – do dyspozycji mamy ich naprawdę dużo (całą ich listę znajdziemy tutaj).
W tym miejscu może pojawiać się pytanie jak użyć funkcji VBA w MDX? Wymaga to rejestracji dodatkowych komponentów bądź innych niestandardowych akcji? Odpowiedź brzmi nie! Wystarczy, że uzyjemy prefiksu vba! tak jak zostało to przedstawione poniżej:
WITH MEMBER vbaTest AS vba!left("This is sample text",8) SELECT vbaTest on 0 FROM [Adventure Works]
Rezultat jest bardzo prosty do przewidzenia, z tekstu przekazanego jako parametr wycięte zostanie pierwszego 8 znaków:
Tak więc użycie funkcji jest bardzo proste. Niemal wszystkie z nich są równie proste w użyciu. Ponadto istnieje możliwość ich zagnieżdżania tak jak poniżej:
WITH MEMBER vbaTest AS vba!left(vba!abs(vba!round(-23.42123,2)),1) SELECT vbaTest on 0 FROM [Adventure Works]
Liczba -23.42123 zostanie zaokrąglona do 2 miejsc po przecinku. Następnie zostanie wyciągnięta wartość bezwzględna, a następnie wycięty jeden znak od lewej. Tak więc jak możemy się spodziewać wynikiem końcowym będzie liczba 2.
Można sobie wyobrazić co trzeba by zrobić aby osiągnąć podobny efekt bez funkcji VBA. Warto również wspomnieć o użytecznej funkcji FORMAT, która pozwala np. na formatowanie naszej miary warunkowo na podstawie wartości z innego wymiaru dla przykładu wykonajmy poniższe zapytanie.
WITH MEMBER [Measures].[Internet Sales Amount BY LOCAL CURRENCY] AS CASE WHEN [Customer].[Customer Geography].currentmember = [Customer].[Customer Geography].[Country].&[United States] THEN vba!format([Measures].[Internet Sales Amount],"$#,###.00") ELSE vba!format([Measures].[Internet Sales Amount],"#,###.€") END SELECT [Internet Sales Amount BY LOCAL CURRENCY] ON 0, [Customer].[Customer Geography].children ON 1 FROM [Adventure Works]
W rezultacie otrzymamy sformatowaną miarę w zależności od warunku CASE jaki podaliśmy:
Jak widać funkcje VBA nieco upodobniają MDX do języka SQL i mogą być bardzo pomocne w codziennej pracy. Używajmy ich jeśli zachodzi taka potrzeba szczególnie, że są one przejrzyste i naprawdę proste w rozszyfrowaniu.
- 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