MDX - TopCount بالإضافة إلى "الآخر" أو "الباقي"
-
16-09-2019 - |
سؤال
لقد قمت بإنشاء استعلام MDX الذي يحسب أعلى 10 zipcodes (وفقا لقياس مريئي البقاء) على هذا النحو:
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 )
يستخدم هذا الاستعلام لملء مخطط شريط الأداء بنسبة 100٪ من الأداء. لقد طلب العميل أنه نظرا لأن هذا هو الرسم البياني مقرا له! 00٪، فإننا نكتسم بقية الرموز البريدية في حقل "آخر"، بحيث يجب أن يكون هناك 11 قيم: واحد لكل من أعلى 10، وحادي عشر هو مجموع الرموز البريدية المتبقية.
أنا مبتدئ متطرف إلى MDX، لكن هذا لا يتعين على أنه يجب أن يكون مستحيلا. هل هناك أحد لديه فكرة أو إقتراح؟
المحلول
سأبذل قصارى جهدي مع كود غير مختبر، لذلك سيندم هنا:
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 رموز zip الخاصة بك، ثم المجاميع (مختلفة عن مجموع !!!) جميع رموز البريدية، باستثناء أعلى 10.
أيضا، إذا كانت هذه مجموعة مشتركة (أعلى رموز ZIP 10)، فقد ترغب في إنشاء مجموعة على المكعب، حيث يمكنك إعادة استخدام تكنولوجيا المعلومات، دون الحاجة إلى تغيير كل استعلام MDX لديك.
هتافات،
إريك