2011-03-13 67 views
1

我有一吨的样品按以下格式:直方图数据仓库

<timestamp> <dim1> <dim2> <dim3> 324 
<timestamp> <dim1> <dim2> <dim3> 3565 
<timestamp> <dim1> <dim2> <dim3> 122 
<timestamp> <dim1> <dim2> <dim3> 2333 

324,3565,...是测量,我想这些存储在数据仓库中。

度量将四舍五入到最接近的一百(300,3600,100,2300)。

我该如何存储并快速创建事实的直方图?

一个坏的方法是在事实表中为每个“桶”(即100,200,300,...)设置一列,然后在每列上使用SUM()来构建直方图。缺点是显而易见的:事实表将是巨大的和非灵活的(范围有限的样本)

任何人有任何聪明的想法?

回答

0

那么,你必须以某种方式离散。一种方法 - 假设您的存储区范围不会频繁更改 - 是在ETL期间添加一个范围为(dimBucket)的表并为每个值分配存储区密钥。如果值范围有变化,则必须重新计算整个事实表以指定新的BucketKeys。所以,这样的事情 - 请注意,ValueRange就像'100-199', '200-299', ...

SELECT 
    ValueRange 
, sum(SaleAmount) AS SaleValue 
, count(1)   AS Transactions 
from factSale AS f 
JOIN dimBucket AS b ON b.BucketKey = f.BucketKey 
GROUP BY ValueRange; 

enter image description here

字符串我觉得很难与通用<dim>, <dim>, <dim>工作,所以我用我自己的例子。

另一种方法是不要在DW级别上考虑它,而要使用分析包。几乎每个分析/数据挖掘软件包都提供了几种类型的离散化。尝试Weka,它是开源的,相当不错; R也很受欢迎。