Power BI - 讓Excel視覺化效果更上一層
相信很多朋友都對Data Visualization頗有興趣 , 市面上也推出不少BI(Business
Intelligence) Tools , 而正好筆者曾經有段時間因工作需要 , 瘋狂地量產Dashboard , 一度患上Dashboard恐懼症 , 看到有關Dashboard的事物便想作嘔 ,
這個工具雖然不是新科技 , 但在眾多Data
Visualization的工具中是較為年輕的一群。這意味著無論在功能上或技術上 , 它還有很大的發展空間。 對沒有接觸過BI tools而又熟識Excel的朋友 , Power BI就是一個字"爽" , 可以匯入常見的檔案類型 , 配合Power Query執行SQL的程序 ,打造一個完整的DataTable , 然後像Pivot Table一樣 , 把想顯示出來的Dimension捉出來 , 各式各樣圖表立刻呈現眼前 , 十分便利。
不過 , 一些老手們 , 尤其是Qlikview愛好者 , 當遇上來自客戶或同事的稍為複雜的要求 , 在Qlikview上只要好幾個步驟便完成的 , 但當用上Power BI的時候卻變得十分麻煩 , 有時需要用上大量類似Excel formula的Measure (Qlikview的世界叫Expression) 才能達到目的 , 另外 , 有些個性化的設定也受到限制 , 例如圖上的Label可能會被遮蓋 , 卻不能移動。 一些Table Column的名稱是固定的 , 即是不能用寫的Logic更新其名字。 這些限制令一眾Developer十分頭痛 , 尤其是當你的上司認為這是一件非常簡單而又可行的改動。
不知道各位聽過有沒有Excel有一個強大的Plugin , 那就是Power
Query , 用家可以在不需要寫任何SQL下 , 只需用介面中的按鈕便可執行一些Filter , Join ,
Concat等動作 , 筆者認為這破實為Excel如虎添翼 , 功能上更上一層樓。 讀者們可能疑惑 , 這跟Power BI有何關係? 其實Power
BI也內置了Power
Query , 所以同時受惠這個功能 , 不過如果在Power BI中濫用Power Query的話 , 後果可以是很嚴重。 這話何解 , 原因十分簡單 , 假設我有兩份客戶數據和交易數據 , 第一步當然需要匯入數據 , 每一份數據匯入需要都要運行一次Query , 目前為止便需要運行兩次。 現在 , 你親愛的上司想要知道某產品在女性客戶的銷售情況。 當你接到任務 , 心裡咒罵完一番後 , 第一時間無疑會想到利用交易數據以判斷銷售情況 , 而性別則需要用上客戶數據 , 所以最終需要把兩份數據合併在一起 , 技術上稱為Join , 合併的過程也會運行Query , 合起來總共是三次。 現實情況不會跟上述例子般簡單 , 你會發現運行的Query會很多 , 需要大量時間等待 , 數據量愈大 , 這個問題會更顯住。
那麽有解決辦法嗎?有 , 就是不要濫用 , Power Query是好用但不代表我們可以濫用 , 要發揮Power BI的小宇宙 , 首先要明白Relationship和DAX這兩個好朋友 , 對數據庫沒有概念的朋友 , 可以先參考這篇文章 , 當你明白Relationship這個概念後 , 我們要在Power BI建立一個關聯式"小型數據庫"。要如何入手呢?從剛才的例子 , 我們有客戶和交易資料 , 兩者的關係是由客戶的ID串連在一起 , 只要我知道客戶的ID , 隨時可以查找交易記錄 , 該客戶的個人資料 , 同樣地 , 我們讓Power BI知道兩者的關係 , 在Relationship的設定中 , 把交易記錄和個人資料中的客戶的ID串聯在一起(如下圖)。 這個方法不用執行合併的Query , 也因此省去部分等待Query完成的時間。
除了Power
Query ,DAX也是非常重要的功能之一 ,想要精通PowerBI和把它發揮得更好 , 尤其是進階者 , 活用DAX是必須的 , DAX全名為Data
Analysis Expressions (DAX) , 在Power BI的世界中擔當十分重要的角色 , 當不能直接沿用原本的數據和其結構 , 便可以寫下DAX指令來實現SQL的程序 , 來建立一個新的Table
, 或者Calculated Column。 除此之外 , 建立新的Measure , 寫DAX Command來進行Summarization和Descriptive
Statistics , 把統計結果都放在Dashboard上。 沿用剛才的例子 , 老闆若果要你定期匯報女性客戶在某產品上的銷售情況 , 你便可以把這個資訊放在Dashboard
, 讓你的老闆看到夠 , 以下就是DAX的寫法:
=Calculate(sum([Transaction_Table]Transaction_Amount), filter([Transaction_Table], [Transaction_Table]Product="Product"), filter([Customer_Table], [Customer_Table]Gender="Female"))
Transaction_Table就是交易數據 , 而Customer_Table是客戶數據 , 因為建立了Relationship , 所以Power
BI懂得在兩個不一樣的Table下做過濾 , 最後把合乎條件的交易金額 , 用sum加起來便成事了。
技術的部分便到此為止 , 再探討下去 , 讀者朋友們會想睡了 , 有興趣的話不妨嘗試從官網下載和安裝Power
BI Application來試一試。 自從筆者從Dashboard恐懼症康復後 , 也心血來潮為自己打造一個人財務Dashboard
, 用作審視個人的財務狀況。 那麼也分享一下我的小作品 , 讓各位提提神。
正常來說 ,
完整的財務報告包括收入 , 支出 , 資產負債 , 現金流等 , 不過筆者只是想示範一下Power BI的功能和實質應用 , 所以我會用支出記錄來作示範。
下圖正是筆者的支出情況 , 可以見到金錢由2013年到玩在都花在哪裡 , 花了多少 , 基於個人私隠 , 每項交易金額到換上隨機的數字 , 所以各位不用花時間推測筆者平時是如何敗家了。 首先 , 我們看看最顯眼的數字 , 那就是337347
,為了讓筆者 , 第一眼便可以知道支出的總數 , 於是我把數字放大 ,並放在較上的位置。 接下來 , 來到最底下的圖表 , 這都反映錢都是花在衣食住行裡的食和行 , 總支出呈上升趨勢但增進有所放緩。 除了食和行這些必需品外 , 錢還敗在哪裡 , 看看最中間的Bar
chart , 發現原來大部是敗在玩樂上 , 右手邊的Table
, 也可以看看詳細資料。 至於頭頂和左手的方格又的是什麼? 在Power
BI , 這些都是Slicer , 只要按一下便可以過濾其他不需要的資料 ,其實右上角的Slicer是工作崗位 , 除了實習生 , 其他的都隠藏起來了 , 無謂顯醜。
當我按下Intern這個按鈕 , 整個頁面只會保留當時筆者還是一個小小實習生的敗家記錄 , 總支出很少也是意料之內 , 都花在必需品多 , 不過現在的筆者好奇當時花錢在什麼娛樂 , 那麼按一下Entertainment。
噢 , 原來都是遊山玩水 , 課金在PAD和鋼彈這些玩意上 , 不過11元的鋼彈哪裡找 , 都說過金額別太認真 , 這都是電腦隨機生成的數字。 從這個示範 , 各位可以看到Dashboard如何表現出Interactive的效果 , 讓用家利用想知道的結果來作分析 , 推論或後續的行動。
除此之外,筆者也把自己投資表現,和市場走勢放在Dashboard上,偵測買賣信號 , 定期檢視投資策略。 同樣地 , 除了市場數據外,其他數字都是經過處理過。至於這是那間公司的股票,便請自行腦補。那麼展示作品的環節便到此為止,希望各位有所得着!
Comments
Post a Comment