MDX查询百分位25、50和75

MDX查询百分位25、50和75,mdx,percentile,Mdx,Percentile,我有一个问题,但我无法找到我想要的答案(无论是在本论坛还是其他论坛): 我需要计算第25个百分位,中位数(第50个百分位)和第75个百分位 换言之:我需要在SSRS中写入MDX查询,以便它告诉我哪些数据是第25位、中位数和第75位 到目前为止,我所能找到的并不是每一个的精确值 谢谢我一直在为自己的数据处理同一问题。我遇到的麻烦是计算中值()函数。下面是我如何解释函数的参数: 微软的定义: 中值(集合表达式[,数值表达式]) 我的解释是: Set_Expression是一组值,用于定义在计算中

我有一个问题,但我无法找到我想要的答案(无论是在本论坛还是其他论坛):

  • 我需要计算第25个百分位,中位数(第50个百分位)和第75个百分位
换言之:我需要在SSRS中写入MDX查询,以便它告诉我哪些数据是第25位、中位数和第75位

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


谢谢

我一直在为自己的数据处理同一问题。我遇到的麻烦是计算中值()函数。下面是我如何解释函数的参数:

微软的定义: 中值(集合表达式[,数值表达式])

我的解释是: Set_Expression是一组值,用于定义在计算中值之前将度量值求和到的粒度

数值_表达式是求和的度量,然后对这组和进行排序和求值以找到中值

在我寻找整个数据集的直接中值的例子中,我根本不想求和这些值。为了防止计算任何和,我对一个维度使用了key属性,该维度与包含我正在使用的度量的事实表中的记录具有1-1基数。到目前为止,我所看到的唯一缺陷是,当记录数为偶数时,有时中位数返回一个整数,而中间两条记录的平均值应导致一个以.5结尾的数字。例如,两条中间记录的值分别为16和17,函数返回的是17,而不是16.5。由于这是一个小缺陷,我现在愿意忽略它

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

WITH MEMBER Measures.[Set Median] AS MEDIAN(
    [Dimension].[Key Attribute].MEMBERS
    ,Measures.[Non-summable Measure]
)
我使用了中位数和TopCount的组合得到了第75个百分位数。我使用TopCount将中位数的设置限制在数据的后半部分,因为TopCount按降序对数据进行排序。我将解释我如何理解TopCount:

微软的定义: TopCount(设置\表达式,计数[,数值\表达式])

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

Count是要从集合返回的元组数

数值_表达式是用于按降序对集合排序的值

我希望中间值函数使用查询中返回的事实表中的最后一半记录,因此我再次使用维度表的键,该维度表与事实表具有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]