MDX — TopCount плюс «Другое» или «Остальное»

Я создал запрос MDX, который вычисляет ТОП-10 почтовых индексов (согласно моему показателю пребывания пациента) как таковой:

WITH
MEMBER [Discharge Date].[Y-M-D].[ Aggregation] AS 'AGGREGATE( EXISTING { [Current Month] } )', SOLVE_ORDER = 0

SELECT
NON EMPTY { [Measures].[Patient Stays] }
ON COLUMNS,

TOPCOUNT({ ORDER( HIERARCHIZE( { [Patient].[ByZipcode].[All].CHILDREN } ), ( [Measures].[Patient Stays] ), BDESC ) }, 10)
ON ROWS

FROM [Patient Stay]

WHERE ( [Discharge Date].[Y-M-D].[ Aggregation], [Facility].[ByAffiliation].CURRENTMEMBER, [Facility].[ByRegion].CURRENTMEMBER )

Этот запрос используется для заполнения гистограммы PerformancePoint со стопроцентным накоплением. Клиент попросил, чтобы, поскольку это диаграмма, основанная на !00%, мы смешали остальные почтовые индексы в поле «Другое», так что должно быть 11 значений: по одному для каждого из первых 10 и одиннадцатое, которое представляет собой сумму оставшихся почтовых индексов.

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


person Colin    schedule 24.04.2009    source источник


Ответы (1)


Я сделаю все возможное с непроверенным кодом, так что вот:

WITH
MEMBER [Discharge Date].[Y-M-D].[ Aggregation] AS 'AGGREGATE( EXISTING { [Current Month] } )', SOLVE_ORDER = 0

SET [Top10ZipCodes] AS 
    (TOPCOUNT({ ORDER( HIERARCHIZE( { [Patient].[ByZipcode].[All].CHILDREN } ), ( [Measures].[Patient Stays] ), BDESC ) }, 10))

MEMBER [Patient].[ByZipCode].[OtherZipCodes] AS 
    (AGGREGATE({EXCEPT([Patient].[ByZipCode].Members, [Patient].[ByZipCode].[Top10ZipCodes])}))

SELECT
NON EMPTY { [Measures].[Patient Stays] }
ON COLUMNS,

{[Top10ZipCodes], [Patient].[ByZipCode].[OtherZipCodes]}
ON ROWS

FROM [Patient Stay]

WHERE ( [Discharge Date].[Y-M-D].[ Aggregation], [Facility].[ByAffiliation].CURRENTMEMBER, [Facility].[ByRegion].CURRENTMEMBER )

Это создает набор ваших первых 10 почтовых индексов, а затем объединяет (отличается от суммы!!!) все почтовые индексы, за исключением ваших первых 10.

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

С уважением,
Эрик

person Eric    schedule 25.04.2009
comment
Произошла синтаксическая ошибка при создании SET [Patient].[ByZipCode].[Top10ZipCodes]. Мне просто нужно было удалить ссылки на размеры (переименовать SET просто в [Top10ZipCodes]), и это сработало на 100% для меня. Спасибо большое, я даже чувствую, что чему-то научился, что даже лучше, чем просто ответ на вопрос. - person Colin; 28.04.2009
comment
О да. Наверное, я был в настроении ЧЛЕНА. В любом случае, рад, что смог помочь! - person Eric; 28.04.2009
comment
Я должен был убедиться, что в моем случае я выбрал правильный уровень иерархии при запросе членов для исключения [Все], что в противном случае удвоило бы количество в результате. Просто подсказка для тех, кто может столкнуться с этим в будущем. - person carraua; 09.06.2021