Есть ли в MDX общий способ вычисления отношения ячеек к выбранным членам определенной иерархии?

Я хочу определить меру куба в кубе служб аналитики SSAS (многомерная модель), который вычисляет отношения для выбора, который пользователь делает для предопределенной иерархии. Следующий пример иллюстрирует желаемое поведение:

|-City----|---|
| Hamburg | 2 |
| Berlin  | 1 |
| Munich  | 3 |

Это моя базовая таблица. То, чего я хочу достичь, - это кубическая мера, которая вычисляет отношения на основе выбора пользователя. Например, когда пользователь запрашивает Hamburg (2) а также Berlin (1) мера должна возвращать значения 67% (за Hamburg) а также 33% (за Berlin). Однако если Munich (3) добавляется к тому же запросу, возвращаемые значения будут 33% (Hamburg), 17% (Berlin) а также 50% (Munich). Сумма значений всегда должна быть равна 100% независимо от того, сколько элементов иерархии было включено в запрос MDX.

До сих пор я придумал разные меры, но все они, похоже, страдают от одной и той же проблемы, которая заключается в невозможности доступа к контексту всего запроса MDX изнутри ячейки.

Мой первый подход к этому заключался в следующем:

[Measures].[Ratio] AS SUM([City].MEMBERS,[Measures].[Amount])/[Measures].[Amount]

Это, однако, суммирует количество всех городов независимо от выбора пользователей и, тем не менее, всегда возвращает соотношение городов по отношению ко всей иерархии городов.

Я также попытался ограничить участников контекстом запроса, добавив EXISTING ключевое слово.

[Measures].[Ratio] AS SUM(EXISTING [City].MEMBERS,[Measures].[Amount])/[Measures].[Amount]

Но это, кажется, ограничивает контекст ячейкой, что означает, что я получаю 100% в результате для каждой ячейки (потому что EXISTING [City].MEMBERS теперь ограничен ячейкой, он возвращает только город текущей ячейки).

Я также погуглил, чтобы выяснить, возможно ли добавить столбец или строку с итогами, но это также кажется невозможным в MDX.

Самое близкое, что я получил, было со следующей мерой:

[Measures].[Ratio] AS SUM(Axis(1),[Measures].[Amount])/[Measures].[Amount]

Вместе с этим запросом MDX

SELECT {[Measures].[Ratio]} ON 0, {[City].[Hamburg],[City].[Berlin]} ON 1 FROM [Cube]

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

Есть ли другие идеи или подходы, которые могли бы помочь мне определить эту меру?

1 ответ

Я бы сначала определил набор с выбранными городами

[GeoSet] AS {[City].[Hamburg],[City].[Berlin]}

Тогда коэффициент

[Measures].[Ratio] AS [Measures].[Amount]/SUM([GeoSet],[Measures],[Amount])

Чтобы получить отношение этого города к множеству городов. наконец

SELECT [Measures].[Ratio] ON COLUMNS,
[GeoSet] ON ROWS
FROM [Cube]

Всякий раз, когда вы выбираете список городов, измените [GeoSet] на список городов или другие уровни в иерархии, если вы не выберете 2 перекрывающихся значения ([Город]. [Гамбург] и [Регион].[DE6], например).

Другие вопросы по тегам