Упорядочивание по общей вычисляемой мере приводит к бесконечной рекурсии? (многомерные выражения)

Мне нужно написать вычисляемую меру, которая покажет долю Measure1 по сравнению с общей суммой по любому заданному измерению. Мне удалось сделать это так:

CREATE MEMBER CURRENTCUBE.[Measures].[Test] AS
  [Measures].[Measure1] / ( AXIS( 1 ).ITEM( 0 ).DIMENSION.LEVELS( 0 ).ITEM( 0 ), [Measures].[Measure1] )

Но из-за общего характера [Test] невозможно упорядочить измерение по этой мере.

SELECT [Measures].[Measure1] ON 0,
ORDER( [Dimension1].MEMBERS, [Measures].[Test] ) ON 1
FROM [MyCube]

Выполнение приведенного выше кода приводит к следующей ошибке:

Обнаружена бесконечная рекурсия. Цикл зависимостей: Test -> Test.

Что вполне логично — для получения AXIS( 1 ).ITEM( 0 ) нам нужен набор элементов измерения на оси 1, но этот набор невозможно получить, пока элементы не будут отсортированы по [Test].

С другой стороны, если я определяю [Test] как специфичный для некоторого измерения, он работает так, как ожидалось:

CREATE MEMBER CURRENTCUBE.[Measures].[Test] AS
  [Measures].[Measure1] / ( [Dimension1].[All], [Measures].[Measure1] )

Это работает, потому что [Dimension1].[All] обращается к конкретному элементу, не требуя, чтобы ось 1 сначала оценивала его набор элементов.

Есть ли способ сделать эту вычисляемую меру универсальной? Может быть, можно получить [All] элемент текущего измерения другим способом?


person Dmytro Shevchenko    schedule 13.09.2012    source источник


Ответы (1)


Если вы отображаете только одну меру, вы можете переписать свой первый запрос, чтобы избежать ошибки:

SELECT [Measures].[Measure1] ON 0,
ORDER([Dimension1].MEMBERS) ON 1
FROM [MyCube]
WHERE ([Measures].[Test])
person Magnus Smith    schedule 01.10.2012
comment
Я думал, что ORDERтребуется второй аргумент? - person whytheq; 27.08.2015