使用百分位作为SSAS中的度量

时间:2012-12-17 20:15:07

标签: ssas

如何在百事可乐多维数据集中使用百分位数(假设99%百分位数)?我希望能够使用许多不同的维度和过滤器进行报告,因此在sql中预先计算不是一种选择。

1 个答案:

答案 0 :(得分:2)

如果要评估维度上的百分位数,则无需在SQL中预先计算任何内容即可。这可以使用TopPercentTail MDX函数的组合来完成。

例如,假设您希望通过[Measures]找到[Date]。[Calendar Month]维度属性的第25个百分点。[平均每日人口普查](我从事医疗保健)测量。您可以使用以下查询来执行此操作。

WITH
   MEMBER [Measures].[25th Percentile] AS
      (
         Tail(
            TopPercent(
               [Date].[Calendar Month].[Calendar Month],
               100 - 25,
               [Measures].[Avg Daily Census]
            )
         ).Item(0),
         [Measures].[Avg Daily Census]
      )
SELECT 
   [Measures].[25th Percentile] ON 0
FROM [Census]

此查询使用TopPercent查找[Calendar Month]维度属性中前75%的值,找到沿该集合具有最低值的成员,然后评估该成员的度量。

现在,如果要生成整个百分位数值集,可以使用序列实用程序维度(只是包含数字的维度),或者可以创建包含0-99的自定义百分位数维度。以下查询将生成所有百分比的度量值。

WITH
   MEMBER [Measures].[Percentile] AS
      (
         Tail(
            TopPercent(
               [Date].[Calendar Month].[Calendar Month],
               100 - [Sequence].[Ones].CurrentMember.MemberValue,
               [Measures].[Avg Daily Census]
            )
         ).Item(0),
         [Measures].[Avg Daily Census]
      )
SELECT 
   [Measures].[Percentile] ON 0,
   [Sequence].[Ones].&[0] : [Sequence].[Ones].&[99] ON 1
FROM [Census]

但是,如果您尝试在事实表的粒度上评估百分位数,那么我相信您需要预先计算每个事实行的百分位数值或添加degenerate维度并使用上面的方法。