OLAP 如何处理数字范围的维度?

Posted

技术标签:

【中文标题】OLAP 如何处理数字范围的维度?【英文标题】:How does OLAP address dimensions that are numeric ranges? 【发布时间】:2009-07-29 19:33:34 【问题描述】:

首先,我对 OLAP 完全不熟悉,所以如果术语不正确,请随时提供更正。

我正在阅读有关 OLAP 的内容,它似乎都是关于以空间换取速度的内容,您可以在其中预先计算(或按需计算)并存储有关数据的聚合,并按某些维度进行锁定。我了解这对于具有离散值集的维度是如何工作的,例如 Male, Female 或 Jan, Feb, ... Dec 或 @US_STATES 。但是对于具有完全任意值(0, 1.25, 3.14156, 70000.23, ...)的维度呢?

OLAP 的使用是否排除了在命中事实表的查询中使用聚合,还是仅用于绕过可以预先计算的内容?比如,任意值的任意聚合仍然需要即时完成?

我们将不胜感激有关了解更多有关 OLAP 的任何其他帮助。乍一看,Google 和 SO 似乎都有些枯燥(与其他更受欢迎的话题相比)。

编辑:被要求提供任意值的维度。

实验速度:1.256 m/s、-2.234 m/s、33.78 m/s 交易价值:120.56 美元、22.47 美元、9.47 美元

【问题讨论】:

您有没有成员为任意值的维度的示例? 所提供的例子通常是事实或措施。 【参考方案1】:

您的速度和值列示例通常不是您将以 OLAP 方式查询的那种列 - 它们是您尝试检索的值,并且可能位于结果集中,作为单独的行或汇总。

不过,我说的是通常。在我们的 OLAP 模式中,我们有一个您正在考虑的列的一个很好的示例:event_time(一个日期时间字段,精确到秒)。在我们的数据中,它几乎是独一无二的——在同一秒内不会发生两个事件,但是由于我们的表中有多年的数据,这仍然意味着有数亿个潜在的离散值,当我们运行我们的OLAP 查询,我们几乎总是希望基于时间范围进行约束。

解决方案是按照 David Raznick 所说的去做 - 你创建一个值的“分桶”版本。因此,在我们的表中,除了 event_time 列之外,我们还有一个 event_time_bucketed 列——它只是事件的日期,时间部分是 00:00:00。这将不同值的数量从数亿减少到几千。然后,在所有限制日期的查询中,我们同时限制分桶列和真实列(因为分桶列不够准确,无法为我们提供实际值),例如:

   WHERE event_time BETWEEN '2009.02.03 18:32:41' AND '2009.03.01 18:32:41'
     AND event_time_bucketed BETWEEN '2009.02.03' AND '2009.03.01'

在这些情况下,最终用户永远不会看到 event_time_bucketed 列 - 它只是用于查询优化。

对于像您提到的浮点值,分桶策略可能需要更多考虑,因为您希望选择一种可以导致值相对均匀分布并保持连续性的方法。例如,如果您有一个经典的钟形分布(尾部可能很长),您想要定义大部分人口生活的范围(例如,与均值相差 1 或 2 个标准差),将其划分为均匀分布桶,并为“所有较小的”和“所有更大的”再创建两个桶。

【讨论】:

【参考方案2】:

我发现这个链接很方便http://www.ssas-info.com/

查看网络广播部分,他们将引导您了解不同方面,从什么是 BI、仓储到设计多维数据集、维度、计算、聚合、KPI、视角等。

在 OLAP 中,聚合通过具有查询将使用的预先计算的值来帮助减少查询响应时间。然而,另一方面是存储空间的增加,因为除了基础数据之外还需要更多空间来存储聚合。

SQL Server Analysis Services 具有基于使用情况的优化向导,该向导通过分析客户端(报告客户端,如 SQL Server Reporting Services、Excel 或任何其他客户端)提交的查询并相应地优化聚合设计来帮助聚合设计。

我希望这会有所帮助。

干杯

【讨论】:

以上是关于OLAP 如何处理数字范围的维度?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 SCD 类型 2 维度和重复维度记录?

如何处理SCD 2类维和重复维记录?

我应该如何处理 Python 中的包含范围?

Auth0 - 为啥范围不足以及如何处理?

如何处理此索引超出范围错误 (LINGO)

如何处理张量流中0-1范围之外的输入?