如何在 SSAS 多维数据集中使用百分位(比如说 99% 百分位)作为度量?我希望能够使用许多不同的维度和过滤器对其进行报告,因此在 sql 中进行预先计算不是一种选择。
问问题
1713 次
1 回答
2
如果你想评估一个维度的百分位数,那么你可以做到这一点,而无需在 SQL 中预先计算任何东西。这可以使用TopPercent和Tail 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 回答