Несколько операторов в случае 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

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

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

Изменить: еще одна попытка, но все еще не работает:

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

person Dodzik    schedule 15.04.2016    source источник
comment
Каково значение, ключ и свойства имени для документа клиента?. Какова структура измерения «Клиент»? Как вы запрашиваете эту меру и видите «Остальное» в качестве конечных результатов? добавьте запрос к вашему вопросу, пожалуйста, чтобы мы могли помочь.   -  person BICube    schedule 19.04.2016
comment
@Dodzik - это измерение [Customer] в строках возможного предложения SELECT ?! если он не находится в строках, то Currentmember является членом All ....currentmember работает только в том случае, если измерение на самом деле текущее, т.е. в контексте. Вероятно, поэтому вы постоянно отдыхаете. Можете ли вы добавить оставшуюся часть вашего сценария mdx, пожалуйста?   -  person whytheq    schedule 19.04.2016


Ответы (2)


Я чувствую, что вы хотите сделать что-то вроде следующего:

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"
...
...
person whytheq    schedule 19.04.2016
comment
Вы имели в виду, что «&» вне скобок [Клиент].[Документ клиента].&[7272727272] - person BICube; 19.04.2016
comment
@Ala Я только что скопировал имена участников из исходного вопроса, но да, вы правы, & обычно находится вне фигурных скобок. - person whytheq; 19.04.2016
comment
@Dodzik - у меня было ощущение, что это было помечено неправильно, поскольку общий mdx в ответе Proffesore не очень хорош - выполнение этого t].CURRENTMEMBER.MEMBERVALUE = "4254255527" - плохая альтернатива использованию оператора IS - person whytheq; 28.04.2016

Какой инструмент 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

Я считаю, что в CASE вы должны использовать ту же иерархию. В качестве альтернативы вы можете разбить свой код на 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
person Proffesore    schedule 19.04.2016