在關聯式 OLTP 系統中,外鍵、CHECK 條件、NOT NULL 等約束確保資料完整性;但資料倉庫 ETL 階段常面臨來源系統髒資料、遲到維度、業務例外等情境。SQL Server 2005 Analysis Services (SSAS) 提供維度層面的彈性完整性機制——未知成員、空值處理、錯誤配置,讓 Cube 在載入階段優雅處理異常,而非中斷整批處理。
維度屬性 (Dimension Attribute)
│
├─ UnknownMember 屬性 (None / Hidden / Visible)
│ │
│ ├─ 啟用時自動建立「Unknown Member」
│ └─ UnknownMemberName 可自訂顯示名稱
│
├─ NullProcessing 屬性 (5 種模式)
│ └─ 決定遭遇 NULL 時的轉換/拒收/導向 Unknown 行為
│
└─ ErrorConfiguration 屬性
└─ 控制錯誤列的記錄、繼續/中止、錯誤限制門檻
| 設定值 | 行為 | 適用場景 |
|---|---|---|
| None (預設) | 不建立 Unknown Member,NULL 依 NullProcessing 處理 | 來源資料已嚴格清洗、無遲到維度 |
| Hidden | 建立 Unknown Member,但查詢結果隱藏(不顯示於 UI) | 需維持鍵完整性,但不想暴露給商用使用者 |
| Visible | 建立並顯示 Unknown Member(預設名稱「Unknown」) | 業務需明確追蹤「未歸類」筆數、金額 |
關鍵限制:Unknown Member 僅對鍵屬性生效;非鍵屬性若需類似機制,需自行在 ETL 階段轉換。
屬性 NullProcessing 五種模式:
| 模式 | 行為 | 錯誤事件 | 適用對象 |
|---|---|---|---|
| ZeroOrBlank | NULL → 0 (數值) / '' (字串) | 否 | 度量值、非鍵屬性 |
| Preserve | 保留 NULL,視為獨立值 | 否 | 需區分「無值」與「零/空白」的業務 |
| Error | 視為違規,產生錯誤記錄 | 是 | 嚴格品管、鍵屬性 |
| UnknownMember | 導向 Unknown Member,並產生錯誤 | 是 | 僅限鍵屬性 |
| Default | 條件式:維度/Cube=ZeroOrBlank,採礦=UnknownMember | 視情況 | 不想顯式設定時的預設 |
在維度或分割區層級設定 ErrorConfiguration,控制處理過程中遇到錯誤(含 NullProcessing=Error 產生者)的行為:
ReportAndContinue (預設) / ReportAndStopTrue 視 NULL 鍵為錯誤,False 導向 Unknown Member| 業務情境 | 建議設定組合 | 說明 |
|---|---|---|
| 遲到維度:事實表到達時維度尚未載入 | 鍵屬性:UnknownMember=Visible, NullProcessing=UnknownMember ErrorConfig:KeyErrorAction=ReportAndContinue, KeyErrorLimit=大數值 |
自動歸入 Unknown,後續維度更新時以 ProcessUpdate 修正 |
| 來源系統允許選填欄位 (非鍵) | NullProcessing=Preserve 或 ZeroOrBlank | 視業務是否需分辨「未填寫」與「填 0」 |
| 嚴格帳務 Cube,不容許任何鍵遺漏 | NullProcessing=Error, KeyErrorAction=ReportAndStop | 處理失敗即告警,強制上游修正 |
| 採礦結構訓練資料含 NULL | Default (自動套用 UnknownMember) | 演算法內部處理缺失值 |
ISNULL/COALESCE 處理BLANK()、COALESCE、TREATAS 處理SSAS 2005 的完整性三部曲——未知成員接住遲到鍵、空值處理定義轉換規則、錯誤配置控制容忍度——構建了彈性的載入防護網。正確組合這三項設定,能在不犧牲處理效能的前提下,滿足從「嚴格帳務」到「探勘分析」的多元品質需求。