2015-06-01 5 views
0

Допустим, у нас есть куб с Dimention «Продуктовый магазин», который имеет иерархию 2 уровня:MDX: генерировать уровень иерархии в рамках отчета RDL

  • Фрукты & Овощи DEP.
    • Фрукты
    • Овощи
    • помидоры
    • Огурцы
  • Bakery Dep.
  • Молоко.

Вопрос заключается в том - как я могу добавить уровень иерархии в пределах MDX запроса RDL-отчета, так что «Томаты» и члены «Огурцы» переедет в новый 3-го уровня в нативных 2-го уровня «Овощи». Мне нужно сделать это без каких-либо изменений в Cube, все с помощью только чистого mdx.

Когда я попытался построить расчетный набор для желаемого 3-го уровня и использовать его вместе с остальной частью исходной иерархии, как это:

WITH SET [Level 3] AS 
    case 
    when [Grocery store].[Hierarchy].[Level 2].CURRENTMEMBER = [Grocery store].[Hierarchy].&[Tomatoes] OR 
     [Grocery store].[Hierarchy].[Level 2].CURRENTMEMBER = [Grocery store].[Hierarchy].&[Cucumbers] 
    then [Grocery store].[Hierarchy].[Level 2].CURRENTMEMBER 
    else null end 

SELECT {[Measures].[Sales]} ON COLUMNS, 

CrossJoin(Hierarchize({[Grocery store].[Hierarchy].[Level 2]} 
         -{[Grocery store].[Hierarchy].&[Tomatoes], 
         [Grocery store].[Hierarchy].&[Cucumbers]}), 
      [Level 3]) ON ROWS 

FROM [CUBE] 

я столкнулся с рассказывающим об ошибке, что функция декартова не может принимать одно в том же размере «Продуктовый магазин» два раза.

+0

Ваша цель - присоединиться к двум членам Tom & Cuc с членами Level2? Если это то, чего вы хотите достичь, вы можете создать пользовательские элементы в другом измерении, которые равны Tom & Cuc, а затем перекрестно присоединить эти новые пользовательские элементы к Level2 .... но если вы хотите сделать новый уровень в сценарий MDX, тогда это невозможно. – whytheq

ответ

1

Создание нового уровня на лету не представляется возможным.

Не очень, но один способ обойти это - создать пару новых вычисляемых элементов в некотором неродственном измерении, а затем перекрестно присоединиться к уровню два.

WITH 
    MEMBER [Geography].[Tomatoes] AS ([Geography].[All],[Grocery store].[Hierarchy].&[Tomatoes]) 
    MEMBER [Geography].[Cucumbers] AS ([Geography].[All],[Grocery store].[Hierarchy].&[Cucumbers]) 
    SET [Level 3] AS 
    { 
     [Geography].[Tomatoes], 
     [Geography].[Cucumbers] 
    }  
SELECT 
    {[Measures].[Sales]} ON COLUMNS, 
    CrossJoin(
    Hierarchize( 
     {[Grocery store].[Hierarchy].[Level 2]} 
     {[Grocery store].[Hierarchy].&[Tomatoes], 
     [Grocery store].[Hierarchy].&[Cucumbers]} 
    ) 
    ,[Level 3] 
    ) ON ROWS 
FROM [CUBE] 
+0

Это интересная идея. Я попробовал ваш код. Tom & Cuc вычисляет членов в несвязанном измерении, создаются успешно, как это сделал расчетный набор [Уровень 3], но окончательное скрещивание этого [Уровень 3] с иерархией куба [Уровень 2] возвращает нулевые строки. Я чувствую, что ваше предложение действительно то, что я искал, и сейчас я очень близок к решению. Я буду продолжать копать код и публиковать здесь результат, если есть – Globe

+0

@Globe хорошие новости - получайте удовольствие! – whytheq

+1

после нескольких попыток заполнения пустых ячеек данными - я сдался и оставил оригинальную гиарорхию в своем отчете, просто сделал размер шрифта жирным шрифтом для фрутитов и овощей - в сетке rdl. Тем не менее, я считаю, что @whytheq дал мне правильное направление для дальнейших попыток. – Globe