【发布时间】:2014-05-15 19:29:13
【问题描述】:
我试图在我的多维数据集中找到中位数、第 25 个百分位和第 75 个百分位作为计算。我正在评估的值是不可求和的,因为它们代表了人们的年龄,所以我使用以下函数来查找中位数:
WITH MEMBER Measures.[Set Median] AS MEDIAN(
[Dimension].[Key Attribute].MEMBERS
,Measures.[Non-summable Measure]
)
维度键和事实表键具有 1-1 的关系,因此作为一个集合的键成员允许我找到所有返回记录的中位数,而无需任何求和。我已经使用以下函数组合成功找到了第 75 个百分位数:
MEMBER Measures.[75th Percentile] AS MEDIAN(
TOPCOUNT(
[Dimension].[Key Attribute].MEMBERS
,Measures.[Fact Table Record Count] / 2
,Measures.[Non-summable Measure]
)
,Measures.[Non-summable Measure]
)
由于 TopCount 按降序对集合进行排序,因此我可以通过查找记录上半部分的中位数来找到第 75 个百分位数。基于这个逻辑,我试图通过使用 BottomCount 函数以相同的方式找到第 25 个百分位数,因为它按升序对集合进行排序。但是,对于第 25 个百分位计算,我只在查询中返回 NULL。这是函数组合和我的最终查询:
MEMBER Measures.[75th Percentile] AS MEDIAN(
BOTTOMCOUNT(
[Dimension].[Key Attribute].MEMBERS
,Measures.[Fact Table Record Count] / 2
,Measures.[Non-summable Measure]
)
,Measures.[Non-summable Measure]
)
SELECT
{
Measures.[Set Median]
,Measures.[25th Percentile]
,Measures.[75th Percentile]
} ON 0
,[Date Dimension].[Calendar Hierarchy].Year.&[2011]:[Date Dimension].[Calendar Hierarchy].Year.&[2014] ON 1
FROM [Cube]
WHERE
[Age Dimension].[Age in Years Hierarchy].[Age Year].&[0]:[Age Dimension].[Age in Years Hierarchy].[Age Year].&[5]
我不明白为什么我在使用 Median 和 TopCount 函数对第 75 个百分位的相反情况没有遇到问题时,使用 Median 和 BottomCount 函数返回 NULL。我检查了 SQL 数据库中的数据集,我的度量值都不是 NULL。如果有人对 BottomCount 函数有更好的理解,我感谢任何清晰的解释或替代方法来帮助我在 MDX 中找到正确的 25th Percentile。谢谢!
【问题讨论】:
-
首先,有不止一种百分位数可用。你确定你想要哪一个了吗?接下来,为什么数字代表年龄这一事实会使它们无法求和?
-
百分位数是指在该人口百分比点发现的中位数。例如,正常中位数是第 50 个百分位数。关于不可求和的年龄,我不会在报告中使用 3,000 人的年龄总和,因为它没有用,但中位年龄以及各个百分位点的中值可能有用。百分位数是我们的统计学家使用的术语,所以希望我在这里正确使用它。
-
几年前我尝试过类似的事情并放弃了 - MDX 是如此晦涩难懂。我更喜欢 SQL 解决方案,例如sqlmag.com/sql-server-2012/…(如果您有 SQL 2012+,请参阅解决方案 2 或解决方案 3)。