总和和不同计数措施(星型模式设计公案)
Posted
技术标签:
【中文标题】总和和不同计数措施(星型模式设计公案)【英文标题】:sum and distinct-count measures (star schema design koan) 【发布时间】:2012-04-20 08:42:41 【问题描述】:我是数据仓库设计的初学者。我有一些理论,但最近遇到了一个 OLAP 多维数据集设计的实际问题。我使用星型模式。 假设我有 2 个维度表和 1 个事实表:
维度地名录: 维度ID 国家名称 省名 区名
次元装置: 维度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 堆栈。
提前致谢
【问题讨论】:
如果一个 hazard-id 是一个雷区,并且您正在查看 mines-per-gazetter & size-of-minefields-by-gazetteer,也许您可以创建一个 Hazard 维度,其中包含危险区域;或者可能在DeviceDimension表中创建一个Null-device条目,并且只有Null-device条目获取area_m2设置,真实设备获取area_m2=0。 【参考方案1】:[从评论中移出]
如果一个 hazard-id 是一个雷区,并且您正在查看按地区(地名)和大小地名的雷区,也许您可以创建一个 Hazard 维度,其中包含危险;或者可能在DeviceDimension表中创建一个Null-device条目,并且只有Null-device条目获取area_m2设置,真实设备获取area_m2=0。
如果您需要回答以下问题:包含设备 321 的雷区总面积,则第二种方法不会轻易回答这些问题,这表明制定危险维度可能是更好的方法。
我还会考虑添加一个设备计数事实,它可以包含每种危害的每种类型的设备数。
【讨论】:
感谢杰米的回复。选项(1)创建一个危险维度:我相信它会很难使用,因为没有层次结构的区域(成千上万)会有很多单个条目。带有空设备的选项(2)是一个好主意,但是您的示例是对的,我不知道如何实现,至少在 pentaho 中。事实表中的选项 (3) addical number-of-devices-per-field-count 列:我正在考虑它。它可以作为总面积的反向划分,但不适用于请求多个设备的查询...以上是关于总和和不同计数措施(星型模式设计公案)的主要内容,如果未能解决你的问题,请参考以下文章