2016-04-15 7 views
3

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

Мой код выглядит, что до сих пор:

case 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "4254255527" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "2752637520" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "5637839739" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "9378793737" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "3789789397" then "ABC" 
    when [Document].[Document series].CURRENTMEMBER.MEMBERVALUE = "XYZ" then "XYZ" 
    else "Rest" 
end 

Но я получаю "Rest" каждый раз.

Как исправить это?

Edit: Другой попробовать, но до сих пор не работает:

case 
    when [Customer].[Customer's Document].[&5196189651] then "ABC" 
    when [Customer].[Customer's Document].[&7885181585] then "ABC" 
    when [Customer].[Customer's Document].[&7511535861] then "ABC" 
    when [Customer].[Customer's Document].[&4742575277] then "ABC" 
    when [Customer].[Customer's Document].[&7272727272] then "ABC" 
    when [Customer's Document].[Document Series].[&CHP] then "XYZ" 
    else "Rest" 
end 
+0

Что такое свойство значения, ключ и имя для документа Клиента?. Какова структура клиентского измерения?. Как вы запрашиваете эту меру и видите «Отдых» в качестве конечных результатов? добавьте запрос на свой вопрос, чтобы мы могли помочь. – BICube

+0

@Dodzik - это размер '[Customer]' в строках возможного предложения SELECT ?! если он не находится в строках, то Currentmember является членом All. currentMember только функции, если размер фактически _current_ i.e в контексте. Вероятно, это причина, по которой вы все время отдыхаете. Можете ли вы добавить оставшуюся часть вашего mdx-скрипта, пожалуйста? – whytheq

ответ

1

Я получаю ощущение, что вы хотите сделать что-то больше похоже на следующее:

WITH 
    SET [ABC] AS 
    { 
     [Customer].[Customer's Document].&[5196189651] 
    ,[Customer].[Customer's Document].&[7885181585] 
    ,[Customer].[Customer's Document].&[7511535861] 
    ,[Customer].[Customer's Document].&[4742575277] 
    ,[Customer].[Customer's Document].&[7272727272] 
    } 
    MEMBER [Customer].[All].[ABC] AS 
    Aggregate([ABC]) 
    MEMBER [Customer].[All].[XYZ] AS 
    [Customer].[Customer's Document].[Document Series].&[CHP] 
    SET [REST] AS 
    Except 
    (
     [Customer].[Customer's Document].MEMBERS 
    ,[ABC] 
    ) 
    MEMBER [Customer].[All].[Rest] AS 
    Aggregate([REST]) 
    SET [FINAL] AS 
    { 
     [Customer].[All].[ABC] 
    ,[Customer].[All].[XYZ] 
    ,[Customer].[All].[Rest] 
    } 
SELECT 
    [FINAL] ON 1 
,{[Measures].[Amount]} ON 0 
FROM [YourCube]; 

Или, может быть следующее:

WITH 
    SET [ABC] AS 
    { 
     [Customer].[Customer's Document].&[5196189651] 
    ,[Customer].[Customer's Document].&[7885181585] 
    ,[Customer].[Customer's Document].&[7511535861] 
    ,[Customer].[Customer's Document].&[4742575277] 
    ,[Customer].[Customer's Document].&[7272727272] 
    } 
    MEMBER [Customer].[All].[ABC] AS 
    Aggregate([ABC]) 
    MEMBER [Customer].[All].[XYZ] AS 
    [Customer].[Customer's Document].[Document Series].&[CHP] 
    SET [REST] AS 
    Except 
    (
     [Customer].[Customer's Document].MEMBERS 
    ,{ 
     [ABC] 
     ,[Customer].[Customer's Document].[Document Series].&[CHP] 
     } 
    ) 
    MEMBER [Customer].[All].[Rest] AS 
    Aggregate([REST]) 
    SET [FINAL] AS 
    { 
     [Customer].[All].[ABC] 
    ,[Customer].[All].[XYZ] 
    ,[Customer].[All].[Rest] 
    } 
SELECT 
    [FINAL] ON 1 
,{[Measures].[Amount]} ON 0 
FROM [YourCube]; 

Редактировать

Просто предупреждение - в принятом ответе есть следующие mdx:

case 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "4254255527" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "2752637520" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "5637839739" then "ABC" 
... 
... 

Это может быть помечена как решение, но это не большой mdx. В таком случае оператор IS следует использовать:

case 
    when [Customer].[Customer's Document].CURRENTMEMBER IS 
      [Customer].[Customer's Document].[Customer's Document].&[4254255527] then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER IS 
      [Customer].[Customer's Document].[Customer's Document].&[2752637520] then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER IS 
      [Customer].[Customer's Document].[Customer's Document].&[5637839739] then "ABC" 
... 
... 
+0

Вы имели в виду, что «&» вне скобок [Customer]. [Customer's Document]. & [7272727272] – BICube

+0

@Ala Я просто скопировал имена участников из исходного вопроса, но да, вы правы, '' ' обычно находятся вне брекетов. – whytheq

+0

@Dodzik - У меня было ощущение, что это было отмечено неправильно, так как общий mdx в ответе Proffesore невелик - делаем это 't] .CURRENTMEMBER.MEMBERVALUE =" 4254255527 "' является плохой альтернативой использованию оператора 'IS' – whytheq

0

Какой инструмент BI вы используете; Вы можете добавить это в новый столбец в качестве вычисления имени в представление источника данных (щелкните правой кнопкой мыши на таблице Customer-> New Named Calculation-> ColumnName: XXX). Пример:

CASE 
    WHEN ACOLUMN BETWEEN 0 AND 10 THEN 'ABC' 
    WHEN ACOLUMN BETWEEN 10 AND 20 THEN 'ABC' 
    ELSE 'REST' 
END 

Я считаю, что в этом случае вы должны использовать один и тот же hierarchy.Alternative вы можете разбить код на 2-х частей:

case 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "4254255527" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "2752637520" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "5637839739" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "9378793737" then "ABC" 
    when [Customer].[Customer's Document].CURRENTMEMBER.MEMBERVALUE = "3789789397" then "ABC" 
    when [Document].[Document series].CURRENTMEMBER.MEMBERVALUE = "XYZ" then "XYZ" 
    else "Rest" 
end 

CASE 
when [Document].[Document series].CURRENTMEMBER.MEMBERVALUE = "XYZ" then "XYZ" 
    else "Rest" 
end