如前一个答案所述,维度的Null值可能具有许多不同的含义,未知,不适用,未知等。如果能够在应用程序中区分它们,添加“伪”维度条目会有所帮助,这很有用。
无论如何,我都避免使用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)
我已经制定了一个规则,即每个维度至少要有一个这样的伪行,以用于维度查找失败的情况,并建立异常报告以跟踪分配给此类行的事实数量。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)