數據倉庫:空值處理


概述

在OLTP系統中,通常使用空值來表示數據的缺失。這里的空值可能是因為數據還未產生,也可能是因為其本身確實沒有數據。而在OLAP系統中,如果不對空值做處理,可能會導致事實測量不准確等問題的發生。下面將分別討論事實表外鍵空值,事實表屬性空值和維度表屬性空值這三種情況。

事實表外鍵空值

要討論事實表外鍵為空的情況,就要先確定什么原因會導致事實表外鍵為空。下面列出幾個常見的原因:

  1. 外鍵數據暫未產生
  2. 外鍵數據不可用
  3. 外鍵數據獲取異常

首先舉例說一下第一種原因產生空值的情況。例如:在一個訂單系統中產生了一條訂單數據,在這條訂單數據中有下單時間,訂單金額,支付金額,發貨時間等字段。在訂單產生的時候是不會立即發貨的,發貨會在將來的某個時間點完成,因此此時的發貨時間是空值。在這個示例中,發貨日期是日期維度的外鍵,但如果將其保留為空值,則任何來自聯結到發貨日期的日期表的事實報告都會排除掉空發貨日期的所有訂單。因此,建議使用一個代理鍵聯結到日期維度表中的記錄,該記錄用於描述數據是不可用的。
然后再舉例看下第二種原因產生空值的情況。例如:促銷是一個銷售事實表外鍵,由於並不是每條銷售記錄都有與之關聯的促銷。此時,可以使用一個特定的值來表示“沒有與之關聯的促銷”。
最后說一下第三種原因產生空值的情況。這種情況是由於源數據本身導致,可以在處理的時候對數據進行特殊處理。

事實表屬性空值

事實表屬性為空可以分為兩種情況:一種是屬性自身可以是空值;另一種是臟數據。第一種情況不需要做任何處理,因為像是SUM,COUNT,AVG,MAX,MIN等聚合函數自身會正確處理這些空值。第二種情況本身是一個業務數據異常的問題,可以先對該屬性做特殊處理,然后聯系業務系統開發人員修復這種問題。

維度表屬性空值

原則上講,維度表屬性不應該有空值,一旦維度表屬性為空,那么在進行數據的展示的時候,會把數據的標題展示為空格。這會使用戶感到困惑。因此,建議使用一個特殊字符串代替,比如:“未知”或者“未提供”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM