2016-04-11 7 views
0

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

Это мой прототип код, который не работает на всех:

WITH 
    SET [CurrentMonth] AS StrToMember('[Date].[Calendar].[Month].&[' + FORMAT(Now(), "yyyyMM") + ']') 
    SET [LastThreeMonths] AS TAIL({NULL: [CurrentMonth].ITEM(0)}, 3) 
SELECT 
    { 
     min(Tail([LastThreeMonths],3), iif([Measures].[Net sale price] = 0, null, [Measures].[Net sale price])) 
    } ON COLUMNS 
    ,{ 
     [Product].[Product code].MEMBERS 
    } ON ROWS 
FROM [Sales] 
WHERE ( 
     { [Department].[Department name].&[WRO] } 
    ); 

Это возвращает следующее сообщение об ошибке: function "" expects a tuple set expression for the 1 argument

Если я пытаюсь что-то вроде этого:

WITH 
    SET [CurrentMonth] AS StrToMember('[Date].[Calendar].[Month].&[' + FORMAT(Now(), "yyyyMM") + ']') 
    SET [LastThreeMonths] AS TAIL({NULL: [CurrentMonth].ITEM(0)}, 3) 
SELECT 
    { 
     (Tail([LastThreeMonths],3), [Measures].[Net sale price]) 
    } ON COLUMNS 
    ,{ 
     [Product].[Product Code].MEMBERS 
    } ON ROWS 
FROM [Sales] 
WHERE ( 
     { [Department].[Department name].&[WRO] } 
    ); 

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

+0

Это не ясно из вашего вопроса: вы хотите _single_ минимальное значение за последние три месяца, или _separate_ минимальное значение для каждого из последних трех месяцев? Пожалуйста, отредактируйте вопрос, чтобы уточнить это. – SebTHU

+0

@Dodzik, поэтому я предполагаю, что ваш куб должен содержать будущие месяцы? (наши кубы не содержат будущих дат) – whytheq

+0

@whytheq Что вы имеете в виду? – Dodzik

ответ

0

Я дал время подумать об этом, и я решил это. Вот решение:

WITH 
    SET [Current month] AS StrToMember('[Date].[Calendar].[Month].&[' + FORMAT(Now(), "yyyyMM") + ']') 
    SET [Last three months] AS LastPeriods(3, [Current month].item(0)) 
    MEMBER [Min price] AS MIN([Last three months], [Measures].[Net sale price]) 
SELECT 
    { 
     [Min price] 
    } ON COLUMNS 
    ,{ 
     [Product].[Product name].MEMBERS 
    } ON ROWS 
FROM [Sales] 
WHERE ( 
     { [Department].[Department name].&[WRO] } 
    );