我是数据仓库设计的初学者。我有一些理论,但最近遇到了一个OLAP立方体设计的实际问题。我使用星型模式 假设我有2个维度表和1个事实表:
Dimension Gazetteer:
dimension_id
COUNTRY_NAME
province_name
district_name
尺寸设备:
dimension_id
DEVICE_CATEGORY
device_subcategory
事实表:
gazetteer_id
device_dimension_id
hazard_id(测量栏)
area_m2(度量栏)
“业务对象”(实际上是一个矿场)可以有多个设备,位于一个位置(地名词典)和ocuppies 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 :(得分:1)
[从评论中移出]
如果一个危险区域是一个雷区,那么你正在寻找地雷(公报)和通过地名词典的雷区大小,也许你可以制作一个危险区域,其中包含危险区域;或者可能在DeviceDimension表中创建Null-device条目,只有Null-device条目设置area_m2,实际设备得到area_m2 = 0.
如果您需要回答以下问题:包含设备321的雷区的总面积,第二种方法不会轻易回答这些问题,这表明制定危险维度可能是更好的方法。
我还会考虑添加一个设备计数事实,每个危险可能有每种类型的num设备。