0

我是数据仓库设计的初学者。我有一些理论,但最近遇到了一个 OLAP 多维数据集设计的实际问题。我使用星型模式。
假设我有 2 个维度表和 1 个事实表:


维度地名录:
维度
_id国家名称
省份名称
地区名称


维度设备:
dimension_id
device_category
device_subcategory


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


一个“业务对象”(实际上是一个雷区)可以有多个设备,位于一个位置(地名词典)并占据 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 是危险对象的第 th 个设备数。例如,上面的数据将给出 18000 平方米。
你将如何解决这个问题?

我正在使用 Pentaho 堆栈。

提前致谢

4

1 回答 1

1

[移自评论]

如果一个 hazard-id 是一个雷区,并且您正在按地区(地名)查看地雷和按地名的雷区大小,也许您可​​以制作一个 Hazard 维度,它包含 Hazard 的区域;或者可能在DeviceDimension表中创建一个Null-device条目,并且只有Null-device条目获取area_m2设置,真实设备获取area_m2=0。

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

我还会考虑添加一个设备计数事实,它可能具有每种危害的每种类型的设备数。

于 2012-04-24T01:22:37.227 回答