Ситуация не работает для всех условий

with member test as
case 
  when ([All Products].[All Products].[Group 2].&[1],[Measures].[minus-prod-trx])>0
  then (ancestor([All Products].[All Products].[Group 2].&[1],2),[Measures].[minus-prod-trx])
   when ([All Products].[All Products].[Group 2].&[2],[Measures].[minus-prod-trx])>0
  then (ancestor([All Products].[All Products].[Group 2].&[2],2),[Measures].[minus-prod-trx])
end

Проблема: Как я могу получить оба значения, если вышеуказанные оба условия удовлетворяют? Теперь возвращается только один результат, хотя оба условия удовлетворяют. Я пробовал с:

case 
  when [All Products].[Group 2].CURRENTMEMBER IS [All Products].[Group 2].&[1]
  then...

Но это не работает.

1 ответ

Предполагая, что эта иерархия ON ROWS:

[All Products].[All Products]

Тогда что-то вроде следующего:

WITH MEMBER [Measures].test AS
  CASE
    WHEN 
     [All Products].[All Products].CURRENTMEMBER 
         IS [All Products].[All Products].[Group 2].&[1]
       AND [Measures].[minus-prod-trx] > 0
         THEN
          (ancestor([All Products].[All Products].[Group 2].&[1],2),[Measures].[minus-prod-trx])
   WHEN
     ....

Вот пример вышеупомянутого в использовании против куба AdvWrks от MS:

WITH 
  MEMBER [Measures].test AS 
    CASE 
      WHEN 
            [Product].[Product Categories].CurrentMember
          IS 
            [Product].[Product Categories].[Product].[Hitch Rack - 4-Bike]
        AND 
          [Measures].[Internet Sales Amount] > 0 
      THEN 
        (
          Ancestor
          (
            [Product].[Product Categories].[Product].[Hitch Rack - 4-Bike]
           ,2
          )
         ,[Measures].[Internet Sales Amount]
        )
      WHEN 
            [Product].[Product Categories].CurrentMember
          IS 
            [Product].[Product Categories].[Product].[Road Bottle Cage]
        AND 
          [Measures].[Internet Sales Amount] > 0 
      THEN 
        (
          Ancestor
          (
            [Product].[Product Categories].[Product].[Road Bottle Cage]
           ,3
          )
         ,[Measures].[Internet Sales Amount]
        )
    END 
SELECT 
  NON EMPTY 
    {
      [Measures].[Internet Sales Amount]
     ,[Measures].test
    } ON 0
 ,[Product].[Product Categories].[Product] ON 1
FROM [Adventure Works];

Результаты в следующем:

В комментариях вы ставите следующее

with member [Measures].Test as 
case 
when [Dim Date].[Hierarchy].currentmember 
  IS [Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2] 
    then (ancestor([Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2],2),[Measures].[Amount]) end 
select {[Measures].Test} on 0 
from [My Adventure Works]; 

Этот код выглядит нормально для меня. [Dim Date].[Hierarchy].currentmember не равен члену, указанному вами выше - currentmember просматривает каждую строку выходных данных и возвращает текущий член, но в приведенном выше у вас нет этой иерархии в ваших строках... поэтому текущий член является членом All, поэтому ваш WHEN условие ложное.

Sourav исправил вышесказанное, создав контекст так, чтобы текущий член возвращал члена, отличного от All член иерархии:

with member [Measures].Test as 
case 
when [Dim Date].[Hierarchy].currentmember 
  IS [Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2] 
    then (ancestor([Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2],2),[Measures].[Amount]) end 
select 
   {[Measures].Test} on 0, 
    [Dim Date].[Hierarchy].[Calendar Year].&[2007].&[1].&[2] on 1 //<<including this means that the currentmember has something to work with!!
from [My Adventure Works]; 

Пожалуйста, ознакомьтесь с определением функции текущего члена: https://msdn.microsoft.com/en-us/library/ms144948.aspx

Другие вопросы по тегам