Power BI作為一個優秀的數據可視化和分析工具,與其密不可分的伴侶就是 DAX(Data Analysis Expressions)語言。DAX是一種強大而靈活的公式語言,專為處理數據建模和計算而設計,而它的深度集成使得 Power BI能夠在數據分析的領域中嶄露。
快速目錄
什麼是Dax?
Dax是一種公式語言,你可以把它想像是使用Excel時我們會使用的公式,其用法與Excel的公式也有許多相似之處! 而Power BI又跟Dax有什麼關係呢?
當Power BI需要的資料或是分析需要利用函數或計算去改變性質或展現的資料時,Dax就非常重要啦!
– 常見的例子:
報表想要去比較每一季的銷售總額,那就需要對資料做2件事:
1. 銷售總額: 新建Measure並且使用Sum函數來計算總額。
2. 將日期區分每一季: 也能用Quarter函數來將日期轉換成季度。
以上就是Dax的基本認識啦!
網路上Dax公式的資料好少,Dax怎麼學?
Microsoft Power BI Dax Reference
其實Microsoft Power BI學習資料中有 Dax Reference,幾乎所有的Dax都能夠在這邊找到。現在Dax的種類已經增加到14種,來介紹一下每一類的用途吧~
- Aggregation Function
大家很熟悉的聚合函數,Average、Sum、Max、Min等等都是屬於這個範圍。 - Data and Time Function
計算時間和日期,或是創建日期表的函數,例如剛剛提到的Quarter就在這個範疇內。 - Filter Function
篩選函數,常見的CALCULATE、ALL等等都是屬於篩選和條件函數的範疇。 - Financial Function
財務函數,包括折舊計算函數、本金和利息計算函數、投資計算函數、報酬計算函數等等,但會應對不同Report的需求有不同變化,所以個人比較習慣直接用其他的Dax組成算法。 - Information Function
資訊函數會檢視提供給參數的儲存格或行,並比對該值是否與預期類型相符。例如CONTAIN用來檢查是否包含字串。 - Logical Function
邏輯函數,常見的IF、AND就是屬於邏輯函數,回傳判斷式中值得資訊。 - Math and Trig Function
數學三角函數,個人比較少在Report中使用到數學函數,最常用到的是ABS、Round,用於找出值的絕對值和小數點位數,在計算金額或是數據不想使用+,-來表示的話可以使用ABS。 - Other Function
不包含在分類中的函數。 - Parent and Child Function
父子層級函數,通常用於不同層級的架構連接,已可以應用在權限判斷等方式。 - Relationship Function
關係函數,用於管理或是連接表的方式。 - Statistical Function
統計函數,可以用於計算標準差、標準分布、信賴區間等等。 - Table Manipulation Function
表函數,通常用於新增欄位,或是對於Table篩選等用途。 - Text Function
文字功能函數,結合文字,判斷文字位置等等的函數,可以用來篩選或是創立新的值。 - Time Intelligence Function
時間智慧函數,與時間函數不同的地方是可以直接判斷之前現在和未來的時間區間,延伸的許多用法。
是不是覺得五花八門,眼花撩亂呢? 其實常用的那幾種記熟就能夠解決大部分的情況,其他Function就算你不會用但是你懂得計算邏輯,也能夠利用基本的Function來獲得我們要的答案喔!
常用的Dax教學
每一種Dax都有特殊且額外的用法結合其他的Function也能夠做出很多變化! 這邊我只會教學幾種常用的Dax,另外會出幾篇來教學Dax的用法,在那邊就有更仔細和進階的用法! 之後也會更新連結在這邊~ 歡迎有興趣的同學多多閱讀~
- CALCULATE
Dax公式: CALCULATE(<expression/計算/表達式>[, <filter/條件/篩選1> [, <filter/條件/篩選2> [, …]]])
一定要先來介紹大家最常用的CALCULATE啦! 為什麼說它是最常用的呢? 因為只要是計算中需要使用條件判斷的部分,都能夠用CALCULATE快速解決!
例子:
一間公司的營業總額我們可以這樣計算:
Total Sales = SUM(Sales[Sales Amount])
如果我們想要知道營業部A的銷售業績,我們就可以利用CALCULATE來完成:
Branch A Sales = CALCULATE(SUM(Sales[Sales Amount]), Branch = “A”) - 聚合函數 AVERAGE/MAX/MIN/SUM
Dax公式: AVERAGE/MAX/MIN/SUM(column/欄位)
例子:
同一間公司的最高營業總額我們可以這樣計算:
Max Company Sales = Max(Sales[Sales Amount])
同理我們想要找出本月的最高銷售額,我們就能夠結合CALCULATE來使用:
Best Sales = CALCULATE(Max(Sales[Sales Amount]),YEAR(Sales[Date]) = YEAR(TODAY()) && MONTH(Sales[Date]) = MONTH(TODAY())) - CALENDAR
Dax公式: CALENDAR(<start_date>/起始日期, <end_date>/結束日期)
這邊來介紹一個能夠建立一個日期表的Dax,假設我們想要在新建Table裡面新增一個Coulmn,並且帶著一個區間段的日期來作為Filter(Slicer)使用,簡單的用法如下:
CalendarTable = CALENDAR(DATE(2023, 1, 1), DATE(2024, 12, 31))
這樣就會生成一個從2023年1月一日到2024年12月31日的日期表!
– 進階問題: 我的資料中本來就有日期為什麼我還要自己新建一個日期呢?
假設資料中的日期只有這些,你導入資料後直接使用日期作為篩選器就會長這樣:
如果使用新建的日期表並且將Relationship連上後:
這樣能夠讓你的篩選器有完整的日期,在分析上或是圖表上的日期區間會一致且清楚!
以上是這次對於Dax的入門介紹,之後會有更多關於Dax的技巧和函數的應用,也會有完整的報表製作,敬請期待!