2012-04-20 125 views
0

我是数据仓库设计的初学者。我有一些理论,但最近遇到了一个OLAP多维数据集设计的实际问题。我使用星型模式。
可以说我有2个维表和1个事实表:sum and distinct-count measures(star schema design koan)


尺寸地名:
dimension_id
COUNTRY_NAME
province_name
district_name


尺寸装置:
dimension_id
DEVICE_CATEGORY
device_subcategory


事实表:
gazetteer_id
device_dimension_id
hazard_id(测量柱)
area_m2(测量柱)


一个“商业对象”(实际上是一个矿场)可以有多个设备,位于一个地点(地名词典)和o个X平方米。
因此,为了知道哪个设备类别有,我创建每各装置中的事实在危险这样的:

+--------------+---------------------+-----------------------+-----------+ 
| gazetteer_id | device_dimension_id | hazard_id    | area_m2 | 
+--------------+---------------------+-----------------------+-----------+ 
| 123   | 321     | 0a0a-502c-11aa1331e98 | 6000  | 
+--------------+---------------------+-----------------------+-----------+ 
| 123   | 654     | 0a0a-502c-11aa1331e98 | 6000  | 
+--------------+---------------------+-----------------------+-----------+ 
| 123   | 987     | 0a0a-502c-11aa1331e98 | 6000  | 
+--------------+---------------------+-----------------------+-----------+ 

我所定义的措施“数危害”为hazard_id的不同计数。
我还将area_m2的总和定义为“占用的总面积”度量。
现在我可以使用维度地名录和设备,并知道给定维度成员有多少危险。
但问题是area_m2:因为它被定义为一个总和,它提供了比实际面积,其中n是危险对象的设备的数个高的值n倍。例如,上面的数据会给18000平方米。
你会如何解决这个问题?

我正在使用Pentaho堆栈。

在此先感谢

+0

如果一个危险标识是一个雷区,并且你正在寻找每个地雷的地雷和大小的地雷,那么也许你可以设置一个危险区域来保存危险区域;或者可能在DeviceDimension表中创建空设备条目,并且只有空设备条目获取area_m2集合,则真实设备获取area_m2 = 0。 – Jamie 2012-04-23 23:57:16

回答

0

如果危险-ID是一个雷区,而你正在寻找矿井逐区(gazetter)&大小的-minefields- [从评论移动]根据地名录,也许你可以做一个危险的维度,其中包含危险区域;或者可能在DeviceDimension表中创建空设备条目,并且只有空设备条目获取area_m2集合,则真实设备获取area_m2 = 0。

如果您需要回答这样的疑问:含设备321雷区总面积,第二种方法是不会轻易回答这些问题,这表明制造危险维度可能是更好的方法。

我也会考虑添加一个设备数量的事实,它可能有每个危险类型的数量设备。

+0

感谢杰米的回应。 – elkarel 2012-04-25 08:09:57

+0

感谢杰米的回应。 选项(1)做一个危险因素:我认为这很难使用,因为没有等级的地区会有很多单个条目(几十个)。 选项(2)与空设备是一个好主意,但你说得对你的例子,我不知道如何实现,至少在pentaho。 选项(3)事实表中的addicional number-of-devices-per-field-count列:我正在考虑它。它可以用作回归总区域,但不适用于请求多个设备的查询... – elkarel 2012-04-25 12:34:09