數據完整性在關系數據庫應用的比較廣泛,特別是在OLTP系統中,但在ETL和加載數據到數據倉庫(DW)時,缺乏提供數據完整性的通常處理,然在SSAS中,數據庫管理員可以非常方便的處理這些問題。在SSAS中,可以通過空值處理和錯誤配置來設置數據完整性處理,其中空值處理和錯誤配置都和未知成員有關。下面就未知成員、空處理、錯誤配置的一些基本概念分別介紹。
1、未知成員
SSAS中,維度對象有一個稱為UnknownMember的屬性,它可取的值為:values—None, Hidden, Visible
當為Hidden/Visible值時,SSAS自動的為維度的每一個屬性建立一個稱為 Unknown Member 的成員
當值為Hidden時,指示這個成員將在結果中隱藏
缺省的取值為 None
如果你想改變未知成員的名字,可以修改維度的UnknownMemberName屬性
2、空處理
空處理指定當遭遇空數據時如何處理,它有下面5中可能的值
ZeroOrBlank —這個選擇告訴服務器轉換NULL為0或者空值‘’
Preserve—這個選項告訴服務器保留NULL.服務器會把它當作其他值一樣處理
Error—這個選項告訴服務器說明NULL值為非法的數據項.服務器將產生一個數據完整性錯誤
UnknownMember—這選項告訴服務器以把NULL值作為一個未知的成員處理.但也將產生一個數據完整性錯誤.它只被應用於作為鍵列的屬性
Default—這是一個條件選項,在維度和CUBE中,它的值為ZeroOrBlank,在挖掘結構和模型中,它的值為UnknownMember
3、錯誤配置
在我們討論錯誤配置之前,我們先必須清楚數據完整性可能產生的各種錯誤類型,前面我們已經了解了一些,下面是一個完整的列表
NullKeyNotAllowed—在遭遇空鍵和記錄丟棄時產生錯誤(當NullProcessing = Error時).
NullKeyConvertedToUnknown— 當一個空鍵被轉為未知成員時產生(當 NullProcessing = UnknownMember時).
KeyDuplicate— 當維度的一個屬性鍵存在重復時產生,一旦屬性鍵必須唯一,服務器將丟棄重復記錄
KeyNotFound— 這是一個在關系數據庫中的引用完整性錯誤
錯誤配置是一個統一處理數據完整性錯誤的一個地方,服務器默認有一個缺省配置(在msmdsrv.ini配置文件中指定),它可以指定在數據庫、維度、CUBE、度量、分區中的錯誤處理
有下面屬性可供配置
KeyErrorLogFile— 記錄完整性錯誤到文件
KeyErrorLimit (Default=zero)— 這是一個錯誤的最大限制數,為-1時表沒有限制
KeyErrorLimitAction (Default=StopProcessing)— 這是一個當錯誤限制數到達時采取的動作,可以設置為暫停處理和暫停錯誤記錄
KeyErrorAction (Default=ConvertToUnknown)— 這是一個當遇到KeyNotFound錯誤時采取的動作,可以設置為轉為未知成員和拋棄記錄
NullKeyNotAllowed (Default=ReportAndContinue)
NullKeyConvertedToUnknown (Default=IgnoreError)
KeyDuplicate (Default=IgnoreError)
KeyNotFound (Default=ReportAndContinue)—當遭遇這個錯誤時的處理動作,可為忽略、報告運行、報告暫停
(注意:空處理動作總是在錯誤配置動作之前開始執行)
下面我將以具體實例來介紹如何解決在OLAP加載時碰到的數據完整性問題。以加載死亡率主題分析為基礎,逐步解決發布時碰到的各種問題:
問題1:剛開始發布時碰到的域用戶驗證失敗,不能發布,如圖