Power BI入門教程

題記:這篇文章不只是Power BI的入門教程,同時相對於Qlik Sense進行了簡單比較。前端

最近把一個Qlik Sense的示例應用手動轉成了Power BI的應用,把相關步驟和遇到的問題記錄以下,權看成一個入門教程。數據庫

1,準備原始數據

因爲Qlik Sense的示例應用只有一個單獨的qvf文件,那麼原始數據只有經過qvf來導出。此qvf中的數據模型以下圖所示:json

image

Qlik Sense並無提供數據模型包含數據的完整導出功能,因此只能採用最麻煩和原始的方式,即:建立表格,在表格中添加某個數據表的全部字段,而後再利用可視化對象的導出功能導出數據爲xlsx文件。經過這種方式,把全部表都導出。注:但在實際操做當中,未必全部表都導出,由於有些表能夠在Power BI中生成(好比日期表DateParts),有些表在Power BI中也用不到(好比月份順序表Month Sort Order)。安全

固然,若是你拿獲得原始數據的文件或者數據庫,那麼就能夠跳過這一步。編輯器

2,加載數據

這步比較簡單,在Power BI中新建一個文檔,經過「獲取數據」-「Excel」來選擇須要導入的xlsx文件。函數

image

選擇文件以後,會顯示「導航器」對話框。在這裏選擇須要導入的工做表(能夠選擇多個)。選擇工做表以後,能夠直接點「加載」,也能夠點「編輯」來打開「查詢編輯器」修改ETL腳本(固然在加載以後仍是能夠從新編輯腳本)。若是直接點「加載」以後,Power BI就會把選擇的工做表中的數據加載進來,這個時候就能夠在「數據」視圖中預覽其中的數據,右側的「字段」邊欄也會顯示錶及其包含的字段:字體

image

這個時候,你會發現表名稱是xlsx文件中默認的Sheet1,修改表名稱的最簡單方式就是,在表名稱上點右鍵選擇「重命名」。另外,有些xlsx文件導入以後,數據可能會出現下面這種沒有正常識別列名稱的問題,這個時候就須要用到「查詢編輯器」中的「提高的標題」(把第一行數據看成標題/列名)的功能:ui

image

「查詢編輯器」是一個強大的UI操做界面,幫你自動生成Power Query的M語言腳本,能夠經過「高級編輯器」來查看每一個表的Power Query腳本。而Power Query的第一步就是經過「源」和「導航」腳原本實現Extract-Load的步驟。對於Power BI而言,Extract-Load能夠實現的能力有:人工智能

  • 從各種數據源中提取數據:各種文件、各種數據庫、各種Azure的PaaS、各種聯機服務和其餘數據源(好比R腳本)
  • 對數據源的配置進行設置
  • 直接錄入數據

3,轉換和塑造數據

在加載數據的過程當中或者以後,還能夠繼續利用「查詢編輯器」來對加載的數據進行轉換和塑造(即Transform)。所謂轉換和塑造就是利用Power Query的M語言腳原本對數據的加載過程,進行額外處理。我大體把這個過程當中Power BI能提供的能力整理了一下:spa

  • 通用
    • 列的管理:選擇列、刪除列
    • 行的管理:保留行(先後、間隔、重複、錯誤)、刪除行
    • 排序:基於一個列或多個列進行升降序
    • 合併數據:能夠是合併數據(兩個表提供不一樣的列),也能夠是追加數據(兩個表提供不一樣的行)
  • 轉換
    • 表數據管理:對原始數據進行分組、提高第一行做爲標題、行列顛倒、首尾行調換、對數據行計數
    • 全部列的處理:重命名列名、數據類型的自動檢測和手動修改、替換值、填充單元格(上下兩個方向皆可)、透視列(正逆兩個方向)、轉換爲列表(列表轉回列)
    • 文本列的處理:拆分(分隔符、字符數)、格式化(大小寫、首字母大寫、修整Trim、清除非打印字符、添加先後綴)、合併、提取(字符串長度、首子字符串、尾子字符串、選定範圍子字符串)、分析(從xml和json字符串中提取出數據)
    • 數值列的處理:聚合運算(求和、最大最小、中值、平均值、標準誤差、值計數、非重複計數)、標準運算(四則、整除、取模、除得百分比、乘得百分比)、科學運算(求絕對值、求冪、求指數、求對數、求階乘)、三角函數運算、舍入(向上向下、自定義)、特徵(奇偶、符號)
    • 時間列的處理:日期的處理、時間的處理、持續時間的處理
    • 結構化列的處理:擴展、聚合
  • 添加計算列
    • 常規:基於公式計算、基於自定義公式計算、基於條件判斷計算、添加索引列、複製列
    • 基於文本列添加:格式化後、合併後、提取後、分析後
    • 基於數值列添加:聚合運算後、標準運算後、科學運算後、三角函數運算後、舍入後、提取特徵後
    • 基於時間列添加:日期處理後、時間處理後、持續時間處理後

從上面整理的內容來看,Power BI因爲沿用了SQL Server和Excel中已經存在的Power Query,因此它的ETL功能仍是很是強大的,而且幾乎不用你手動編寫ETL腳本便可完成複雜的ETL工做。

想對Power Query的功能有詳細瞭解的,建議查看Excel的文檔:https://support.office.com/zh-cn/article/%E8%8E%B7%E5%8F%96%E5%92%8C%E8%BD%AC%E6%8D%A2%E5%9C%A8-Excel-2016-%E4%B8%AD-881c63c6-37c5-4ca2-b616-59e18d75b4de?ui=zh-CN&rs=zh-CN&ad=CN

4,建模數據

在完成數據的ETL以後,須要的步驟就是對數據進行建模。通常而言,在導入數據以後,Power BI會根據字段的名稱自動推斷出表之間的關係的。好比下圖就是導入示例數據以後自動構建的關係圖:

image

建模的工做和ETL的工做是兩個不一樣的步驟,雖然有些功能達到的效果是同樣,可是背後實現的機理是不同的。最明顯的一個地方就是數據類型的修改,在查詢編輯器中對數據類型進行修改會替換或產生新的ETL腳本,而在數據視圖中修改數據類型不會影響ETL腳本。

Power BI支持的建模能力整理以下:

  • 管理關係:能夠經過關係視圖來可視化的拖動連線,也能夠經過「管理關係」對話框瀏覽、新建、自動檢測、編輯和刪除關係 。
  • 關係:關係支持1:一、1:N、N:1,關係篩選支持單向和雙向 。
  • 公式計算:添加基於DAX表達式計算獲得的度量值(度量值默認放到當前選中的表當中,也能夠歸到其餘表中),添加基於DAX表達式計算獲得的計算列,添加基於DAX表達式計算獲得的表 。
  • 排序:選擇排序的列 。
  • 格式設置:能夠設置列的數據類型(小數、定點十進制數、整數、日期/時間、日期、時間、文本、布爾值、二進制),顯示格式(各類貨幣格式、時間格式、百分比、小數位數、科學計數等) 。
  • 屬性設置:所屬表(能夠爲度量值設置歸屬的表),數據分類(設置值的顯示特徵,好比地址、Url、條碼,能夠方便讓可視化控件更好的處理內容),默認聚合方式(要不要求和等) 。
  • 安全性:基於DAX表達式來設定什麼角色能夠查看什麼數據,很是靈活的行級訪問控制機制 。
  • 分組:這是什麼鬼,我也尚未搞懂。 有知道的朋友但願不吝賜教。

在建模的過程當中,尤爲和公式計算相關的東西都涉及到數據分析表達式(Data Analysis Expressions,DAX)的使用,詳細的說明能夠參考MSDN官方文檔:https://msdn.microsoft.com/library/gg413422.aspx

(updated 2016.12.20)更完整的文檔在這裏:https://msdn.microsoft.com/en-us/library/mt244090.aspx

對於個人這個示例,我實際用到了以下幾種建模能力:

  • 日期數據的格式改變:把長格式的日期字符串修改成短的 。
  • 各類度量值的創建:個人度量值主要涉及一些求和、求平均、計數、變化率等。爲了更好的管理度量值,我特地新建了一個名爲DetialsMeaured的表,公式爲:DetailsMesured = ALL(Details[EpisodeID]),而後把創建的各類度量值歸到這個表當中 。
  • 百分比值的格式化:求變化率的度量值,能夠把顯示格式設置爲百分比,那麼在內置可視化控件中就直接顯示爲百分比,無需額外設置或者乘100(我使用了一個第三方控件,其沒法識別百分比格式,只能在度量值上乘100) 。
  • 創建層級結構:爲了支持數據的下鑽顯示,那麼須要創建數據的層次結構,好比財年包含月份。要創建層次結構很簡單,直接把一個字段拖動到另一個字段下面Power BI就會自動建立一個新的層次結構列(包含了你剛剛操做的兩個字段),接着能夠繼續拖入其餘列到這個層次結構列下面,還能夠拖動來進行排序。
  • 創建日期表:不少分析都是和時間相關的,那麼就須要有一張獨立的日期表來爲維度提供數據(包括年、財年、季度、月、日、天等)。原來的qvf中也存在這一個日期表,也是依靠腳本生成的,對於Power BI而言一樣也能夠經過腳原本生成一個日期表。生成日期表的腳本以下:
DateKey = ADDCOLUMNS(
CALENDAR(FIRSTDATE(Details[EpisodeAdmissionDate]),LASTDATE(Details[EpisodeAdmissionDate])),
"DateAsInt",FORMAT([Date],"YYYYMMDD"),
"Year",YEAR([Date]),
"Quarter",VALUE(FORMAT([Date],"Q")),
"YearQuarter",FORMAT ( [Date],"YYYY" ) & "/Q" & FORMAT ( [Date],"Q" ),
"Month",MONTH([Date]),
"MonthName",FORMAT([Date],"mmm"),
"Day",DAY([Date]),
"WeekNum",WEEKNUM([Date]),
"WeekDay",WEEKDAY([Date]),
"WeekDayName",FORMAT([Date],"ddd"),
"Fiscal Year",IF(MONTH([Date])>3,YEAR([Date]) +1,YEAR([Date])),
"Fiscal Year Name",IF(MONTH([Date])>3,YEAR([Date]) & "-" & (YEAR([Date]) + 1),(YEAR([Date]) - 1) & "-" & YEAR([Date]))
)

把日期表添加到模型中後,就能夠手動把日期表的Date字段和Details表中的EpisodeAdmissionDate字段創建其關係。最終的模型圖以下:

image

日期表建立的更多詳細介紹,能夠參考這個博客文章:http://kohera.be/blog/business-intelligence/how-to-create-a-date-table-in-power-bi-in-2-simple-steps/

5,可視化顯示數據

經過可視化控件來顯示數據沒有太多能夠說的。Power BI的官方文檔已經寫的比較好了,見:https://powerbi.microsoft.com/zh-cn/documentation/powerbi-desktop-report-view/

無非就是把一個可視化控件拖到報表頁面上,而後把所需的維度和度量拖到可視化控件中的數據標籤頁中的「軸」/「圖例」或者「值」下面,以下圖所示:

image

數據建模的時候提到過下鑽顯示。下鑽顯示有兩種方式:一種使用層級結構列,一種不使用。

簡單說來,對於使用層級結構的方式,就是先創建一個層級結構列,而後把這個列拖到「軸」下面,可視化控件就會在上面的操做欄顯示用於下鑽數據的特定按鈕。以下圖所示:

image

對於第二種下鑽顯示方式,我沒有采用,詳細的說明能夠見:https://powerbi.microsoft.com/zh-cn/documentation/powerbi-service-drill-down-in-a-visualization/

爲可視化控件準備好數據以後,還能夠經過「格式」設置標籤頁(即刷子狀圖標)來設置一些顯示格式,好比標題,字體,顏色什麼的。

當數據添加到可視化控件以後,這些字段還會自動添加到視覺級別篩選器,除此以外,你還能夠額外把字段添加到頁面級篩選器和報告級篩選器中。這些篩選器的做用範圍望文生義應該能夠理解。

不過須要注意的是,篩選器在公開發布到Web後並不可見,因此你還能夠單獨在報表頁面上添加所需的切片器。切片器的數據設置方式和其餘可視化控件相似。

6,和Qlik Sense的比較

粗略的比較下來(我的觀點):

  1. ETL能力因爲背靠SQL Server分析服務的相關技術,因此能夠作到和Qlik至關,尤爲幾乎能夠不用手寫腳本。
  2. 建模能力和Qlik至關,只是操做體驗上會差一些。
  3. 可視化能力比Qlik就差不少,不論是內置的可視化控件仍是第三方擴展的控件都是如此。
  4. 前端操做(也即最終用戶使用BI應用)的體驗也比Qlik差。
  5. 擴展和集成能力也因爲Power BI的定位決定了沒有Qlik靈活。
  6. 最大的優點是入門的許可費用低廉(若是願意使用SaaS的話)。
  7. 一大特點是具有人工智能輔助的快速看法能力。

Power BI在可視化能力方面確實須要進一步增強,好比我就遇到以下幾個問題:

  • 排序只能基於當前使用的維度,不能自定義排序
  • 堆積面積圖圖例不能下鑽
  • 沒有豎條儀表圖
  • 餅圖不能合併爲Other
  • 表格不支持下鑽
  • (updated 2016.12.20)貨幣格式的數值不能顯示負數

最後不得不吐槽下,Power BI的文檔用機器翻譯就算了,感受Power BI Desktop的中文版也是機器翻譯的。還不如我來翻譯算了(做爲MVP能夠免費作貢獻)。

相關文章
相關標籤/搜索