如何在百事可乐多维数据集中使用百分位数(假设99%百分位数)?我希望能够使用许多不同的维度和过滤器进行报告,因此在sql中预先计算不是一种选择。
答案 0 :(得分:2)
如果要评估维度上的百分位数,则无需在SQL中预先计算任何内容即可。这可以使用TopPercent和Tail 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维度并使用上面的方法。