2015-01-23 2 views
0

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

Меня попросили создать меру в нашем кубе SSAS, чтобы можно было видеть предыдущий квартал на сегодняшний день, исходя из того, насколько мы находимся в текущем квартале. Но вместо того, чтобы видеть стандартную идею дней, прошедших в настоящее время против прошедших ранее дней, они хотели бы видеть оставшиеся дни по сравнению с предыдущими днями.

Что я имею в виду, например, возьмите 1/22/2015. У нас осталось 48 дней в нашем текущем квартале, что у меня есть с помощью рассчитанной меры. Мне нужно найти соответствующий рабочий день из предыдущего квартала, где он также останется на 48 дней.

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

Идея, которая у меня была до сих пор, заключается в том, чтобы сделать это в самой секции базы данных, создав новый столбец, который является по существу рассчитанным количеством оставшихся дней, но сохраненных. Но в этот момент я не уверен, как принять расчетную меру в SSAS и отфильтровать член предыдущей четверти даты, чтобы использовать это свойство как есть.

+0

просто перечитайте свой вопрос - нужна эквивалентные четверти дату, но измеренные от конца квартала - вместо традиционного метода, который с самого начала периода времени? – whytheq

ответ

0

У вас есть служебные размеры в вашем кубе? У нас один называется TimeCalculations. Там мы имеем такие вещи, как CurrentValue, MTDValue, PrevEquivMTD, Past7Days .... Думаю, ваша новая логика впишется в такой размер.

Вот пример PrevEquivQTD против AdvWrks, с которым я просто играл. Гадание это не помогает ваш сценарий, но у меня было весело писать его:

WITH 
    SET [NonEmptyDates] AS 
    NonEmpty 
    (
     [Date].[Calendar].[Date].MEMBERS 
    ,[Measures].[Internet Sales Amount] 
    ) 
    SET [LastNonEmptyDate] AS 
    Tail([NonEmptyDates]) 
    SET [CurrQ] AS 
    Exists 
    (
     [Date].[Calendar].[Calendar Quarter] 
    ,[LastNonEmptyDate].Item(0) 
    ) 
    MEMBER [Measures].[pos] AS 
    Rank 
    (
     [LastNonEmptyDate].Item(0) 
    ,Descendants 
     (
     [CurrQ] 
     ,[Date].[Calendar].[Date] 
    ) 
    ) 
    MEMBER [Measures].[PrevEquivalentQTD] AS 
    Sum 
    (
     Head 
     (
     Descendants 
     (
      [CurrQ].ITEM(0).PrevMember 
     ,[Date].[Calendar].[Date] 
     ) 
     ,[Measures].[pos] 
    ) 
    ,[Measures].[Internet Sales Amount] 
    ) 
SELECT 
    {[Measures].[pos],[Measures].[PrevEquivalentQTD]} ON 0 
,[LastNonEmptyDate] ON 1 
FROM 
(
    SELECT 
     [Date].[Calendar].[Date].&[20050111] 
    : 
     [Date].[Calendar].[Date].&[20080611] ON 0 
    FROM [Adventure Works] 
); 
0

ваша дата 1/22/2015. Вы хотите То же время в предыдущем квартале, которое будет 22.08.201000.

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

Select 
ParallelPeriod 
( 
[Date].[Calendar Date].[Calendar Quarter], -- Level Expression 
1,           -- Index 
[Date].[Calendar Date].[Date].&[20150122]  -- Member Expression 
) On 0 
From [Adventure Works] 

Если вы хотите иметь такую ​​же дату в следующем квартале, замените индекс 1 на -1.

Приветствия

Смежные вопросы