代码之家  ›  专栏  ›  技术社区  ›  Mark Canlas

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

  •  1
  • Mark Canlas  · 技术社区  · 15 年前

    首先,我对OLAP一点也不熟悉,所以如果术语不适用,请随时提供更正。

    我在读关于OLAP的文章,它似乎都是关于速度的交易空间,在这里你预先计算(或按需计算)并存储关于你的数据的聚合,这些聚合是由特定的维度键控的。我了解这对于具有离散值集的维度是如何工作的,例如男性、女性或Jan、Feb,…12月或@美国州。但是对于具有完全任意值的维度,比如(0,1.25,3.14156,70000.23,…)呢?

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

    如果您有任何其他帮助来了解更多有关OLAP的信息,我们将不胜感激。乍一看,谷歌和So似乎都有点枯燥(与其他更受欢迎的话题相比)。

    编辑:被要求提供一个维度,该维度上有任意值。

    • 实验速度:1.256 m/s,-2.234 m/s,33.78 m/s
    • 交易价值:120.56美元、22.47美元、9.47美元
    2 回复  |  直到 15 年前
        1
  •  3
  •   Steve Broberg    15 年前

    您的速度列和值列示例通常不是要用OLAP方式查询的列类型-它们是您尝试检索的值,并且可能是作为单独的行或聚合的结果集中的值。

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

    解决方案是按照大卫·拉兹尼克所说的去做——你创造了一个价值的“有套”版本。因此,在我们的表中,除了“事件时间”列之外,我们还有一个“事件时间”带括号的列,它只是事件的日期,时间部分是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'
    

    在这些情况下,最终用户永远不会看到事件“时间加括号”列——它只是用于查询优化。

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

        2
  •  1
  •   Arnkrishn    15 年前

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

    查看webcasts部分,在该部分中,您将了解从什么是BI、仓储到设计多维数据集、维度、计算、聚合、关键绩效指标、透视图等各个方面。

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

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

    我希望这有帮助。

    干杯