由于以前的答案州有可以连接到NULL值的尺寸许多不同的含义,未知的,不适用,未知等,如果它能够在应用程序中添加“来区分他们是有用的伪“维度条目可以提供帮助。
在任何情况下,我会避免有空的事实外键或维度字段,甚至有一个'未知'维值将帮助您的用户定义查询,其中包括数据质量不是100 %(而且从不)。
我一直在使用的一个非常简单的技巧,并没有咬我,但是在T-sql中使用int IDENTITY(1,1)来定义我的维代理键(从1开始,每增加1行)。伪密钥(“不可用”,“未分配”,“不适用”)定义为负整数,并由在ETL过程开始时运行的存储过程填充。
例如一个表创建为
CREATE TABLE [dbo].[Location]
(
[LocationSK] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Abbreviation] [varchar](4) NOT NULL,
[LocationBK] [int] NOT NULL,
[EffectiveFromDate] [datetime] NOT NULL,
[EffectiveToDate] [datetime] NULL,
[Type1Checksum] [int] NOT NULL,
[Type2Checksum] [int] NOT NULL,
) ON [PRIMARY]
和存储的过程来填充该表与
Insert Into dbo.Location (LocationSK, Name, Abbreviation, LocationBK,
EffectiveFromDate, Type1Checksum, Type2Checksum)
Values (-1, 'Unknown location', 'Unk', -1, '1900-01-01', 0,0)
我已规则以具有每个维度,其是至少一种这样的伪行在维度查找失败的情况下使用,并构建异常报告以跟踪分配给这些行的事实数量。
有趣的 - 你遇到过SSAS的问题,以适应负面的身份值?我知道,当我以前有一个0值作为身份时,SSAS很讨厌。 – rrydman 2009-06-12 01:41:39