2015-03-04 5 views
0

Я хочу получить иерархический вывод из запроса . Из следующего запроса он дает мне результат в плоской манере. Как и для всей корпорации, она дает результат для «Все», затем начинает давать результат для «Аптеки» и так далее.Как сгруппировать один атрибут на основе другого атрибута в mdx

enter image description here

Но я хочу, это как следующее для каждой корпорации.

enter image description here

Вот mdx запрос, который я написал:

WITH 
    SET Last36Months AS 
    LastPeriods 
    (36 
    ,[Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1] 
    ) 
    SET LatestMonth AS 
    { 
     // [Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1].lag(24), 
     // [Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1].lag(12), 
     [Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1] 
    } 
    MEMBER [Measures].[UnitSales] AS 
    (
     Last36Months 
    ,[Measures].[SALES UNITS (000)] 
    ) 
    MEMBER [Measures].[ValueSales] AS 
    (
     Last36Months 
    ,[Measures].[SALES VALUES (000)] 
    ) 
SELECT 
    { 
    (
     LatestMonth 
    ,[Measures].[SALES VALUES (000)] 
    ) 
    ,(
     LatestMonth 
    ,[Measures].[SALES UNITS (000)] 
    ) 
    } ON 0 
,{ 
    Order 
    (
     NonEmpty 
     (
      (
      [CHANNEL].[Channel].[All] 
      ,[MARKET BASE].[Market Base].&[1] 
      ,[CORPORATION].[Corporation].[Corporation].MEMBERS 
     ) 
     ) 
     + 
     NonEmpty 
     (
      (
      Descendants 
      (
       [CHANNEL].[Channel].[All] 
      ,1 
      ) 
      ,[MARKET BASE].[Market Base].&[1] 
      ,[CORPORATION].[Corporation].[Corporation].MEMBERS 
     ) 
     ) 
    ,[CORPORATION].[Corporation].[Corporation].Name 
    ,bdesc 
    ) 
    } ON 1 
FROM [PharmaTrend Monthly Stand Reg]; 

ответ

0

Вам не нужно, чтобы создать пользовательский набор - вы можете придерживаться с вашей оригинальной идеей включая ORDER внутри SELECT:

WITH 
    SET Last36Months AS 
    LastPeriods 
    (36 
    ,[Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1] 
    ) 
    SET LatestMonth AS 
    { 
     // [Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1].lag(24), 
     // [Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1].lag(12), 
     [Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1] 
    } 
    MEMBER [Measures].[UnitSales] AS 
    (
     Last36Months 
    ,[Measures].[SALES UNITS (000)] 
    ) 
    MEMBER [Measures].[ValueSales] AS 
    (
     Last36Months 
    ,[Measures].[SALES VALUES (000)] 
    ) 
SELECT 
    { 
    (
     LatestMonth 
    ,[Measures].[SALES VALUES (000)] 
    ) 
    ,(
     LatestMonth 
    ,[Measures].[SALES UNITS (000)] 
    ) 
    } ON 0 
,Order 
    (
     NonEmpty 
     (
      (
      [CHANNEL].[Channel].[All] 
      ,[MARKET BASE].[Market Base].&[1] 
      ,[CORPORATION].[Corporation].[Corporation].MEMBERS 
     ) 
     ) 
     + 
     NonEmpty 
     (
      (
      Descendants 
      (
       [CHANNEL].[Channel].[All] 
      ,1 
      ) 
      ,[MARKET BASE].[Market Base].&[1] 
      ,[CORPORATION].[Corporation].[Corporation].MEMBERS 
     ) 
     ) 
    ,[CORPORATION].[Corporation].CurrentMember.MemberValue 
    ,bdesc 
    ) ON 1 
FROM [PharmaTrend Monthly Stand Reg]; 
+0

У вас нет области видимости для '[CORPORATION]. [Corporation]'. Вы уверены, что '[CORPORATION]. [Corporation] .CurrentMember' не будет таким же, как' [CORPORATION]. [Corporation]. [All] '? – SouravA

+0

Хорошо, мой плохой. Оно работает! – SouravA

0

Похоже, вы хотите отсортировать по именам членов из [CORPORATION].[Corporation] иерархии.

В этом случае ниже, должны работать:

with set Last36Months as 
LASTPERIODS(36, [Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1]) 

Set LatestMonth as 
{ 

// [Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1].lag(24), 
// [Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1].lag(12), 
[Period JNJ].[Period Type-Year-Period].[Periods].&[MTH1] 

} 

member [Measures].[UnitSales] as 
(Last36Months,[Measures].[SALES UNITS (000)]) 

member [Measures].[ValueSales] as 
(Last36Months,[Measures].[SALES VALUES (000)]) 


member [Measures].CorporationName as 
[CORPORATION].[Corporation].currentmember.membervalue 

set OrderedSet as 
order(
(
nonempty(([CHANNEL].[Channel].[All],[MARKET BASE].[Market Base].&[1],  [CORPORATION].[Corporation].[Corporation].members))+ 
nonempty((descendants([CHANNEL].[Channel].[All],1),[MARKET BASE].[Market Base].&[1],[CORPORATION].[Corporation].[Corporation].members)) 
) 
,[Measures].CorporationName 
,bdesc) 


select 
{ 
(LatestMonth,[Measures].[SALES VALUES (000)]), 
(LatestMonth,[Measures].[SALES UNITS (000)]) 
} on 0, 
OrderedSet on 1 
from [PharmaTrend Monthly Stand Reg] 
+0

thanks @sourav_agasti –

+0

@sourav - у вас есть 4 аргумента в вашей функции ORDER. – whytheq

+0

Спасибо @whytheq - исправлено. – SouravA

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