最近做了幾個PowerBI報表,對PowerBI的設計有了更深的理解,對數據的塑形(sharp data),不僅可以在Data Source中實現,例如在TSQL查詢腳本中,而且可以在PowerBI中實現,例如,向數據模型中添加自定義欄位,或者在報表數據顯示時,根據數據表之間的關係做數據的統計。本文 ...
最近做了幾個PowerBI報表,對PowerBI的設計有了更深的理解,對數據的塑形(sharp data),不僅可以在Data Source中實現,例如在TSQL查詢腳本中,而且可以在PowerBI中實現,例如,向數據模型中添加自定義欄位,或者在報表數據顯示時,根據數據表之間的關係做數據的統計。本文主要介紹數據的塑形和UI設計的微調。
一,創建數據列
PowerBI報表的數據分為數據源(Data Source),數據模型(Data Model),Query,數據從Data Source載入到Data Model,預設情況下,Data Model和Data Source的表結構(Schema)相同,用戶可以通過增加自定義列修改Data Model的結構。Query是Data Model的視圖,預設情況下,Query和Data Model的表結構相同,用戶可以通過增加計算列和度量列修改Query的結構。
1,自定義數據列
在Data View->Query Editor中,創建自定義數據列,使用的是M 公式(M formula ),M公式語言用於創建靈活性數據查詢,M公式對大小寫敏感。用戶添加自定義數據列,這會修改數據模型(Data Model)的架構,PowerBI向Data Model中添加數據列。
例如,創建MonthKey列,通過使用M公式,把DateKey(格式是:yyyyMMdd)轉換成MonthKey(格式是:yyyyMM)。
2,計算列(Calculated Column)
在Report View中,計算列用於從已經載入到數據模型(Model)中的數據,根據公式計算的數據列,這跟在Data Model中增加計算列是不同的,計算列是從數據模型中計算數據,不會修改數據模型,因此,計算列的值,只會出現在Report View 和Data View中。計算列使用DAX定義欄位的數據值,基於載入到數據模型的數據和公式計算結果。
計算列的值是基於當前數據行,進行計算,每行有一個計算列的值。舉個例子,顯示最近一年的日期:
3,度量列(Measure)
度量值是在報表交互時對報表數據執行的聚合計算,度量值使用DAX定義欄位的數據值,從數據模型中計算數據,不會修改數據模型,因此,度量值只會出現在Report View 和Data View中。度量值通常是用於聚合統計,基於用戶選擇的Filter,以顯示不同的聚合值,由於度量值是聚合值,不是每行都有一個聚合值。舉個例子,創建度量值 Answer Rate,其公式是:
Answer Rate = DISTINCTCOUNT(CloudThreads[AnsweredThreadID])/DISTINCTCOUNT(CloudThreads[ThreadID])
度量列能夠引用其他表的數據列,根據數據模型中的關係,能夠完成很多交互性的數據統計,非常強大,但是,也很繞、繞、繞……
二,報表可視化控制項的設計
在顯示報表數據時,PowerBI提供多種方式,能夠對數據的顯示進行微調,使數據顯示的效果更合理。
1,層次結構( Hierarchy)
PowerBI 支持在Report View中創建欄位的層次結構(Hierarchy),在同一個Query中,拖動一個欄位到另一個欄位下,PowerBI自動創建一個層次結構,並以父層次欄位的名稱命名,例如:
PowerBI內置一個可視化控制項HierarchySlicer,能夠顯示欄位的層次結構,在Fields中設置一個層次結構:
控制項顯示的結構是一個樹形結構,點擊“三角”,能夠展開,以樹形結構顯示子級別的數據,HierarchySlicer支持逐層展開,如下圖所示:
2,在Table控制項中顯示超鏈接(HyperLink)
在Product View中,選中Query的某一個欄位,如下圖,選中欄位 ProfileLink,
在Modeling菜單下,該欄位的Data Type為Text,設置文本的Data Category為Web URL:
在Table可視化控制項的視圖屬性中,設置Values的URL Icon屬性為On,
在Table控制項中,Web URL的顯示如下所示,點擊LInk,能夠直接打開瀏覽器,跳轉到指定的網址:
3,數字的小數位的控制
可以在PowerBI中設置欄位的數據類型,選中一個欄位,打開Modeling菜單,
選擇欄位的數據類型,Format為 Decimal number,選擇貨幣符號($), 顯示百分比(%),千位分隔符(,),或小數位數(0-N),這裡設置 顯示的小數位數是1,只顯示一位小數。
顯示的效果如下,Score 保留一位小數點,並使用千位分割符號:
三,根據當前的數據導出數據
在數據建模時,需要創建兩個表之間的關係,PowerBI要求跟關係相關的兩個數據列,必須有一列是唯一值,不允許存在重覆值。在DimCalendar表中,存在DateKey列,該列是以int表示的日期類型,例如,2017年10月1日,用DateKey表示是20171001,從DimCalendar表中導出MonthKey,公式是MonthKey=DateKey/100。需要根據MonthKey列新建一個Query,做法是:
1,添加新的查詢(Query)
在查詢編輯器(Query Editor)中,選中列 MonthKey,右擊彈出快捷菜單,選擇“Add as New Query”,從當前列中新建查詢
2,把List轉換成Table
此時,新建的Query命名為MonthKey,是一個List類型,需要把List轉換成Table,選中該List,打開主菜單Transform,點擊“To table Convert”,把List轉換成Table
從一個List創建Table,PowerBI需要用戶選擇界定符,該List沒有任何界定符,選擇None:
3,修改數據
新表的數據列名是Column1,右擊彈出快捷菜單,點擊“Rename”,把該列重命名為MonthKey,點擊“Change Type”把該列的數據類型修改為“Whole Number”,點擊“Remove Duplicates”,刪除重覆的數據值
4,查看導出數據表的實現步驟
在右側的查詢設置(Query Settings)中查看實現的步驟,選擇某一個Step,點擊Step 名稱前的“×”,能夠把該Step刪除。
附:鑒於本人接觸PowerBI的時間不長,cover的內容有限,後續有新的設計技巧,我會持續更新
參考文檔:
Tutorial: Create calculated columns in Power BI Desktop
Tutorial: Create your own measures in Power BI Desktop
Calculated columns in Power BI Desktop