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 formulaMeasure (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的小宇宙 首先要明白RelationshipDAX這兩個好朋友 對數據庫沒有概念的朋友 可以先參考這篇文章 當你明白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進行SummarizationDescriptive 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

Popular posts from this blog

Boosting vs Bagging? 別再胡亂用了!

機器學習之陷阱 - Imbalance Class Classification

Excel VBA - 自動生成分析報告