SSASDisappearingNAmedSet_00

Znikający Named Set w Analysis Services Multidimensional

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.

2 Comments

    • Musimy niestety traktować go jako “ficzer”, a nie “bug” i raczej nie zostanie to naprawione 🙂 W 16 nadal występuje 🙂

Leave a Reply