我是数据仓库设计的初学者。我有一些理论,但最近遇到了一个 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 堆栈。
提前致谢