2013-03-14 4 views
1

У нас есть таблица фактов, в которой есть поле datetime [Log Entry]. [Time Entry].Как запрос MDX принимает параметры для фильтрации по атрибуту Fact Table datetime

Мы хотели бы, чтобы отфильтровать следующий запрос, основанный на диапазоне дат:., Где [Вход Вход] [Время входа] был между двумя прилагаемыми датами (2 параметра: т.е. STARTDATE и ENDDATE)

SELECT 
    NON EMPTY { [Measures].[Average Total Time] } ON COLUMNS, 
    NON EMPTY { ([User Property].[UserProperty].[Id].ALLMEMBERS * [Log Entry].[Time Entry].[Logged On].ALLMEMBERS) } 
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
FROM [MyCube] 

Я надеялся избежать создания таблицы времени/измерения и возможности сравнить эти даты (переданные через параметры) с [Log Entry]. [Time Entry].

Концепция SQL между (somedate между date1 и date2).

Как мы можем это сделать?

ответ

0

Вы должны использовать выражение диапазона. Пожалуйста, смотрите здесь: http://msdn.microsoft.com/en-us/library/ms146001%28v=sql.105%29.aspx

Вашего ИНЕК должен выглядеть, например:

WHERE (
    [Time].[Month Name].&[August 2009] 
    : 
    [Time].[Month Name].&[June 2012] 
    ) 

UPDATE Для фильтра Оси внутри него, вы должны использовать EXISTS дизъюнкции:

* {EXISTS 
    (
     {[Log Entry].[Time Entry].[Logged On].ALLMEMBERS} 
    , 
    {[Log Entry].[Time Entry].&[20120101]:[Log Entry].[Time Entry].&[20130101]} 
    ) 
+0

Dalex - спасибо за предложения. Однако я не вижу, как этот диапазон создает связь с полем, которое фактически имеет значение для сравнения в диапазоне. – pghtech