如何从两个不同的维度创建层次结构?

时间:2016-02-16 17:38:31

标签: sql tsql data-warehouse ssas-2012

我的数据源DimAddress和DimGeoInforamtion中有两个维度。如果我想从地址表中使用Hierarchy,我将从DimAddress表中获取地址,城市和邮政编码,但我将从DimGeoInformation表中获取状态。如何在它们之间创建层次结构>?

CREATE TABLE DimAddress
(
    [AddressID] [int]IDENTITY(1,1) NOT NULL,
    [Address] [varchar](MAX) NULL,
    [ZipCode] [Varchar(5)] NULL,
    [AddressSpatialID] [int] NULL,      
    [City] [varchar](50) NULL,
    [CitySpatialID] [int] NULL,
    [CityID] [int] NOT NULL
)

CREATE TABLE DimGeoInformation
(
    [CountyID] [int] IDENTITY (1,1) NOT NULL,
    [County] [varchar](50) NULL,
    [CountySpatialID] [bigint] NULL,    
    [StateID] [tinyint] NOT NULL,
    [State] [varchar](25) NOT NULL,
    [RegionID] int
    [RegionName] varchar(50)    
)

1 个答案:

答案 0 :(得分:1)

您正在尝试规范化星型模式。存在的诱惑是因为你想要不想复制数据,但这是数据仓库的权衡。

如果你想这样做,最好的方法是'雪花'你的星型模式。您必须将事实表连接到Address维度,并具有从地址维度到GeoInformation表的标准关系数据库样式连接。您需要在地址维度中为GeoInformation表提供外键。

我建议采用另一种方法:所有这些字段在单个维度表中以及任何其他联系人详细信息/位置相关字段中都会更好。这会在低基数字段(例如“状态”)上花费一些磁盘空间,但与事实表的大小相比,这应该可以忽略不计。

使用更少的表,更少的连接和更少的键,这种方法几乎总是更简单,更快。