СУММА и множественное условие функции IIF в многомерных выражениях

Я написал запрос MDX ниже. Вот что я делаю, пытаясь получить результат tom на основе множественного условия, применяемого в функции IIF:

WITH 
  SET [kpi_study] AS 
    {[study].[study].[BHC June12]} 
  SET [geographic] AS 
    {[territory.market_hierarchy].[state].[MP]} 
  SET [brand] AS 
    {[brand.brand_hierarchy].[brand].[Gold Flake (Unspecified)]} 
  SET [edu12] AS 
    IIF
    (
      'All' = 'All'
     ,[education].[education].MEMBERS
     ,[education].[education].[All]
    ) 
     SET [town] as
    IIF(
        'All' = 'All'
        ,[territory.market_hierarchy].[town_class].MEMBERS
        ,[territory.market_hierarchy].[town_class].[All]
        )
    SET [occp] as
    IIF(
         'All' = 'All'
            ,[occupation].[occupation].MEMBERS
            ,[occupation].[occupation].[All]
       )
    MEMBER [Measures].[t] AS
    SUM(([edu12],[town],[occp]),[Measures].[tom])
SELECT 
  NON EMPTY 
    {[Measures].[t]} ON COLUMNS
FROM [funnel_analysis]
WHERE 
  {[kpi_study]*[geographic]*[brand]}

но получаю некоторую ошибку. Для одной функции iif она работает нормально, то есть: **(SUM([edu12],[Measures].[tom]))** не могу выяснить, где я делаю неправильно для нескольких.


person sam140    schedule 14.06.2016    source источник
comment
В чем ошибка? Код выглядит хорошо для меня.   -  person SouravA    schedule 14.06.2016
comment
@SouravA: ошибка выполнения запроса. Пожалуйста, проверьте журналы сервера или обратитесь к администратору! не могу понять где я делаю не так ..можете мне помочь   -  person sam140    schedule 14.06.2016
comment
@meff: Пожалуйста, предложите мне любую идею, как мы можем решить эту проблему.   -  person sam140    schedule 14.06.2016
comment
Хорошо, эта ошибка не имеет ничего общего с синтаксисом MDX. Если я не ошибаюсь, на диске с вашим файлом данных не хватает места.   -  person SouravA    schedule 14.06.2016
comment
Это может помочь, если вы находитесь на Сайку — groups.google.com/a/saiku.meteorite.bi/forum/#!topic/user/   -  person SouravA    schedule 14.06.2016
comment
@SouravA: Большое спасибо за ваш быстрый ответ. Где я могу узнать объем памяти. Но, насколько я понимаю, вывод очень быстрый, а выполнение строк также очень меньше. я точно не знаю, что происходит   -  person sam140    schedule 14.06.2016
comment
Ты на Сайку? Если да, то посмотрите ссылку выше.   -  person SouravA    schedule 14.06.2016
comment
@SouravA:Да, я на Сайку   -  person sam140    schedule 14.06.2016
comment
Проверьте указанный выше URL. В нем есть некоторая информация по проблеме, с которой вы столкнулись. К сожалению, я никогда не работал над Сайку, так что ничем помочь не могу.   -  person SouravA    schedule 14.06.2016
comment
@SouravA: Спасибо за ваш быстрый ответ. Я прошел по этой ссылке ... но это не решение для перемещения Мондриана с 3 на 4. Но в любом случае спасибо за ваши усилия. Я надеюсь, что в синтаксисе нет ошибок, надеюсь, вы поняли, что я пытаюсь достичь.   -  person sam140    schedule 14.06.2016
comment
@SouravA: могу я получить ваши контактные данные, если вы не возражаете   -  person sam140    schedule 14.06.2016
comment
Давайте продолжим обсуждение в чате.   -  person SouravA    schedule 14.06.2016
comment
@SouravA: да, конечно, давайте начнем .. еще раз спасибо   -  person sam140    schedule 14.06.2016


Ответы (1)


Я бы сделал явное перекрестное соединение. Также, пожалуйста, избавьтесь от тех пользовательских наборов с одним элементом, которые вы создаете - это не стандартная практика - просто поместите их прямо в предложение WHERE.

WITH 
  SET [edu12] AS 
    IIF(
     'All' = 'All'
     ,{[education].[education].MEMBERS}
     ,[education].[education].[All]
    ) 
  SET [town] as
    IIF(
      'All' = 'All'
      ,{[territory.market_hierarchy].[town_class].MEMBERS}
      ,[territory.market_hierarchy].[town_class].[All]
     )
  SET [occp] as
    IIF(
      'All' = 'All'
      ,{[occupation].[occupation].MEMBERS}
      ,[occupation].[occupation].[All]
     )
  MEMBER [Measures].[t] AS
    SUM(
       [edu12]
      *[town]
      *[occp]
      ,[Measures].[tom]
    )
SELECT 
  NON EMPTY 
    {[Measures].[t]} ON COLUMNS
FROM [funnel_analysis]
WHERE 
  (
   [study].[study].[BHC June12]
  ,[territory.market_hierarchy].[state].[MP]
  ,[brand.brand_hierarchy].[brand].[Gold Flake (Unspecified)]
  )

Я бы предпочел попробовать что-то вроде следующего, используя Aggregate:

WITH 
  MEMBER [education].[education].[All].[edu12] AS 
    AGGREGATE(IIF(
     'All' = 'All'
     ,{[education].[education].MEMBERS}
     ,[education].[education].[All]
    )) 
  MEMBER [territory.market_hierarchy].[town_class].[All].[town] as
    AGGREGATE(IIF(
      'All' = 'All'
      ,{[territory.market_hierarchy].[town_class].MEMBERS}
      ,[territory.market_hierarchy].[town_class].[All]
     ))
  MEMBER [occupation].[occupation].[All].[occp] as
    AGGREGATE(IIF(
      'All' = 'All'
      ,{[occupation].[occupation].MEMBERS}
      ,[occupation].[occupation].[All]
     ))
  MEMBER [Measures].[t] AS
    (
       [education].[education].[All].[edu12]
      ,[territory.market_hierarchy].[town_class].[All].[town]
      ,[occupation].[occupation].[All].[occp]
      ,[Measures].[tom]
    )
SELECT 
  NON EMPTY 
    {[Measures].[t]} ON COLUMNS
FROM [funnel_analysis]
WHERE 
  (
   [study].[study].[BHC June12]
  ,[territory.market_hierarchy].[state].[MP]
  ,[brand.brand_hierarchy].[brand].[Gold Flake (Unspecified)]
  )

Пример исследовательского сценария — дает ли он то, что вы ожидаете? Если все в порядке, перейдите к другому фрагменту вашего более сложного сценария:

WITH 
  SET [edu12] AS 
    IIF(
     'All' = 'All'
     ,{[education].[education].MEMBERS}
     ,[education].[education].[All]
    ) 
SELECT 
  [edu12] ON ROWS,
 {[Measures].[tom]} ON COLUMNS
FROM [funnel_analysis]
WHERE 
  (
   [study].[study].[BHC June12]
  ,[territory.market_hierarchy].[state].[MP]
  ,[brand.brand_hierarchy].[brand].[Gold Flake (Unspecified)]
  )
person whytheq    schedule 14.06.2016
comment
Большое спасибо за ваш быстрый ответ. Я пробовал это, как вы упомянули запрос, но получил неправильный результат, как и ожидалось. Я точно не знаю, почему я получаю неправильный результат. - person sam140; 14.06.2016
comment
Здесь вместо Все, если я передаю любое другое значение, то получаю правильный результат. Я точно не знаю, где я делаю неправильно. Не могли бы вы мне помочь? - person sam140; 14.06.2016
comment
@ sam140 sam140, так что если вы оставите 'All' = 'All', вы получите сообщение об ошибке, но если вы сделаете 'All' = 'blahblah', тогда все в порядке? - person whytheq; 14.06.2016
comment
да, если я использую «Все» = «блабла», то получаю правильный результат. Но если я использую «Все» = «Все», то получаю неправильный результат. я не знаю точно, где я делаю неправильно, поэтому, пожалуйста, направьте меня, где я делаю неправильно - person sam140; 14.06.2016
comment
@ sam140 мне немного сложнее помочь - вам нужно разбить скрипт на маленькие кусочки - запустить каждый бит и посмотреть, где он не соответствует вашим ожиданиям - я добавлю пример одного исследовательского сценария. - person whytheq; 14.06.2016
comment
Давайте продолжим обсуждение в чате. - person sam140; 14.06.2016
comment
это дает идеальный результат: С НАБОРОМ [edu12] AS IIF('All' = 'All', {[education].[education].MEMBERS}, [education].[education].[All]) SELECT [edu12] ON СТРОКИ, {[Показатели].[том]} ПО КОЛОННАМ ИЗ [воронка_анализа] ГДЕ ( [исследование].[исследование].[БХК 12 июня] ,[территория.рыночная_иерархия].[штат].[МП] ,[бренд.бренд_иерархия ].[бренд].[Gold Flake (Unspecified)] ) нужна ваша помощь, чтобы добавить больше функций IIF, пожалуйста, помогите мне - person sam140; 14.06.2016
comment
Исследовательский скрипт работает нормально. Не могли бы вы помочь мне добавить еще одну функцию iif, получающую ожидаемый результат? - person sam140; 14.06.2016
comment
Можем ли мы поговорить в личном чате, я объясню свою проблему, если это возможно. - person sam140; 14.06.2016