Dziś odkryłem coś co może być dla was całkiem interesujące jeśli pracujecie z technologią Microsoft Business Intelligence. W moim projekcie Analysis Services w skrypcie kalkulacyjnym miałem kilka Nazwanych Zestawów (ang. Named Set) – po ich napisaniu chciałem je oczywiście przetestować. Wszystko wyglądało w porządku dopóki nie zorientowałem się, że część zestawów nie było widocznych w narzędziu klienckim. Aby odwzorować tą sytuację użyjmy przykładu na podstawie kostki AdventureWorks (do pobrania tutaj)
--Active Promotions sample static Named Set CREATE SET CURRENTCUBE.[Active Promotions] AS IIF(MONTH(now())<4,{},[Promotion].[Promotion].chidlren), DISPLAY_FOLDER='Sets';
Powiedzmy, że chcemy stworzyć set, który zawiera tylko aktywne promocje, a nasza firma ma takowe tylko przez pierwsze cztery miesiące roku. Kod MDX z definicją takiego zestawu został przedstawiony powyżej. Po implementacji takiego zestawu i podłączeniu się do kostki przez Management Studio zauważymy coś czego z całą pewnością się nie spodziewaliśmy:
Gdzie jest nasz Named Set?
Może powinniśmy napisać zapytanie MDX aby pobrać dane z naszego zestawu? Wykonajmy poniższe polecenie:
SELECT [Measures].[Reseller Order Count] on 0, [Active Promotions] on 1 FROM [Adventure Works]
Rezultatem tego zapytania będzie pusty zestaw lub tylko nazwa miary którą wybraliśmy.
Kiedy użyjemy Excela jako narzędzia klienckiego rezultat będzie całkowicie odmienny:
Zdefiniowany zestaw jest widoczny i może być używany kiedy tylko chcemy (bez względu na fakt czy jest on pusty czy też nie). Zachowanie narzędzi klienckich jest bardzo interesujące i każdy deweloper powinien zdawać sobie z tego sprawę, że – niektóre narzędzia klienckie ukrywają zestawy które są puste! Oczywiście nawet jeżeli narzędzie klienckie ukrywa takie obiekty (jak Management Studio) są one w pełni dostępne poprzez kod MDX.
Jeżeli chcemy przetestować opisywane zachowanie kostki i upewnić się, że nie jest ono dziełem przypadku możemy w narzędziu klienckim użyć poniższego kodu MDX . Spowoduje ono, że powyższy zestaw nie będzie już pusty.
CREATE SET CURRENTCUBE.[Active Promotions] AS IIF( MONTH(NOW())>4, {}, [Promotion].[Promotion].children), DISPLAY_FOLDER = 'Sets' ;
Teraz możemy zauważyć, że zestaw jest dostępny z poziomu interfejsu graficznego. Jak widać Management Studio czasem próbuje być dla nas miłe co nie zawsze mu wychodzi.
- 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
Rzekłbym, że zachowanie SSMS jest bardzo nieprofesjonalne 😉 Czy tak samo wygląda to w wersji 2016? Czy można zmienić jakimś ustawieniem takie zachowanie SSMS?
Musimy niestety traktować go jako “ficzer”, a nie “bug” i raczej nie zostanie to naprawione 🙂 W 16 nadal występuje 🙂