Есть ли в 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], например).