BI概念:
商業智能(Business Intelligence 簡稱BI),指數據倉庫相關技術與應用的通稱。指利用各種智能技術,來提升企業的商業競爭力。是幫助企業更好地利用數據提高決策質量的技術,包含了從數據倉庫到分析型系統等。這些分析有財務管理、點擊流(Clickstream)分析、供應鏈管理、關鍵績效指標(Key Performance Indicators, KPI)、客戶分析等。
BI實際上是幫助企業提高決策能力和運營能力的概念、方法、過程以及軟件的集合,其主要目標是將企業所掌握的信息轉換成競爭優勢,提高企業決策能力、決策效率、決策准確性。
確切地講,BI並不是一項新技術,它將數據倉庫(DW)、聯機分析處理(OLAP)、數據挖掘(DM)等技術與客戶關系管理(CRM)等結合起來應用於商業活動實際過程當中,實現了技術服務於決策的目的;Mark Hammond從管理的角度看待BI,認為BI是從“根本上幫助你把公司的運營數據轉化成為高價值的可以獲取的信息(或者知識),並且在恰當的時間通過恰
當的手段把恰當的信息傳遞給恰當的人”。
BI測試:
BI定義 BI是Business Intelligence簡稱,中文釋為商業智能,又稱商務智能。通常理解為將企業中現有的數據轉化為知識,幫助企業做出明智的業務經營決策的工具。商業智能的概念於是1996年由加特納集團(Gartner Group)最早提出:“商業智能描述了一系列的概念和方法,通過應用基於事實的支持系統來輔助商業決策的制定。商業智能技術提供企業迅速分析數據的技術和方法,包括收集、管理和分析數據,將這些數據轉化為有用的信息,然后分發到企業各處。” 目前,學術界對商業智能的定義並不統一。


BI的發展趨勢:
- 功能上具有可配置性、靈活性、可變化性
- 從單獨的商業智能向嵌入式商業智能發展
- 從傳統功能向增強型功能轉變
- 加強了績效管理功能
- 產品模塊的集成
- 加強處理結構化和非結構化數據的能力
- 加強了預測分析功能
國際BI廠商

BI測試范圍:
- 數據源—數據倉庫:增量、全量數據加載測試;
- 數據倉庫—數據集市:基礎層腳本測試、應用腳本測試、任務/作業調度測試;
- 數據集市—前端展現:前端展現測試、業務驗證測試。
數據倉庫測試(以HOLAP數據倉庫測試為例):后台數據庫的測試 結構測試(分為3部分)
-
測試表是否存在:使用測試用 例(Test Case)如下SQL所示: 如果運行結果返回0,則說明目的表不存在與當 前后台數據庫中,如果返回值為1,則表明目的表存在於當前后台數據庫中。 Select Count(1) from dbo.sysobjects where id = object_id(N’表名’ ) and objectproperty(id, N’IsuserTable’) =1測試表是否完整正確:表的完整性測試主要是指表的結構必須和ER 圖相一致,在這個測試部分必須測試 以下幾個部分: 首先,需要驗證目的表的字段是否和ER圖相同,目的表不能增加也不能丟失任何 字段; 其次,需要對每一個字段的數據類型進行驗證,如INT不能是BIGINT類型,或者 CHAR不能是VARCHAR類型;再次,對每一個數據類型的長度進行驗證,數據類型 長度太長會降低系統的性能,而數據類型太短則會影響數據的精度。最后,必須對每一個字段的約束進行驗證,如該字段是否允許為空,是否是能自增 長等。 在SQL2000系統中,可以使用“SP_HELP 表名”得到測試表的結構信息。
- 測試表的主外鍵是否正確: 眾所周知,表的主鍵是定義了表的記錄完整性,而外鍵則表明了參照完整性,因而 表的主外鍵在表中是非常重要的,所以必須單獨從其它測試部分分離出來,作為一 個獨立的測試模塊進行驗證。 同樣,在SQL2000系統中,可以使用“SP_HELP 表名”得到測試表的主鍵和外鍵的 信息。 關系測試 數據倉庫中各種表之間存在這一種關系。這種關系即是人們早已熟知的“參照完整性”。“參照完整性”測試是數據倉庫測試的一個重要模塊。“參照完整性”也稱為“引用完整性”(在本文中統一稱為參照完整性),參照完整性指添加,修改或刪除記錄時,表間的關聯性不可破壞。在SQL Server中,參照完整性基於主鍵與外鍵或唯一鍵(Unique)與外鍵的關系。參照完整性確保在各個關聯的表中的值是一致的【1】。 對於數據倉庫,存在着事實表(Fact Table)和維度表(Dimension Table),如果刪除維度表中的某條記錄,那么對應的事實表也必須刪除相關記錄, 如果事實表插入新的記錄,那么維度表也必須插入相關的記錄。
如下圖所示,有一個事實表和五個維度表(維度表A,維度表B,維度表C,維度表D,維度表E),這六個表通過主外鍵關系相關聯。事實表和維度表A通過A_ID建立參照完整性的關系;同樣,事實表和維度表B通過B_ID建立參照完整性的關系;事實表和維度表C通過C_ID建立參照完整性的關系;事實表和維度表D通過D_ID建立參照完整性的關系;事實表和維度表E通過E_ID建立參照完整性的關系。因此,作為測試人員必須至少寫5個測試用例來測試這個參照完整性。

可以用如下5個測試用例來驗證上圖中數據倉庫的星型模型中事實表和維度表的參照完整性: • Select count (1) from 事實表nolock where A_ID not in (select A_ID from 維度表A nolock) Select count (1) from 事實表nolock where B_ID not in (select B_ID from 維度表B nolock) Select count (1) from 事實表nolock where C_ID not in (select C_ID from 維度表C nolock) Select count (1) from 事實表nolock where D_ID not in (select A_ID from 維度表D nolock) Select count (1) from 事實表nolock where E_ID not in (select A_ID from 維度表E nolock) 如果以上5個測試用例返回不等於0的值,則說明不滿足參考完整性,前端立方體(Cube)必定會刷新失敗。
數據測試:數據倉庫的核心是大量的數據,數據在進入數據倉庫之前必須對數據進行預處理,包括抽取,轉換和加載(ETL)。測試人員必須測試這些數據是否准確,精度是否丟失,是否符合需求說明。如下圖中一個簡單的數據轉換和傳輸例子,數據源的數據必須經過稍微的變換后加載到目的表中。數據源的字段A和關聯表關聯后得到字段A1加載到目的表中,其他數據源字段B,C ,D和Value1,Value2,Value3直接加載到目的表的B,C ,D和Value1,Value2,Value3。

可以用如下幾個測試用例來驗證上圖中數據倉庫的數據傳輸后的數據准確性: Select count(1) from 數據源 inner join 關聯表 on數據源 .A =關聯表.A Inner join 目的表 on關聯表.A1 =目的表A1 And 數據源.B=目的表.B And 數據源.C =目的表.C Where 數據源.Value1 <>目的表.Value1 Select count(1) from 數據源 inner join 關聯表 on數據源 .A =關聯表.A Inner join 目的表 on關聯表.A1 =目的表A1 And 數據源.B=目的表.B And 數據源.C =目的表.C Where 數據源. Value2 <>目的表.Value2 Select count(1) from 數據源 inner join 關聯表 on數據源 .A =關聯表.A Inner join 目的表 on關聯表.A1 =目的表A1 And 數據源.B=目的表.B And 數據源.C =目的表.C Where 數據源.Value3 <>目的表.Value3 Select count(1) from 數據源 inner join 關聯表 on數據源 .A =關聯表.A Inner join 目的表 on關聯表.A1 =目的表A1 And 數據源.B=目的表.BAnd 數據源.C =目的表.C Where 數據源.Value4 <>目的表.Value4 或者可以用一個SQL語句實現如上所有的功能: Select count(1) from 數據源 inner join 關聯表 on數據源 .A =關聯表.A Inner join 目的表 on關聯表.A1 =目的表A1 And 數據源.B=目的表.B And 數據源.C =目的表.C Where 數據源.Value1 <>目的表.Value1 Or 數據源.Value2 <>目的表.Value2 Or數據源.Value3 <>目的表.Value3 Or 數據源.Value4 <>目的表.Value4 對於精度誤差問題,可以用“ ABS(數據源.Value -目的表.Value) <0.001” (注:假設0.001是允許誤差)來代替“數據源.Value <>目的表.Value” 如果以上測試用例返回不等於0的值,則說明數據傳輸和轉換失敗或錯誤。
數據倉庫測試(以HOLAP數據倉庫測試為例):
前台立方體的測試
維度測試
1、維度結構測試

以地理維度為例子,見圖2.1,該維度有3個級別,分別是Big Area Name,Region Name和Country Medium Name。因此,對結構的測試分為2個小部分: 按照需求說明書驗證該維度是否是3個級別,在驗證每個級別是否和需求一致。 必須驗證有無拼寫錯誤。
2、維度數據測試

對於每一個級別,必須要驗證數據的准確性,所以,對於Big Area Name,必須在 后台數據庫中運行如下SQL語句: Select distinct [Big Area Name] from GeographyDim nolock 把得到的結果和如下圖2.2.1維度值展示紅色部分的結果進行比較,如果一致則說 明Big Area Name沒有錯誤。 接下來進行Region Name的測試,必須在后台數據庫中運行如下SQL語句:
elect distinct [Region Name] from GeographyDim nolock where [Big Area Name] = ‘N.America’ 把得到的結果和如下圖2.2.1維度值展示綠色部分的結果進行比較,如果一致則說 明Region Name沒有錯誤。 最后進行Country Medium Name的測試,必須在后台數據庫中運行如下SQL語句: Select distinct [Country Medium Name] from GeographyDim nolock where [Big Area Name] = ‘N.America’ And Region Name = ‘Canada’ 把得到的結果和如下圖2.2.1維度值展示藍色部分的結果進行比較,如果一致則說 明Region Name沒有錯誤。
3、級別間關系測試
眾所周知,數據倉庫一般會有很多個數據源,因此常常會遇到這樣一個問題,某個 國家在A系統屬於亞洲部分,在B系統屬於歐洲部分,但在數據倉庫中是不允許 出現這樣的數據,數據必須保持一致,不能出現一個孩子擁有多個父親的現象出現, 否則會導致該該數據倉庫中地理維度的分類錯誤。當然可以使用如下SQL語句進 行每一個級別間的關系驗證。 Select 國家 from( Select 國家,區域 from GeographyDim nolock Group by國家,區域) A Group by國家 Having count(1) >1 如果上面的SQL返回任何國家,則說明這些國家屬於多個區域,意味這數據有問題。
數據倉庫測試(以HOLAP數據倉庫測試為例):
前台立方體的測試
立方體度量測試
1、立方體度量結構測試

結構測試包括度量的個數,數據類型(貨幣,字符,整型,精度),顯示的格式,所在文件的路徑都必須符合需求說明書的定義。 在圖2.2 度量展示中,按照需求說明書的定義,度量Sell In Sales Unit 的路徑必須是Sell In Sales Fact\Sell In Sales。數據顯示格式為#,#,數據類型為整型。
2、立方體度量值測試
對度量值的測試必須緊密的結合每一個維度。 如上圖2.2.2度量值和維度結合展示數據 所示,度量值Sell In Sales Unit結合了時間維度(紅色區域),地理維度(藍色區域)和產品維度(綠色區域)進行數據的顯示。可以使用下面SQL模板實現數據的驗證,來檢驗前台立方體的數據是否准確。 Select by [Big Area Name],[ProductName], sum(Sell In Sales Unit) [Sell In Sales Unit]from 銷售事實表 A Inner join 時間維度表 B on A.DateId = B.DateID Inner join 產品維度表 C on A.ProductID = C. ProductID Inner join 地理維度表 D on A.GeoGraphyID = D. GeoGraphyID Where FiscalYear = ‘2008’ Group by [Big Area Name],[ProductName]

BI測試策略 :
*模型建表語句或導數語句測試
- 驗證與前一版本的差異
- 新舊模型字段的差異性
- 模型與腳本的相互驗證
- 驗證導數語句是否正確
*ETL腳本測試
- 源表目標表數據量核對
- 拉鏈表拉鏈邏輯檢查
- 標准代碼轉換
- 總分關系延續性
*任務/作業調度測試
- 廢棄任務是否被刪除
- 調度作業是否符合設計
- 調度是否重復配置
- 依賴是否覆蓋完全
*數據口徑驗證
- 規范口徑規則說明書
- 第三數據比對
- 業務主導雙路比對
- 新舊系統對比
BI測試方法:
黑盒測試
- 以腳本跑通出數為重,檢查腳本內出現較為嚴重手工編碼錯誤
白盒測試
- 主要檢查腳本ETL程序代碼,包括表表關聯檢查、特列字段計算公式檢查、case when條件語句是否正確
指標測試
- 檢查數據加載完后目標表的各項技術指標是否正確,包括PI值檢查、空值檢查、規范性檢查等
性能測試
- 數據容量測試、數據時間窗口期測試、數據處理的連續性和持續性
BI測試工具:
黑盒測試 -- 場景測試腳本
白盒測試 -- 開發/生產環境
指標測試 -- 測試腳本
性能測試 -- LoadRunner
