Power BI 與數據分析初階班 第三課(340)
Eugene Chang (張佑成)
November 4th 2024
## 深入 DAX 語言 微軟官網:[連結](https://docs.microsoft.com/zh-tw/power-bi/guided-learning/introductiontodax?tutorial-step=1) --- ## DAX 學習資源 微軟官網教學:[連結](https://docs.microsoft.com/zh-tw/learn/modules/dax-power-bi-write-formulas/) --- ## DAX 運算子: 算數運算子 在 DAX 公式裡表達數學運算的符號 | 運算子 | 描述 | 範例 | |:--:|:------:|:------:| | + | 加法 | 3+2 | | - | 減法 | 5-3 | | * | 乘法 | 3*2 | | / | 除法 | 10/2 | | ^ | 指數 | 2^3 | --- ## 深入 DAX 語言 今天我們可以用 DAX 語言計算: - 計算結果欄 - 量值 --- ## Power BI 量值(Measure) 一個欄位被計算出來的總和,可獨立於表格之外 很像程式語言的變數(Variable) --- ## 練習 建立一個量值,**銷售總額**,利用公式: ```python 銷售總額 = SUM('銷售資料表'[一般銷售總額]) + SUM('銷售資料表'[折扣銷售總額]) ``` --- ## 練習 根據上一堂課 的範例銷售資料,我們來計算: 1. 銷售總額(SUM) 2. 門市數量(DISTINCTCOUNT) 3. 所有門市平均銷售額(AVERAGE) 4. 訂單數量(COUNT) 5. 平均訂單銷售額(銷售總額 / 訂單數量) 6. 單筆最大銷售額(MAX) 7. 單筆最小銷售額(MIN) 8. 所有門市坪數的加總 9. 平均每一坪的店面,為公司帶來了多少銷售額? --- ## Row Context - 資料列語境(Row Context) --- ## 什麽是 Context(語境) 語境意為 DAX 語句所身處的情境,包含前後文,以及外在環境,像是交叉分析篩選器。 --- ## Row Context(資料列語境) 代表目前的資料列,會針對一欄的資料進行逐列運算 --- ## Row Context 注意在網路上,微軟官方的教學資源都是將 Row Context 翻譯成**列上下文** --- ## Row Context 逐列計算資料,預設會以整個表格的資料進行運算: ```python 總銷售額_SUM = SUM('銷售資料表'[一般銷售總額])+SUM('銷售資料表'[折扣銷售總額]) ``` ![](https://drive.google.com/uc?export=download&id=1GSOIzxJlUuVL4HApRuWdUuONjJJR3eg5) --- ## 若今天我們希望計算每一個月的銷售總額 要如何才能將銷售總額分拆到不同的月份呢? --- ## CALCULATE 函數 - 在 Power BI 上是使用頻率最高的函數之一 微軟官網:[連結](https://docs.microsoft.com/zh-tw/dax/calculate-function-dax) --- ## CALCULATE 函數 類似帶著漏斗的計算機,會根據關聯對資料進行過濾 --- ## CALCULATE 函數 我們在日曆表上建立一個新的資料行: ```python 月銷售量_CAL = CALCULATE(SUM('銷售資料表'[一般銷售總額]) + SUM('銷售資料表'[折扣銷售總額])) ``` ![](https://drive.google.com/uc?export=download&id=1A_fZfqsdSK2C4VDRxyrgJJ-1ds-36um8) --- ## CALCULATE 函數 我們在日曆表上建立一個新的資料行: ```python 月銷售量_CAL = CALCULATE(SUM('銷售資料表'[一般銷售總額]) + SUM('銷售資料表'[折扣銷售總額])) ``` ![](https://drive.google.com/uc?export=download&id=1A_fZfqsdSK2C4VDRxyrgJJ-1ds-36um8) --- ## CALCULATE 函數 請嘗試宣告兩個量值,並將結果顯示於卡片: ```python 總銷售額_VAR_SUM = SUM('銷售資料表'[一般銷售總額])+SUM('銷售資料表'[折扣銷售總額]) 總銷售額_VAR_CAL = CALCULATE(SUM('銷售資料表'[一般銷售總額]) + SUM('銷售資料表'[折扣銷售總額])) ``` --- ## 練習:計算每一個縣市的銷售總額 --- ## 在縣市經理表輸入 ``` 縣市銷售總額 = CALCULATE([VAR 銷售總額], '縣市經理表'[縣市編號]) ``` --- ## Filter Context 篩選語境(Filter Context) 會以我們在 Power BI 專案定義的關聯進行篩選,最後在進行運算 注意在網路上,大多數的資源都是將 Filter Context 翻譯成**篩選上下文** --- ## 計算北部縣市總銷售額 今天我們希望能夠過濾並且顯示所有北部縣市的銷售總額 這個時候我們就需要學會如何寫篩選條件了 --- ## DAX 運算子: 比較運算子 | 運算子 | 描述 | 範例 | |:--:|:------:|:------:| | = | 相等 | [Region] = "TW" | | > | 大於 | [Year]>2016 | | < | 小於 | [Year]<2017 | | >= | 大於等於 | [Amount]>=2000 | | <= | 小於等於 | [Amount]<=10 | | <> | 不等於 | [Region] <> "TW" | --- ## 在縣市經理表輸入 ``` 北部縣市銷售額 = CALCULATE([VAR 銷售總額], '縣市經理表'[區域] = "北區") ``` --- ## 練習:計算各縣市 2017 年銷售總額 --- ## 練習:計算各縣市 2017 年銷售總額 ``` 縣市銷售額2017= CALCULATE([VAR 銷售總額], '日曆表'[年] = 2017) ``` --- ## FILTER 函數 用來過濾資料列的函數,會根據使用者輸入的條件逐列判斷,並根據篩選出來的資料進行運算: ![](https://drive.google.com/uc?export=download&id=1A_fZfqsdSK2C4VDRxyrgJJ-1ds-36um8) --- ## FILTER 函數範例 在縣市經理資料表建立一個新的資料行並輸入: ``` 2016中區縣市銷售 = CALCULATE([VAR 銷售總額], FILTER('日曆表', '日曆表'[年] = 2016 && '縣市經理表'[區域] = "中區")) ``` --- ## IF 函數 用 DAX 撰寫判斷式,用法與 Excel 的 IF 函數雷同: ```python 商品分類 = IF ('商品表'[銷售成本佔比] < 0.5, "低成本商品", IF ( '商品表'[銷售成本佔比] < 0.65, "中成本商品", "高成本商品" )) ``` --- ## DAX 運算子: 邏輯運算子 | 運算子 | 描述 | 範例 | 結果 | |:-----:|:---:|:---:|:----:| | && | 而且 | True && True | True | | || | 或許 | True || False | True | | IN | 包含 | 1 in { 1, 2, 3 } | True | --- ## Filter 練習 請計算北區的銷售總額 ```python 銷售總額_Filter文字條件 = CALCULATE ( [銷售總額_Sum], FILTER ( '縣市經理表', '縣市經理表'[區域] = "北區" ) ) ``` --- ## Filter 練習 計算每個月第一號的總銷售額 ```python 銷售總額_Filter資料行條件 = CALCULATE ( [銷售總額_Sum], FILTER ( '日曆表', '日曆表'[月]='日曆表'[日] ) ) ``` --- ## Filter 練習 計算周末的總銷售額 ```python 銷售總額_Filter資料行條件 = CALCULATE ( [銷售總額_Sum], FILTER ( '日曆表', OR('日曆表'[星期幾] = 6, '日曆表'[星期幾] = 0) ) ) ``` --- ## Filter 練習 銷售總額高於 200000 的加總 ```python 銷售總額_Filter量值條件 = CALCULATE ( [銷售總額_Sum], FILTER ( '商品表', [銷售總額_Sum] > 200000 )) ``` ```python 銷售總額_Filter沒使用C = CALCULATE ( [銷售總額_Sum], FILTER ( '商品表', SUM('銷售資料表'[一般銷售總額]) > 200000 )) ``` --- ## Filter 練習 2016年銷售額大於1億的縣市的總銷售額 ```python 2016年銷售額大於1億的縣市的總銷售額 = CALCULATE ( [銷售總額_Sum], FILTER ( '縣市經理表', CALCULATE ( [銷售總額_Sum], '日曆表'[年] = 2016 ) > 100000000 ) ) ``` --- ## 兩種除法 ```python 北區銷售額占比 = [北區銷售額] / ([北區銷售額] + [中區銷售額]) ``` ![](https://drive.google.com/uc?export=download&id=1vA1_LdK6drFjGREwx8BZ7qACexFYQXor) --- ## 兩種除法 使用 DIVIDE 函數進行安全除法 ```python 北區銷售額占比_DIV = DIVIDE([北區銷售額], ([北區銷售額]+ [中區銷售額]), 0) ``` ![](https://drive.google.com/uc?export=download&id=15spSDfj7OdfaYCAVklzhb-1gxPqAMkac) --- ## 若今天我們的 DAX 變得過度冗長... DAX Formatter 網站:[連結](https://www.daxformatter.com/#) --- ## Power BI 官方社群 若我們不知道該如何設計某一個領域的圖表,報告,或是儀表板,可以利用微軟官方的 Power BI 社群:[連結](https://community.powerbi.com/t5/Data-Stories-Gallery/bd-p/DataStoriesGallery) --- ## 如何輸出 Power BI 清理好的資料? - 輸出單個表格 --- ## 如何輸出 Power BI 清理好的資料? - 輸出多個表格 DAX Stuidio:[連結](https://daxstudio.org/) --- ## 這邊順便介紹一個國外的 Power BI 學習資源 SQLBI 網站:[連結](https://www.sqlbi.com/) 由兩個意大利籍的 Power BI 大師,Marco Russo 和 Alberto Ferrari 維護,他們寫的教學以及部落格文章都很實用 --- ## COVID-19 即時儀表板 COVID-19 儀表板:[連結](https://www.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6) ![](https://drive.google.com/uc?export=download&id=1Gwfu9ybg66MPRJMYKARrsiKFe_bl4_hp) --- ## COVID-19 約翰霍普金斯大學的開放資料:[Github 連結](https://github.com/CSSEGISandData/COVID-19)
Thanks for Watching
http://kyosei.ai
Contact: yuyueugene84@gmail.com
Download PDF