Допустим, у нас есть куб с измерением «Продуктовый магазин», который имеет 2-х уровневую иерархию:
- Fruits & Vegetables Dep.
- Fruits
- Овощи
- Помидоры
- Огурцы
- Пекарня отд.
- Молочный отд.
Вопрос в том, как добавить уровень иерархии в 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]
Я столкнулся с ошибкой, говорящей о том, что функция перекрестного соединения не может принимать одно и то же измерение «Продуктовый магазин» два раза.