为DW创建位置维度表;我熟悉日期/时间,但对于我使用这些列的位置:大陆,国家,地区,城市,邮政。现在的问题是,如果记录没有城市或邮政,并且仅以某个地区结束。在DW中,所有记录都有一个城市,但事实表中可能有数据不具备这些数据,因为这些是调查集合中不需要的数据点,那么如何设计此表?我是否需要首先插入只有国家,只有城市,只有邮政等的行,同时保持其余的空白,然后建立像大陆到国家等的关系?
答案 0 :(得分:2)
处理此问题的两种基本方法。
使用未知表示缺失值。因此,每个城市都有一个未知邮政编码,每个地区都有一个未知城市。这样,以region
结尾的位置就有City='unknown' , Postal='unknown'
只需使用所有记录中的列 - 在这种情况下,请删除city
和postal
列。
答案 1 :(得分:0)
@ Darmir的解决方案很有意思,它的最大优点是它将地理数据保存在一个表中,缺点是你会获得大量的“大陆”,“国家”,“地区”,“城市”,“邮政”组合的“未知”记录 - 在ETL期间动态生成,或者作为一次性负载(如果可以最终完成)。
显然这里有一个自然的层次结构,所以我们想尝试使用它。
但另外,我认为构建一些维度表而不是一个维度表可能会很有趣。在最坏的情况下,您可能会将事实表与DimContinent,DimCountry,Dimregion,DimCity和DimPostCode中的每一个一起使用代理键。但是,通过一些分析可能会将这些表格组合在一起。考虑以下问题......
在(2)之后,您可能会发现,如果填写了国家/地区,则归档Continent,否则两者都是未知。这自然会建议一个包含这两个字段的DimCountry表。
你说“在DW中所有记录都有一个城市”,所以如果你能找到一种方法来丰富你的数据(步骤3)那么你就可以生成一个具有(大陆/国家/地区/城市)的DimCity表
当您在多维数据集中公开这些单独的维度时,您将能够将它们构建为层次结构,然后可以在那里轻松使用您的层次结构。
我自己并不完全相信这个解决方案,但我想如果它有所帮助,我会向前推进。
答案 2 :(得分:0)
我在生活中制作了一些位置维度,我目前正在管理一个具有大位置维度的系统。我已经描述了我是如何在博客中制作的。 https://dimensionalmodelingblog.wordpress.com/creating-a-location-dimension-in-a-data-warehouse/
位置维度很棘手,Even Ralph Kimball认识到这是一个挑战(参见构建数据仓库的第10章)。
在你的情况下,你实际上需要5个维度,每个级别一个及其上面的级别(大陆,国家,地区,城市,邮政的一个维度,大陆,国家,地区,城市等的一个维度)当你拥有没有城市信息的数据,您使用区域维度等。
我建议在一个表中创建所有内容并在该表上创建视图,而不是制作5个单独的表,以便只维护一个位置维。
你的桌子看起来像这样 大陆,国家,地区,城市,邮政,Level1Flag,Level2Flag,Level3Flag,Level4Flag,Level5Flag
您的进程会将正确级别的所有条目标记为其值,并将每个级别的第一个条目标记为下一级别的值: 例如,您在美国科罗拉多州有15个城市,每个城市都是4级,第1级是Flages Level3 然后,您的LocationCity视图显示Level4Flag上的前4列和过滤器,您的LocationRegion视图显示Level3Flag上的前3列和过滤器。
然后你可以充分利用两者:维护一个维度表和五个像迷你维度一样运行的角色视图。