Мне нужно написать вычисляемую меру, которая покажет долю 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]
элемент текущего измерения другим способом?