具有时间序列的 SSAS MDX 中值
SSAS MDX Median with time series
我正在尝试计算时间序列监控数据的中位数。
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]
给出这个:
当月的中位数不能高于 5 天的中位数。
如何让 OLAP 在汇总时选择的时间范围内正确计算中位数? (例如按日和月和年)
会不会是日期和时间维度不同造成的?
编辑:我发现如果我只是一个退化维度 wihc 与事实有 1:1 关系。它可以正确计算月份,但速度非常慢。 (1429行数据2分30秒)
WITH MEMBER [Measures].[Medianx] AS MEDIAN([Data Attributes].[DETL Key].MEMBERS, [Measures].[Total of Values])
但是,如果我尝试按天查询分组,它永远不会完成查询。
我发现我可以使用 DESCENDANTS 函数向下钻取日期和时间维度以获得平均聚合,粒度为每天 1 分钟。
MEDIAN(NonEmptyCrossJoin(DESCENDANTS([Date].[Calendar Date].CurrentMember, , LEAVES), DESCENDANTS([Time].[Time Key].CurrentMember, , LEAVES)), [Measures].[Average Value])
测试发现,考虑到数据的性质,每分钟的平均值给出了可靠的中位数。因为它是根据聚合而不是原始数据计算的,所以运行速度非常快。
我不太明白为什么,但它现在可以正确计算日、月和年。
警告:如果我 select 一个月的 5 天,我将获得每一天的正确中位数,并且我将获得 整个 月的正确中位数. (而不是 5 天 selected 的中位数)。
我正在尝试计算时间序列监控数据的中位数。
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]
给出这个:
当月的中位数不能高于 5 天的中位数。
如何让 OLAP 在汇总时选择的时间范围内正确计算中位数? (例如按日和月和年)
会不会是日期和时间维度不同造成的?
编辑:我发现如果我只是一个退化维度 wihc 与事实有 1:1 关系。它可以正确计算月份,但速度非常慢。 (1429行数据2分30秒)
WITH MEMBER [Measures].[Medianx] AS MEDIAN([Data Attributes].[DETL Key].MEMBERS, [Measures].[Total of Values])
但是,如果我尝试按天查询分组,它永远不会完成查询。
我发现我可以使用 DESCENDANTS 函数向下钻取日期和时间维度以获得平均聚合,粒度为每天 1 分钟。
MEDIAN(NonEmptyCrossJoin(DESCENDANTS([Date].[Calendar Date].CurrentMember, , LEAVES), DESCENDANTS([Time].[Time Key].CurrentMember, , LEAVES)), [Measures].[Average Value])
测试发现,考虑到数据的性质,每分钟的平均值给出了可靠的中位数。因为它是根据聚合而不是原始数据计算的,所以运行速度非常快。
我不太明白为什么,但它现在可以正确计算日、月和年。
警告:如果我 select 一个月的 5 天,我将获得每一天的正确中位数,并且我将获得 整个 月的正确中位数. (而不是 5 天 selected 的中位数)。