Power BI 與數據分析初階班 第四課(353)

Eugene Chang (張佑成)

April 26th 2025

# 練習題:零售資料分析 我們希望能夠找出: 1. 銷售金額前 10 名的門市? 2. 不同形態的門市占總銷售額比例? 3. 公司近幾個月來的營收趨勢如何? 4. 是否店面坪數越大,平均月銷售額就越高? --- ## 銷售金額前 10 名的門市? ![](https://drive.google.com/uc?export=download&id=1A9EgB7u5gXeCwbpOUtpEwj0XsdrFAKOl) --- # 不同形態的門市占總銷售額比例? 這邊有一個問題:在我們的銷售資料表上,銷售額是分爲**一般銷售總額**以及**折扣銷售總額** 我們需要將兩欄的值加總起來,計算出一家店實際的銷售總額 --- # DAX 語言簡介 Data Analysis Expression (資料分析表達式) 是一個 Power BI 用於資料分析的語言,其語法與 Excel 公式十分類似 但是請注意,雖然語法接近,但是** DAX 語言並不是 Excel 公式** --- # 使用 DAX Power BI 都是以資料列與資料欄為單位,沒有**儲存格**的概念 --- # DAX 運算子: 算數運算子 在 Excel 公式裡表達數學運算的符號 | 運算子 | 描述 | 範例 | |:--:|:------:|:------:| | + | 加法 | =3+2 | | - | 減法 | =5-3 | | * | 乘法 | =3*2 | | / | 除法 | =10/2 | | ^ | 指數 | =2^3 | --- # 使用 DAX 建立計算結果欄 希望能針對每一個資料列做運算時,可以建立一個新的資料欄 ![](https://drive.google.com/uc?export=download&id=1q15WmXUrgl9t9mo0KTQDhP18bUsFyffo) --- # 使用 DAX 建立計算結果欄 在這邊我們就輸入以下 DAX 表達式: ```python 銷售總額 = [一般銷售總額] + [折扣銷售總額] ``` 注意 **[ ]** 符號表示資料表某一欄的意思 --- ## 用 DAX 計算總銷售額欄 ![](https://drive.google.com/uc?export=download&id=1iKbwLTGP5Itd3RBsOAFPcodG4IyR7DiH) --- ## 不同形態的門市占總銷售額比例? ![](https://drive.google.com/uc?export=download&id=1uVM2KDYKeIqtKYHTAgCqo651d8ASnjZw) --- ## 公司近幾個月來的營收趨勢如何? ![](https://drive.google.com/uc?export=download&id=1QjoYkm-1GHPvkTVyddkhXuf4mVCAkDWT) --- ## 是否店面坪數越大,平均月銷售額就越高? ![](https://drive.google.com/uc?export=download&id=1JILnAn0A2fJ6vkTDL1DOBRg4QE3Gaqvs) --- ## 計算月平均銷售額 我們必須先知道銷售資料所涵蓋的時間範圍(月份的數量) 算法:**每一家門市的總銷售額 / 月份的數量** --- ## 計算月平均銷售額 如何計算月份的數量? ``` 平均月銷售額 = [總銷售額] / DISDINCTCOUNT('日曆表'[年-月]) ``` --- ## 是否店面坪數越大,平均月銷售額就越高? ![](https://drive.google.com/uc?export=download&id=1qtaLfRtM5FcLRbeDSQ2s2L_YYt7mVBxd) --- ## DAX 學習資源 微軟官網教學:[連結](https://docs.microsoft.com/zh-tw/learn/modules/dax-power-bi-write-formulas/) --- ## 深入 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 | | &#124;&#124; | 或許 | True &#124;&#124; 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

Contact: yuyueugene84@gmail.com

Download PDF