Запрос диапазона дат MDX с отсутствующей граничной датой

Мне нужен запрос MDX для Мондриана, отфильтрованный по дате, где одна или обе граничные даты могут не существовать. Я использую приведенный ниже запрос, который работает, пока существуют измерения 2013-01-01 и 2013-01-08. Если одна из двух дат не существует, она не возвращает результатов, даже если измерения между ними существуют. Как мне заставить этот запрос работать даже в случае отсутствия граничного измерения даты?

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

person Dynamite    schedule 10.01.2013    source источник
comment
Является ли ваше измерение вырожденным или отдельной таблицей? Если это отдельная таблица, то обычно она будет предварительно заполнена, поэтому вы можете убедиться, что все измерения действительно существуют.. (Даже если нет связанных фактов). В папке примеров есть преобразование PDI Kettle для создания измерения даты.   -  person Codek    schedule 11.01.2013


Ответы (3)


MDX построен с предположением, что каждый элемент, на который вы ссылаетесь, существует; тогда лучше убедиться, что все мыслимые элементы измерения даты действительно существуют, создав отдельную таблицу с предварительно вычисленными значениями.

Вы можете пойти на хитрость и реализовать эту таблицу как хранимую процедуру, но измерения даты не занимают много места в общей схеме вещей, поэтому вы вряд ли когда-либо будете это делать.

Я не знаю другого способа решить вашу проблему.

person Ezequiel Muns    schedule 14.01.2013

попытаться устранить НЕПУСТОЙ

person Kengin Veron    schedule 15.01.2013

Даже я пока не понимаю, зачем реализовывать эту логику, это можно скрыть, добавив . Если вы добавите пользовательский элемент в Mondrian, попробуйте.

    /* 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'  ;

Также вы можете использовать функции IIF(IsError или IIF(Exists) MDX.

person Proffesore    schedule 12.04.2016