Dziś chciałbym napisać parę słów na temat właściwości MDXMissingMemberMode dostępnej w kostkach wielowymiarowych SQL Server Analysis Services. Właściwość ta odnosi się do wymiaru i czasem istnieje potrzeba jej zmiany. Posiada ona trzy możliwe wartości:
- Default
- Error
- Ignore
gdzie domyślną wartością jest Ignore. W momencie gdy zostawimy domyślne ustawienie , wszystkie referencje z naszego kodu MDX do elementów atrybutów określonego wymiaru, które nie istnieją zostaną zignorowane tj. zwrócą pusty rezultat. Dla przykładu poniższe zapytanie:
SELECT {} on 0, [Customer].[Customer].&[186951] ON 1 FROM
nie zwróci nic, ponieważ element atrybutu o koordynatach [Customer].[Customer].&[186951] nie istnieje. W momencie gdy ustawimy właściwość MDXMissingMemberMode na Error wtedy to samo zapytanie zwróci nam następujący błąd:
Query (2, 1) The level ‘&[186951]’ object was not found in the cube when the string, [Customer].[Customer].&[186951], was parsed.
Domyślne zachowanie tej właściwości jest w większości przypadków odpowiednie, pozwala na bardziej elastyczne przygotowywanie kodu ponieważ w momencie gdy element hierarchii przechodzi z jednego elementu nadrzędnego na drugi wtedy automatycznie zmieniają się jego koordynaty. Jednakże jak to czasem bywa potrzebne jest inne zachowanie kostki i właśnie w tych wypadkach przydatna jest ta właściwość. Szczególnie w przypadku gdy budujemy nasze koordynaty ręcznie z poziomu kodu np. .NET.
- 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
Czy mogę prosić o podanie życiowego przykładu, gdzie ustawienie tej właściwości na “Error” jest przydatne?
W przypadku gdy budujemy nasze zapytanie z poziomu c# bazując na identyfikatorach, które nie pochodzą z kostki możemy przechwycić błąd i wyświeltić stosowny komunikat – może to okazać się prostsze niż sprawdzenie tego czy zbiór jest pusty czy też nie 🙂 Przypuśćmy, iż mamy wymiar czasu gdzie id ma format yyyyMMdd nasza aplikacja nie pobiera id z kostki i buduje go niezależnie. W przypadku gdy nie ma danych z jakiś dzień no to może zwrócić błąd, który my obsłużymy stosownym komunikatem.