sql-server - 具有时间序列的 SSAS MDX 中位数
问题描述
我正在尝试计算时间序列监控数据的中位数。
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])
测试发现,根据数据的性质,每分钟的平均值给出了可靠的中位数。因为它是根据聚合而不是原始数据计算的,所以运行速度非常快。
我真的不明白为什么,但它现在可以正确计算日、月和年。
警告:如果我选择一个月中的 5 天,我将获得每天的正确中位数,并且我将获得整个月的正确中位数。(而不是所选 5 天的中位数)。
推荐阅读
- jestjs - 开玩笑 - 我如何导出测试文档以便与同事共享测试?
- node.js - MongoDB TTL - 何时何地?
- android - Android Studio 4 将 kotlin 类代码替换为一些垃圾 XML
- azure - Nginix 超时的最大值是多少
- php - 尝试在 php 字节码中阻止范围信息
- angular - 是否在 Angular 6 中多次加载相同的引导 css 文件会降低性能
- r - 根据条件从辅助数据表采样到主数据表
- python - powerBI使用python脚本导入分组数据
- python - sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 4 个
- python - 在tensorflow函数中使用python列表和numpy数组(使用@tf.function注解)