2011-05-09 78 views
1

为DW创建位置维度表;我很熟悉日期/时间,但是我使用这些列的位置是:大陆,国家,地区,城市,邮政。现在的问题是如果一个记录没有城市或邮政,只有一个地区才结束。在DW中,所有记录都有一个城市,但在事实表中可能有数据,因为这些数据在调查收集时不是必需的数据点,所以如何设计此表?我是否需要首先插入行仅为数,只有国家,只有城市,只有邮政等,而其余的空白,然后建立像大陆到国家等关系?位置维度表

回答

2

两种基本的方式来解决这个问题。

  1. 使用未知缺失值。因此,每个城市有一个未知邮政编码,每个地区都有一个未知城市。这样一来,其与region结尾的位置,具有City='unknown' , Postal='unknown'

  2. 简单地只使用中存在的所有记录列 - 在这种情况下下降citypostal列。

+0

使用“未知”而不是空值确实为需要编写运行即席查询和/或报告的分析师节省了时间。 – Olaf 2011-05-16 21:44:19

+0

这可能是最好的选择 – 2011-05-19 08:32:44

0

@ Darmir的解决方案是有趣的,它的大好处是,它使在一个表中的地理数据,不足之处是,你得到一个非常大的数量与“未知”记录洲,国家,地区,城市,邮政组合 - 既可以在ETL中实时生成,也可以作为一次性装载(如果可以明确地完成)。

显然这里有一个自然的层次,所以我们想尝试和利用它。

但或者,我想这可能是有趣,建设一批维表,而不是仅仅一个。在最糟糕的情况下,您可能会将事实表与替代键分别对应DimContinent,DimCountry,Dimregion,DimCity和DimPostCode。但是有些分析可能会将这些表分类在一起。考虑以下问题...

  1. 是否有任何字段(总是/通常)填写?
  2. 是否有一组字段,如果有人填写,那么其他人也将是?
  3. 您能否获得一些明确的参考数据来加强和填写您的缺失数据?

以下(2)您可能会发现,如果国家/地区已填写,那么欧洲大陆已提交,否则都是未知。这自然会建议包含这两个字段的DimCountry表。如果你可以找到一种方法来丰富你的数据(步骤3),那么你可以生成一个DimCity表,它具有(洲/国家/地区/城市) )。

当你暴露在多维数据集,这些独立的尺寸,你将能够将其纳入一个层次,然后可以使用您的层次结构容易出现。

我不是完全相信自己在这个解决方案中,但想到我会向前扔在情况下,它是帮助。

0

我已经在我的生活中做了一些位置维度,我现在正在管理一个具有较大位置维度的系统。我描述了我是如何在博客中制作的。 https://dimensionalmodelingblog.wordpress.com/creating-a-location-dimension-in-a-data-warehouse/

位置尺寸是棘手的,甚至拉尔夫·金博尔承认,这是一个挑战(请参阅构建数据仓库的第10章)。

在你的情况下,你的实际需要5个维度,每个级别及其以上级别(对于大陆一个维,国家,地区,城市,邮政,一个洲,国家,地区,城市,等等)。当你有没有城市信息的数据,你使用区域尺寸等。

而不是做出5个单独的表,我建议在一个表中创建所有内容并在该表上创建视图,以便只维护一个位置维度。

你的表是这样的 洲,国家,地区,城市,邮政,Level1Flag,Level2Flag,Level3Flag,Level4Flag,Level5Flag

你的进程标志合适的水平,以它的价值的所有条目,而第一每个级别输入到下一级别的值: 例如,您在美国科罗拉多州的15个城市中,每个城市均已升至级别4,并且第一个级别已升至级别3 然后,您的LocationCity视图将显示前4个列和过滤器在Level4Flag上,您的LocationRegion视图显示Level3Flag上的前3列和过滤器。

然后你有两个最好的:一维表维护和5个角色视图像小维度一样操作。