2

如何在 SSAS 多维数据集中使用百分位(比如说 99% 百分位)作为度量?我希望能够使用许多不同的维度和过滤器对其进行报告,因此在 sql 中进行预先计算不是一种选择。

4

1 回答 1

2

如果你想评估一个维度的百分位数,那么你可以做到这一点,而无需在 SQL 中预先计算任何东西。这可以使用TopPercentTail MDX 函数的组合来完成。

例如,假设您想通过 [Measures].[Avg Daily Census](我从事医疗保健工作)度量来查找 [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]

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

于 2012-12-20T15:59:41.933 回答