MDX - TopCount加上'其他'或'休息'

时间:2009-04-24 20:50:25

标签: mdx performancepoint

我创建了一个MDX查询,根据我的患者住院测量计算TOP 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 )

此查询用于填充PerformancePoint 100%堆积条形图。客户已经问过,因为这是一个基于00%的图表,我们将其余的邮政编码分成“其他”字段,这样就应该有11个值:前10个中的每一个都有一个值,第11个中有一个值是剩余邮政编码的总和。

我是MDX的极端新手,但这并不是说它应该是不可能的。有没有人有任何想法或建议?

1 个答案:

答案 0 :(得分:3)

我会尽力使用未经测试的代码,所以请点击:

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个邮政编码),您可能希望在多维数据集上创建一个集合,您可以在其中重复使用它,而无需更改您拥有的每个MDX查询。

干杯,
埃里克