在多維數據倉庫中,保存度量值的詳細值或事實的表稱為“事實表”。一個按照州、產品和月份劃分的銷售量和銷售額存儲的事實表有5個列,概念上與下面的示例類似。
Sate | PRoduct | Mouth | Units | Dollars |
WA | Mountain-100 | January | 3 | 7.95 |
WA | Cable Lock | January | 4 | 7.32 |
OR | Mountain-100 | January | 3 | 7.95 |
OR | Cable Lock | January | 4 | 7.32 |
WA | Mountain-100 | February | 16 | 42.40 |
在這些事實表的示例數據行中,前3個列——州、產品和月份——為鍵值列。剩下的兩個列——銷售額和銷售量——為度量值。事實表中的每個列通常要么是鍵值列,要么是度量值列,但也可能包含其他參考目的的列——例如采購訂單號或者發票號。
事實表中,每個度量值都有一個列。不同事實表將有不同的度量值。一個銷售數據倉庫可能含有這兩個度量值列:銷售額和銷售量。一個現場信息數據倉庫可能包含3個度量值列:總量、分鐘數和瑕疵數。創建報表時,可以認為度量值形成了一個額外的維度。即可以把銷售額和銷售量作為并列的列標題,或者也可以把它們作為行標題。然而在事實表中,每個度量值都作為一個單獨的列顯示。
事實表數據行中包含了您想從中獲取度量值信息的最底層級別的明細。換句話說,事實表中對每個維度的最詳細的項目成員都有數據行。如果有使用其他維度的度量,只要為那些度量和維度創建另一個事實表即可。數據倉庫中可能包含擁有不同度量值和維度的不同事實表。
前面表格中的示例數據行顯示了事實表的概念布局。事實是事實表幾乎總會使用一個整數值來表示(維度)成員,而不使用描述性的名稱。因為事實表往往會包含數量多得無法想象的數據行——在一個中等大小的數據倉庫中,事實表動輒包含上百萬行數據——使用整數鍵值可以有效地減小事實表的大小。事實表真正的布局如下所示。
STATE_ID | PROD_ID | Month | Sales_Units | Sales_Dollars |
1 | 347 | 1 | 3 | 7.95 |
1 | 447 | 1 | 4 | 7.32 |
2 | 347 | 1 | 3 | 7.95 |
2 | 447 | 1 | 4 | 7.32 |
1 | 347 | 2 | 16 | 42.40 |
在事實表中使用整數鍵值時,維度成員的名稱需要放到另一種表中——也就是維度表。通常,事實表中的每個維度都有一個維度表。
事實表前綴為Fact。
歸納:
每個數據倉庫都包含一個或者多個事實數據表。事實數據表可能包含業務銷售數據,如現金登記事務。
所產生的數據,事實數據表通常包含大量的行。事實數據表的主要特點是包含數字數據(事實),并且這些數字信息可以匯總,以提供有關單位作為歷史的數據,每個事實數據表包含一個由多個部分組成的索引,該索引包含作為外鍵的相關性緯度表的主鍵,而維度表包含事實記錄的特性。事實數據表不應該包含描述性的信息,也不應該包含除數字度量字段及使事實與緯度表中對應項的相關索引字段之外的任何數據。
包含在事實數據表中的“度量值”有兩中:一種是可以累計的度量值,另一種是非累計的度量值。最有用的度量值是可累計的度量值,其累計起來的數字是非常有意義的。用戶可以通過累計度量值獲得匯總信息,例如??梢詤R總具體時間段內一組商店的特定商品的銷售情況。非累計的度量值也可以用于事實數據表,單匯總結果一般是沒有意義的,例如,在一座大廈的不同位置測量溫度時,如果將大廈中所有不同位置的溫度累加是沒有意義的,但是求平均值是有意義的。
一般來說,一個事實數據表都要和一個或多個緯度表相關聯,用戶在利用事實數據表創建多維數據集時,可以使用一個或多個維度表。
維度表維度表包含了維度的每個成員的特定名稱。維度成員的名稱稱為“屬性”(Attribute)。假設Product維度中有3種產品,那么維度表將如下所示。
PROD_ID | Product_Name |
347 | Mountain-100 |
339 | Road-650 |
447 | Cable Lock |
產品名稱是產品成員的一個屬性。因為維度表中的Product ID與事實表中的Product ID相匹配,稱為“鍵屬性”。因為每個Product ID只有一個Product Name,顯示時用名稱來替代整數值,所以它仍然被認為是鍵屬性的一部分。
在數據倉庫中,維度表中的鍵屬性必須為維度的每個成員包含一個對應的唯一值。用關系型數據庫術語描述就是,鍵屬性稱為主鍵列。每個維度表中的主鍵值都與任何相關的事實表中的鍵值相關。在維度表中出現一次的每個鍵值都會在事實表中出現多次。例如Mountain-100的Product ID 347只在一個維度表數據行中出現,但它會出現在多個事實表數據行中。這稱為一對多關系。在事實表中,鍵值列(它是一對多關系的“多”的一方)稱為外鍵列。關系型數據庫使用匹配的主鍵列(在維度表中)和外鍵列(在事實表中)值來聯接維度表到事實表。
把維度信息移動到一個單獨的表中,除了使得事實表更小外,還有額外的優點——可以為每個維度成員添加額外的信息。例如,維度表可能為每個產品添加種類(Category)信息,如下所示。
PROD_ID | Product_Name | Category |
347 | Mountain-100 | Bikes |
339 | Road-650 | Bikes |
447 | Cable Lock | accessories |
現在種類是產品的另一個屬性。如果知道Product ID,不但可以推斷出Product Name,而且可以推斷出Category。鍵屬性的名稱可能是唯一的——因為每個鍵只有一個名稱,但其他屬性不需要是唯一的,例如Category屬性可能會出現好幾次。這樣一來,便可以創建按照產品和類別對事實表信息進行分組的報表。
除了名稱外,維度表可以包含許多其他的屬性。本質上,每個屬性都對應于維度表中的一個列。下面是帶有其他額外屬性的只有3個成員的Product維度表的示例。