MDX查询百分位数25,50和75

时间:2013-04-18 15:12:29

标签: mdx percentile

我有一个问题,我无法找到答案(无论是在这个论坛还是其他论坛)我正在寻找:

  • 我需要计算第25百分位数,中位数(第50百分位数)和第75百分位数。

换句话说:我需要在SSRS中写入MDX查询,告诉我哪个数据是第25个,中位数和第75个

到目前为止我能找到的并不是每个人的确切价值

感谢

1 个答案:

答案 0 :(得分:0)

我一直在为自己的数据处理同样的问题。我遇到的麻烦在于找出Median()函数。以下是我如何解释函数的参数:

微软的定义: MEDIAN(Set_Expression [,Numeric_Expression])

我的解释: Set_Expression是一组值,用于定义在评估中位数之前将度量求和的粒度

Numeric_Expression是求和的度量,然后对这组求和进行排序和求值以找出中位数

在我查找整个数据集的直线中位数的情况下,我根本不想对这些值求和。为了防止计算任何总和,我使用了具有1-1基数的维度的键属性,其中事实表中的记录包含我使用的度量。到目前为止我唯一看到的缺陷是,当存在偶数个记录时,有时中位数会返回整数,而两个中间记录的平均值应该会产生以.5结尾的数字。例如,两个中间记录的值是16和17,函数返回17而不是16.5。由于这是一个小缺陷,我现在愿意忽略它。

这是我用中位数函数计算的结果:

WITH MEMBER Measures.[Set Median] AS MEDIAN(
    [Dimension].[Key Attribute].MEMBERS
    ,Measures.[Non-summable Measure]
)

我使用Median和TopCount的组合来获得第75个百分点。我使用TopCount将中位数的设置限制为数据的后半部分,因为TopCount按降序对数据进行排序。我将解释我对TopCount的理解:

微软的定义: TopCount(Set_Expression,Count [,Numeric_Expression])

我的解释: Set_Expression是一组值,从中返回所需的元组数

Count是从集合

返回的元组数

Numeric_Expression是将用于按降序对集合进行排序的值

我希望Median函数使用查询中返回的事实表中记录的后半部分,因此我再次使用具有1-1基数的维度表的键和事实表按照我想要找到中值的度量进行排序。

以下是我对会员进行编码的方式:

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]
)

到目前为止,这些功能组合已经从我的数据集中返回了真正的第75个百分点。为了获得第25个百分点,我尝试用BOTTOMCOUNT替换我的代码中的TOPCOUNT,它应该做同样的事情,只按升序排序数据以使用前半部分而不是后半部分。不幸的是,我从这个功能组合中得不到任何东西,所以我对如何获得第25个百分位的建议持开放态度。

这是我最终查询的外观:

SELECT
    {
        Measures.[Set Median]
        ,Measures.[25th Percentile]
        ,Measures.[75th Percentile]
    } ON 0
    ,[Dimensional row members here] ON 1
FROM [Cube]
WHERE
    [Non-axis dimensional filter members here]