維度表和事實表的含義

2022-08-31 09:30:09 字數 2746 閱讀 2692

維度表示你要對資料進行分析時所用的乙個量, 比如你要分析產品銷售情況, 你可以選擇按類別來進行分析,或按區域來分析. 這樣的按..分析就構成乙個維度。前面的示例就可以有兩個維度:型別和區域。另外每個維度還可以有子維度(稱為屬性),例如類別可以有子型別,產品名等屬性。

下面是兩個常見的維度表結構:

產品維度表:prod_id, product_name, category, color, size, price

時間維度表:timekey, season, year, month, date

而事實表是資料聚合後依據某個維度生成的結果表。它的結構示例如下:

銷售事實表:prod_id(引用產品維度表), timekey(引用時間維度表), salesamount(銷售總量,以貨幣計), unit(銷售量)

上面的這些表就是存在於資料倉儲中的。從這裡可以看出它有幾個特點:

1. 維度表的冗餘很大,主要是因為維度一般不大(相對於事實表來說的),而維度表的冗餘可以使事實表節省很多空間。

2. 事實表一般都很大,如果以普通方式查詢的話,得到結果一般發的時間都不是我們可以接受的。所以它一般要進行一些特殊處理。如sql server 2005就會對事實表進行如預生成處理等。

3. 維度表的主鍵一般都取整型值的標誌列型別,這樣也是為了節省事實表的儲存空間。

事實表和維度表的分界線

事實表是用來儲存主題的主幹內容的。以日常的工作量為例,工作量可能具有如下屬性:工作日期,人員,上班時長,加班時長,工作性質,是否外勤,工作內容,審核人。那麼什麼才是主幹內容?很容易看出上班時長,加班時長是主幹,也就是工作量主題的基本內容,那麼工作日期,人員,工作性質,是否外勤,工作內容是否為主幹資訊呢?認真分析特徵會發現,日期,人員,性質,是否外勤都是可以被分類的,例如日期有年-月-日的層次,人員也有上下級關係,外勤和正常上班也是兩類上班考勤記錄,而上班時長和加班時長則不具有此類意義。所以一般把能夠分類的屬性單獨列出來,成為維度表,在事實表中維護事實與維度的引用關係。

在上述例子中,事實表可以設計成如下

workdate  employeeid,worktypeid,islegwork,content,

而時間,員工,工作型別,是否外勤則歸為維度表。

總的來看,和其他建立主外來鍵關係的表也都一樣。但是維度表的建立是需要有層次的(雖然不是必須,但是也是典型特徵),而事實表的建立是針對已經發生的事實的,是歷史資料的存檔,也就是說是不應該修改的。以測試部測試軟體的bug為例。每個bug都是乙個事實。這個bug的狀態在資料字典裡可能設計成新建,轉派,修復,拒絕等等。那麼在事實表中bug表中有乙個欄位為status。當測試員或者開發人員改變了這個狀態的值,事實表中該如何更新呢?是直接更新status還是什麼其他的方式?顯然,為了能夠追蹤這個bug的歷史資訊,應該是重新插入一條新的記錄。那麼這和以往的資料庫設計有什麼區別呢?可以看出對於原始記錄和新插入的記錄,其他字段全部是相同的,也就是全部冗餘的。如果以bugid作為主鍵,這時候會發現主鍵都是冗餘的(當然,插入之前只能刪除主鍵)。所以可以看出,事實表一般是沒有主鍵的。資料的質量完全由業務系統來把握。

總的說來,事實表的設計是以能夠正確記錄歷史資訊為準則,維度表的設計是以能夠以合適的角度來聚合主題內容為準則。

維是分析問題的角度,每一維代表乙個統一的訪問資料倉儲中資訊的路徑。

在實際問題中,有些維包含多個層次。

事實是各個維度的交點,是對某個特定事件的度量,只有當特定維值的組合沒有造成空穴時,乙個事實才會存在。事實的數量屬性稱為度量。

事實資料和維度資料的識別必須依據具體的主題問題而定。「事實表」,用來儲存事實的度量(measure)及指向各個維的外鍵值。維表用來儲存該維的元資料,即維的描述資訊,包括維的層次及成員類別等

所產生的資料,事實資料表通常包含大量的行。事實資料表的主要特點是包含數字資料(事實),並且這些數字資訊可以彙總,以提供有關單位作為歷史的資料,每個事實資料表包含乙個由多個部分組成的索引,該索引包含作為外來鍵的相關性緯度表的主鍵,而維度表包含事實記錄的特性。事實資料表不應該包含描述性的資訊,也不應該包含除數字度量欄位及使事實與緯度表中對應項的相關索引字段之外的任何資料。   

包含在事實資料表中的「度量值」有兩中:一種是可以累計的度量值,另一種是非累計的度量值。最有用的度量值是可累計的度量值,其累計起來的數字是非常有意義的。使用者可以通過累計度量值獲得彙總資訊,例如。可以彙總具體時間段內一組商店的特定商品的銷售情況。非累計的度量值也可以用於事實資料表,單彙總結果一般是沒有意義的,例如,在一座大廈的不同位置測量溫度時,如果將大廈中所有不同位置的溫度累加是沒有意義的,但是求平均值是有意義的。   

一般來說,乙個事實資料表都要和乙個或多個緯度表相關聯,使用者在利用事實資料表建立多維資料集時,可以使用乙個或多個維度表。

再舉個實際的例子。銀行對存款記賬,a表中存放實際資料,包括賬號、所屬機構號、存款金額等,b表存放機構號和機構名稱的對應關係。則a是事實表,b是維表。

維度表可以看作是使用者來分析資料的視窗,緯度表中包含事實資料表中事實記錄的特性,有些特性提供描述性資訊,有些特性指定如何彙總事實資料表資料,以便為分析者提供有用的資訊,維度表包含幫助彙總資料的特性的層次結構。例如,包含產品資訊的維度表通常包含將產品分為食品、飲料、非消費品等若干類的層次結構,這些產品中的每一類進一步多次細分,直到各產品達到最低級別。   

在維度表中,每個表都包含獨立於其他維度表的事實特性,例如,客戶維度表包含有關客戶的資料。維度表中的列欄位可以將資訊分為不同層次的結構級。

簡單的說:   

1、事實表就是你要關注的內容;   

2、維表就是你觀察該事務的角度,是從哪個角度去觀察這個內容的。   

例如,某地區商品的銷量,是從地區這個角度觀察商品銷量的。事實表就是銷量表,維表就是地區表。

事實表和維度表

維度表示你要對資料進行分析時所用的乙個量,比如你要分析產品銷售情況,你可以選擇按類別來進行分析,或按區域來分析.這樣的按.分析就構成乙個維度。前面的示例就可以有兩個維度 型別和區域。另外每個維度還可以有子維度 稱為屬性 例如類別可以有子型別,產品名等屬性。下面是兩個常見的維度表結構 產品維度表 pr...

維度表和事實表

維度表 一般是對事實的描述資訊。每一張維表對應現實世界中的乙個物件或者概念。例如 使用者 商品 日期 地區等。維表的特徵 事實表中的每行資料代表乙個業務事件 下單 支付 退款 評價等 事實 這個術語表示的是業務事件的度量值 可統計次數 個數 金額等 例如,訂單事件中的下單金額。每乙個事實表的行包括 ...

維度表和事實表的區別

維度表示你要對資料進行分析時所用的乙個量,比如你要分析產品銷售情況,你可以選擇按類別來進行分析,或按區域來分析.這樣的按.分析就構成乙個維度。前面的示例就可以有兩個維度 型別和區域。另外每個維度還可以有子維度 稱為屬性 例如類別可以有子型別,產品名等屬性。下面是兩個常見的維度表結構 產品維度表 pr...