1

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

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

换句话说:我需要在 SSRS 的 MDX 查询中写入它来告诉我哪些数据是第 25 位、中位数和第 75 位

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

谢谢

4

1 回答 1

0

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

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

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

Numeric_Expression 是求和的度量,然后对这组总和进行排序和评估以找到中位数

在我的情况下,要找到整个数据集的直线中位数,我根本不想对这些值求和。为了防止计算任何总和,我将 key 属性用于具有 1-1 基数的维度与包含我正在使用的度量的事实表中的记录。到目前为止,我看到的唯一缺陷是,有时当记录数为偶数时,中位数会返回一个整数,而两个中间记录的平均值应该会导致一个以 0.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,这应该做同样的事情,只是按升序对数据进行排序,以使用前半部分记录而不是后半部分。不幸的是,我无法从这个函数组合中得到除了 NULL 之外的任何东西,所以我愿意接受关于如何获得第 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]
于 2014-05-15T18:16:28.833 回答