2016-06-14 12 views
1

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

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]))** не может найти, где я делаю неправильно для нескольких.

+0

Какая ошибка? Код выглядит хорошо для меня. – SouravA

+0

@SouravA: Ошибка при выполнении запроса. Проверьте журналы сервера или обратитесь к администратору! не удалось выяснить, где я делаю неправильно ..can u help me – sam140

+0

@meff: Пожалуйста, предложите мне любую идею, как мы можем решить эту проблему. – sam140

ответ

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)] 
) 
+0

большое спасибо за ваш быстрый ответ. Я попробовал это, как вы упомянули запрос, но получив неправильный результат, как ожидалось. I не знаю точно, почему я получаю неправильный результат – sam140

+0

Здесь, а не ** Все **, если я передаю любое другое значение, а затем получаю правильный результат. Я не знаю точно, где я делаю неправильно. Не могли бы вы помочь мне – sam140

+0

@ sam140, поэтому, если вы оставите «все», = 'All'' вы получаете сообщение об ошибке, но вы делаете '' All' = 'blahblah'', тогда это нормально? – whytheq