2013-01-10 41 views
7

Potrzebuję kwerendy MDX dla Mondrian filtrowane według daty, gdzie jedna lub obie daty graniczne mogą nie istnieć. Używam poniższego zapytania, które działa tak długo, jak istnieją wymiary 2013-01-01 i 2013-01-08. Jeśli jedna z dwóch dat nie istnieje, to nie zwraca żadnych wyników, mimo że istnieją wymiary pośrednie. Jak uzyskać to zapytanie, nawet w przypadku brakującego wymiaru daty granicznej?Zapytanie zakresu dat MDX z brakującą datą graniczną

SELECT 
NON EMPTY {Hierarchize({[Measures].[Number of Something]})} ON COLUMNS, 
NON EMPTY {[Date].[2013-01-01]:[Date].[2013-01-08]} ON ROWS 
FROM [Users] 
+0

Czy Twój zdegenerowany wymiar lub osobny stół? Jeśli jest to oddzielna tabela wtedy zwykle byłoby wstępnie wypełnione, dlatego możesz upewnić się, że wszystkie wymiary istnieją ... (Nawet jeśli nie ma żadnych powiązanych faktów) W transformatorze próbek znajduje się transformacja czajnika PDI w celu wygenerowania wymiaru daty. – Codek

Odpowiedz

1

MDX zbudowany jest z założeniem, że każdy członek, którego dotyczy, istnieje; najlepiej wtedy upewnić się, że wszystkie możliwe wymiary wymiaru daty są dostępne, mając oddzielną tabelę z tymi wstępnie obliczonymi wartościami.

Można wprowadzić w błąd i zaimplementować tę tabelę jako procedurę przechowywaną, ale wymiary daty nie zajmują dużo miejsca w wielkim układzie rzeczy, więc prawie nigdy nie można tego zrobić.

Nie znam innego sposobu rozwiązania problemu.

0

spróbować wyeliminować NON EMPTY

0

Nawet jeszcze nie zrozumieć przyczynę realizacji tej logiki, można ukryć to dodając. Jeśli dodasz członka użytkownika w Mondrian, spróbuj tego.

/* Exclude Missing Member */ 
Create Set CurrentCube.[MissingMemberSet] As 
iif(IsError(StrToMember("[Dimension].[Hierarchy].&[MEMBER]")), 
{}, {[Dimension].[Hierarchy].&[MEMBER]}); 

Create Member CurrentCube.Measures.[Calculation on Missing Member] 
AS 
IIF ([MissingMemberSet].Count > 0, 
([Dimension].[Hierarchy].&[MEMBER],Measures.[X Measure]), 
0 
) 
, 
FORMAT_STRING = "Currency", 
LANGUAGE = 1033, 
NON_EMPTY_BEHAVIOR = { [X Measure] }, 
VISIBLE = 1 , DISPLAY_FOLDER = 'Display Folder' ; 

Ponadto można wdrożyć w użyciu IIF (ISERROR lub IIF (Występuje funkcje MDX.