1

作为序言,我根本不熟悉 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 美元
4

2 回答 2

3

您的速度和值列示例通常不是您将以 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 个标准差),将其划分为均匀分布桶,并为“所有更小”和“所有更大”创建另外两个桶。

于 2009-07-29T21:43:12.693 回答
1

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

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

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

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

我希望这有帮助。

干杯

于 2009-07-29T19:45:37.310 回答