2015-08-10 3 views
1

У меня есть эта таблица, сгенерированная с помощью MDX.

http://i62.tinypic.com/2m5xeg0.jpg

Мне нужно создать вычисляемое измерение (или меру) под названием «в этом году» с 2-мя значениями:
ДА: если CurrentMember YEAR включает в себя значение 2015 и
NO: если член года не включают в себя 2015 для каждого клиента ID

http://i57.tinypic.com/2h508yx.jpg

код MDX является:
MDX - установить член другими значениями-членами

 
SELECT 
    NON EMPTY {[Measures].[QUANTITY]} ON COLUMNS, 
    NON EMPTY CrossJoin({CLIENT ID].[CLIENT ID].Members, {[YEAR].[YEAR].Members}) ON ROWS 
FROM 
    [MyCube] 

ответ

1

Вы могли бы попробовать что-то вроде следующего:

WITH 
    MEMBER [Measures].[is2015] AS 
    IIF 
    (
     Isnull(Instr(0,[YEAR].[YEAR].CurrentMember.Member_Caption,"2015")) //<<unsure if the 2nd argumnet should read: [YEAR].CurrentMember.Member_Caption 
    ,"YES" 
    ,"NO" 
    ) 
SELECT 
    NON EMPTY 
    { 
     [Measures].[QUANTITY] 
    ,[Measures].[is2015]   
    } ON COLUMNS 
,NON EMPTY 
    CrossJoin 
    (
     [CLIENT ID].[CLIENT ID].MEMBERS 
    ,{[YEAR].[YEAR].MEMBERS} 
    ) ON ROWS 
FROM [MyCube]; 

Вот MSDN документация для функции Instr используется в mdx: https://msdn.microsoft.com/en-us/library/hh758424.aspx

Со ссылкой на ваш трафаретная печать, пожалуйста, попробуйте этот вариант:

WITH 
    MEMBER [Measures].[is2015] AS 
    IIF 
    (
     NonEmpty 
     (
      [CLIENT ID].[CLIENT ID].CurrentMember 
     ,[YEAR].[YEAR].[2015] 
     ).Count 
     > 0 
    ,"YES" 
    ,"NO" 
    ) 
SELECT 
    NON EMPTY 
    { 
     [Measures].[QUANTITY] 
    ,[Measures].[is2015] 
    } ON COLUMNS 
,NON EMPTY 
    CrossJoin 
    (
     [CLIENT ID].[CLIENT ID].MEMBERS 
    ,{[YEAR].[YEAR].MEMBERS} 
    ) ON ROWS 
FROM [MyCube]; 
+0

Благодарим за ответ, но это не совсем то решение, которое мне нужно здесь. [Мера]. [Is2015] должна быть для всего члена «КЛИЕНТ-ИД», а не для каждого отдельного ГОДА в строке. Если определенный клиент (40407 в этом случае) должен иметь ДА для всех [ГОД], потому что он включает значение «2015» (img. 2). Я думаю, что расчетное измерение было бы более уместным, но я не знаю, как его установить. Я забыл упомянуть, что я использую MONDRIAN. –

+0

ok - это все еще достаточно легко через функцию 'NonEmpty'. У вас есть «NonEmpty» в Мондриане? – whytheq

+0

С ЧЛЕНА [Меры]. [Is2015] КАК IIF ( IsNull (Instr (0, [год]. [Год] .CurrentMember.Properties ("MEMBER_CAPTION"), "2015")) , "ДА" , «NO» ) возвращает ошибку: ** MondrianException: Mondrian Ошибка: никакая функция не соответствует сигнатуре 'Isnull ()' **, и эта же ошибка появляется с непустой функцией. Mondrian имеет обе функции, но кажется, что что-то не так –

1

спасибо! Альтернативный ответ отлично работал в Мондриане с очень небольшими изменениями:

 
WITH 
    MEMBER [Measures].[is2015] AS 
    IIF 
    (
     (
      [CLIENT ID].CurrentMember 
     ,[YEAR].[2015] 
     ) 
     > 0 
    ,"YES" 
    ,"NO" 
    ) 
SELECT 
    NON EMPTY 
    { 
     [Measures].[QUANTITY] 
    ,[Measures].[is2015] 
    } ON COLUMNS 
,NON EMPTY 
    CrossJoin 
    (
     [CLIENT ID].[CLIENT ID].MEMBERS 
    ,{[YEAR].[YEAR].MEMBERS} 
    ) ON ROWS 
FROM [MyCube]; 
+0

Если ваш куб большой, тогда было бы неплохо заменить« NO » "' с 'null'. Меры 'IIF' работают более эффективно, если одна из ветвей разрешается до нуля, поскольку расчет будет разреженным и, следовательно, более быстрым. – whytheq