SSAS MDX以时间序列的中位数

问题描述 投票:0回答:1

我正在尝试计算时间序列监视数据的中位数。

OLAP多维数据集具有日期维度(最低级别是日期)和单独的时间维度。 (最低级别为分钟)

我发现它在给定的一天中可以正确计算,但是会汇总月份中的值。 (该月应为〜1.55)

WITH MEMBER [Measures].[Medianx] AS MEDIAN([Time].[Time Key].MEMBERS , [Measures].[Total of Values])      

SELECT NON EMPTY {
[Measures].[Count of Values], 
[Measures].[Minimum Value], 
[Measures].[Maximum Value], 
[Measures].[Total of Values], 
[Measures].[Medianx]
} ON COLUMNS,  

NON EMPTY ( [Date].[Date].[Date].MEMBERS )  ON ROWS 

FROM [Environmental Data]

为此:

enter image description here

本月中位数不能高于5天的中位数。

如何使OLAP在汇总时选择的时间范围内正确计算中位数? (例如,按天年)

可能是由于日期和时间的尺寸不同造成的吗?

编辑:我发现,如果我只是一个绝望的维,那将与事实有1:1的关系。它可以在一个月内正确校准,但速度很慢。 (1429行数据需要2分钟30秒)

WITH MEMBER [Measures].[Medianx] AS MEDIAN([Data Attributes].[DETL Key].MEMBERS, [Measures].[Total of Values])

但是,如果我尝试按天查询分组,它将永远无法完成查询。

sql-server ssas mdx median mdx-query
1个回答
0
投票

我发现我可以使用DESCENDANTS函数向下钻取日期和时间维度,以获取平均汇总,每天的粒度为1分钟。

MEDIAN(NonEmptyCrossJoin(DESCENDANTS([Date].[Calendar Date].CurrentMember, , LEAVES), DESCENDANTS([Time].[Time Key].CurrentMember, , LEAVES)), [Measures].[Average Value])

测试发现,与给定的数据性质相比,每分钟的平均值给出了可靠的中位数。因为它是根据聚合而不是原始数据计算的,所以运行非常快。

我不太清楚为什么,但是现在可以正确地计算日,月和年。

警告:如果我选择每月的5天,我将获得每天的正确中位数,并且我将获得整个月的正确中位数。 (而不是所选5天的中位数)。

© www.soinside.com 2019 - 2024. All rights reserved.