關係數據庫中數據完整性機制成熟(OLTP),但 ETL 載入數據倉庫(DW)時常缺乏標準化處理。SSAS(SQL Server Analysis Services)提供聲明式完整性處理,核心圍繞未知成員展開,包含空值處理與錯誤配置兩大維度。
維度屬性 UnknownMember 可取值:
None(預設):不建立未知成員Hidden:自動建立但結果中隱藏Visible:自動建立且顯示可通過 UnknownMemberName 自定義顯示名稱。
遭遇 NULL 時的 5 種處理模式:
| 選項 | 行為 | 適用場景 |
|---|---|---|
ZeroOrBlank | NULL → 0 或空字串 | 度量值、屬性填充 |
Preserve | 保留 NULL,視同普通值 | 需區分「無值」與「零值」 |
Error | 視為非法,拋出完整性錯誤 | 嚴格數據質量管控 |
UnknownMember | 歸屬未知成員,並產生錯誤 | 僅限鍵屬性 |
Default | 條件選項:維度/Cube 用 ZeroOrBlank,挖掘模型用 UnknownMember | 快速上手 |
完整錯誤類型譜系:
NullKeyNotAllowed:空鍵遭遇且 NullProcessing=Error 時NullKeyConvertedToUnknown:空鍵轉未知成員且 NullProcessing=UnknownMember 時KeyDuplicate:屬性鍵重複,服務器捨棄重複行KeyNotFound:關係型引用完整性錯誤(外鍵掛空)配置層級:數據庫、維度、Cube、度量、分區均可獨立配置。預設配置於 msmdsrv.ini。
| 屬性 | 說明 | 預設值 |
|---|---|---|
KeyErrorLogFile | 錯誤日誌文件路徑 | - |
KeyErrorLimit | 最大錯誤容忍數,-1 為無限制 | 0 |
KeyErrorLimitAction | 達限動作:暫停處理/暫停記錄 | StopProcessing |
KeyErrorAction | KeyNotFound 處理:轉未知成員/捨棄記錄 | ConvertToUnknown |
NullKeyNotAllowed | 空鍵不允許時動作 | ReportAndContinue |
NullKeyConvertedToUnknown | 空鍵轉未知成員時動作 | IgnoreError |
KeyDuplicate | 鍵重複時動作 | IgnoreError |
KeyNotFound | 鍵未找到時動作 | ReportAndContinue |
執行順序鐵律:空值處理動作 總在 錯誤配置動作之前執行。
下文將以「死亡率主題分析」為例,逐步解決發布過程中的實際完整性問題。首個問題:域用戶驗證失敗導致無法發布(見圖)。
