https://zhuanlan.zhihu.com/p/64149834
數據建模並沒有那么高深,你同樣可以學會!這篇文章通過一個實例創建一個簡單的數據建模,並引出兩個重要的概念:度量值和DAX.
之前談論PowerBI與Power Pivot的關系時就提到,Power BI數據建模其實就相當於Excel的Power Pivot插件,不過這個插件已內嵌到PowerBI Desktop中了,兩者的功能基本相同。Pivot是透視的意思,那么PBI的數據建模也和透視有許多共通之處。
使用的數據透視表的都知道,透視表只能從單個表中取數,如果想把其他表中的數據也放進來,只能先利用Vlookup把其他表的數據合並過來,然后再把這個字段放到透視表中。這只適用於數據非常簡單的情況,如果數據量大或者維度很多,用透視表就無法滿足需求了。
Power BI突破了這個限制,可以從多個表格、多種來源的數據中,根據不同的維度、不同的邏輯來聚合分析數據;而提取數據的前提是要將這些數據表建立關系,這個建立關系的過程就是數據建模。
以一個實例來理解數據建模。
比如有個電子產品專賣店,銷售產品有三類:手機、電腦、平板,每一類又分別來自三個品牌:小米、蘋果、三星,那么這個店銷售的產品共計9個,其銷售明細也是記錄這些產品每天的銷售數據,
為了能分析每個品牌的銷售金額,或者分析每個產品類別的銷售情況,其實還應該設計個產品明細表以及對應的品牌表和種類表,像這樣的:
從這四個表中很容易就能想到它們之間的關系,品牌表和產品類別表分別和產品明細表中的品牌與產品種類相對應,而產品明細表中的產品編號和銷售明細表中的產品編號相對應。
下面就演示一下在Power BI Desktop中建立一個模型,導入以后點擊關系,出現這4張表,
可以看出產品明細表和銷售明細表之間已經有一條線,這是由於表格導入后,PowerBI會自動檢測關系並聯接,沒有檢測到的表,可以點擊一個表中的字段托到另一個表的對應字段上,就可以建立關系了,把類別表、品牌表和產品明細表建立關系后,關系圖如下:
一個簡單的數據模型就建立好了,可以點進去看看建立模型的相關參數。
點擊關系連接線,兩邊的表對應的連接字段會框選,雙擊關系線,進入編輯關系窗口:
編輯關系窗口可以看出關聯的兩個表和對應的字段,也可以更改聯結的字段;下面還有兩個可選項,基數和交叉篩選方向。
基數
基數就是兩個連接字段的對應關系,分為多對一、一對一和一對多,一對多和多對一其實是一樣的,實際上就是兩種關系:
- 多對一(*:1):這是最常見的類型,代表一個表中的關系列有重復值,而在另一個表中是單一值
- 一對一(1:1):兩個表是一對一的關系,列中的每個值在兩個表中都是唯一的
具有唯一值的表通常稱為“查找表”,而具有多個值的表稱為“引用表”。在上述的關系圖上,產品明細表上類別手機、平板、電腦都不是唯一的,每個品牌都有這種類型,是個引用表;但類別表上,幾種類別都是唯一值,因此這兩個表是多對一的關系,類別表也就是查找表。
交叉篩選方向
表示數據篩選的流向,有兩種類型:
- 雙向:兩個表可以互相篩選
- 單向:一個表只能對另一個表篩選,而不能反向
這個稍微有點抽象,以后可以根據實例來理解。
根據剛才建立的數據模型,可以做一下分析,比如統計各品牌產品的銷售額:
在銷售明細表中並不能直接統計出按品牌的銷售額,可以先建一個度量值,在建模選項卡下,點擊新建度量值,公式欄輸入:
銷售額 = sum('銷售明細表'[金額])
然后[銷售額]這個度量值就建立了,在右邊字段區可以看到。
為了在畫布上直觀的看到各品牌銷售額,在可視化里添加“卡片圖”,把度量值字段放進去,可以看到卡片圖的數字出來了,

這個數字是整體銷售金額,因為還沒有做任何篩選,為了看出各品牌的銷售金額,現在添加一個品牌的切片器,
點擊不同的品牌,數值跟着變化,通過這個例子,可以看出:
- 展現的數字並不是一個表得出的,根據之前建立的關系模型,銷售明細表中的數據被品牌表中的[品牌名稱]字段所篩選,展現出來不同品牌的銷售額,這就是數據模型的威力。
- 品牌銷售額是通過[銷售額]這個度量值,加入到卡片圖中,並可與切片器交互,展現不同的數據。
通過這個實例,還看到了以前從未見過的的概念:度量值,這可以說是PowerBI數據建模的靈魂,創建度量值的公式稱為DAX公式(看起來和Excel公式非常相似),剛才創建的這個度量值只是一個簡單的sum函數,並沒有任何的過濾條件,但是卻可以根據切片器的篩選而展現不同的數值,所以度量值被稱為移動的公式,這里只是簡單介紹,有個印象即可。
學習數據建模的更多知識,可以說都是依據度量值的邏輯以及建立度量值的DAX公式來展開,是下一步學習Power BI的重點。
本文案例數據可在公眾號回復“建模案例數據”下載。