概述
在OLTP系统中,通常使用空值来表示数据的缺失。这里的空值可能是因为数据还未产生,也可能是因为其本身确实没有数据。而在OLAP系统中,如果不对空值做处理,可能会导致事实测量不准确等问题的发生。下面将分别讨论事实表外键空值,事实表属性空值和维度表属性空值这三种情况。
事实表外键空值
要讨论事实表外键为空的情况,就要先确定什么原因会导致事实表外键为空。下面列出几个常见的原因:
- 外键数据暂未产生
- 外键数据不可用
- 外键数据获取异常
首先举例说一下第一种原因产生空值的情况。例如:在一个订单系统中产生了一条订单数据,在这条订单数据中有下单时间,订单金额,支付金额,发货时间等字段。在订单产生的时候是不会立即发货的,发货会在将来的某个时间点完成,因此此时的发货时间是空值。在这个示例中,发货日期是日期维度的外键,但如果将其保留为空值,则任何来自联结到发货日期的日期表的事实报告都会排除掉空发货日期的所有订单。因此,建议使用一个代理键联结到日期维度表中的记录,该记录用于描述数据是不可用的。
然后再举例看下第二种原因产生空值的情况。例如:促销是一个销售事实表外键,由于并不是每条销售记录都有与之关联的促销。此时,可以使用一个特定的值来表示“没有与之关联的促销”。
最后说一下第三种原因产生空值的情况。这种情况是由于源数据本身导致,可以在处理的时候对数据进行特殊处理。
事实表属性空值
事实表属性为空可以分为两种情况:一种是属性自身可以是空值;另一种是脏数据。第一种情况不需要做任何处理,因为像是SUM,COUNT,AVG,MAX,MIN等聚合函数自身会正确处理这些空值。第二种情况本身是一个业务数据异常的问题,可以先对该属性做特殊处理,然后联系业务系统开发人员修复这种问题。
维度表属性空值
原则上讲,维度表属性不应该有空值,一旦维度表属性为空,那么在进行数据的展示的时候,会把数据的标题展示为空格。这会使用户感到困惑。因此,建议使用一个特殊字符串代替,比如:“未知”或者“未提供”。
