小编典典

在Datawarehouse中处理null

sql

我想请教您有关与数据仓库和SSIS / SSAS有关的处理空值或空数据值的最佳做法是什么。

我有几个事实和维度表,这些表在不同的行中包含空值。

细节:

1) 处理空日期/时间值的最佳方法是什么?我应该在时间或日期维度中添加“默认”行,并且在找到空值时将SSIS指向默认行吗?

2)
处理维数据中的空值/空值的最佳方法是什么。例如:我在“帐户”维度中有一些行,在“帐户名称”列中具有空值(非NULL)。我应该将列内的这些空值或空值转换为特定的默认值吗?

3) 与上述第1点类似-
如果我最后得到一个Facttable行,但其中任一维列中没有记录,该怎么办?如果发生这种情况,我是否需要每个维度的默认维度记录?

4) 关于如何在Sql服务器集成服务(SSIS)中处理这些操作的任何建议或技巧?最好使用最佳数据流配置或最佳转换对象。

谢谢 :-)


阅读 242

收藏
2021-04-22

共1个答案

小编典典

如前一个答案所述,维度的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)

我已经制定了一个规则,即每个维度至少要有一个这样的伪行,以用于维度查找失败的情况,并建立异常报告以跟踪分配给此类行的事实数量。

2021-04-22