Try   HackMD

大數據分析及互動式視覺效果-PowerBI

課程資訊

本頁面網址 https://reurl.cc/6Ey7Vb

講師:李燕秋老師 (FB / YT)

課程素材

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

0223-作業繳交處-請在頁面中內嵌BI作品

0222-作業繳交處

可下載昨天的作業進度-自己的



PowerBI Desktop 下載及註冊(只支援Windows,不支援MAC)

2025/02/22最新版軟體載點

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →


儀表板範例 https://community.fabric.microsoft.com/t5/Data-Stories-Gallery/bd-p/DataStoriesGallery

將視覺效果發行及分享

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


範例

外掛視覺效果

下載視覺效果(須登入帳號) https://appsource.microsoft.com/en-us/marketplace/apps?page=1&src=office&product=power-bi-visuals

關係模型:數據建模概念

Lookup表(維度表)-交易表&數據表(事實表)-資料表
關聯的重要性

  • 視覺化是資料的展現形式 PowerView
  • 資料查詢是基礎資料處理 PowerQuery
  • 資料建模為真正意義的度量 PowerPivot

地圖功能無法顯示之解法:設定完成要關閉BI後重新開啟專案檔

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →


Google 問卷補充資料

點我打開

規則運算式

語法內容

  • 範例
    • 只能夠打10位數電話,並且開頭要是09
      • ^09{1}[0-9]{8}
    • 打五個文字
      • ^.{5}

Google表單外掛套件

  • Google表單外掛套件「formLimiter」,可設定人數與截止日期

https://workspace.google.com/marketplace/app/formlimiter/538161738778

  • Form Notifications - Google表單提交後電子郵件提醒

https://workspace.google.com/marketplace/app/form_notifications/573009629797

  • FormRanger 可設定選項答案的選擇上限,超過即呈現額滿內容

https://workspace.google.com/marketplace/app/form_ranger/387838027286

image.png

  • 選項消失:
=IF(C2<D2,B2,"")
  • 改敘述
=IF(C3<D3,B3,"名額已額滿,後續報名將以候補方式等候遞補")

與Google 試算表介接

若要使用上面的資料來源,請將網址複製後再貼至文字檔中,再複製回PowerBI

  • 將後面edit?usp=sharing改成export?format=xlsx

圖示

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • 於Power BI中,以WEB方式取得資料
  • 後續如有新增了問卷的填寫,點選重新整理即可
    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →

與One Drive 介接

One Drive

1.先點選檔案,選擇在Excel Online中開起

2.於Excel Online中,點選[檔案]>[共用]>[內嵌],複製內嵌程式碼

  1. 將內嵌程式碼中src="開始複製到em=2結束[紅色區段]

4.於PowerBI中,選擇以WEB匯入,將紅色區段貼上後,將其中embed改為download,後段加上&app=Execl

5.確定後,即將資料匯入

https://onedrive.live.com/download?resid=AAXXXX @&authkey=AAXXXXXXX&em=x&app=Excel

內嵌程式碼範例:

> iframe width="402" height="346" frameborder="0" scrolling="no" src="https://onedrive.live.com/**embed**?resid=A7ABFC95198FF0DA%2111116&authkey=%21AKuCgRAJMDMdWHU&em=2&wdAllowInteractivity=False&wdHideGridlines=True&wdHideHeaders=True&wdDownloadButton=True&wdInConfigurator=True"></iframe

PowerBI中

https://onedrive.live.com/download?resid=A7ABFC95198FF0DA%2111116&authkey=%21AKuCgRAJMDMdWHU&em=2&app=excel

SharePoint

  1. 先點選檔案,選擇在Excel中開啟
    image.png

2.於Excel中,點選[檔案]>[資訊]>[複製路徑]
image.png

3.於PowerBI的查詢中,以web方式查詢,並貼上路徑
https://gesoft-my.sharepoint.com/personal/jocker229_gesoft_onmicrosoft_com/Documents/問卷.xlsx?web=1
 ** 此時要將網址後端的 ?web=1刪除 
4.點選確定後即可匯入資料進來
5.若有更新資料,重新整理即可匯入

其餘問卷 - SurveyCake

將問卷回覆匯入 Google 試算表,表單應用更彈性
不會程式沒關係!SurveyCake 手把手教學,讓你三分鐘就上手
但必須是Pro版本
https://blog.surveycake.com/survey-google-sheets-d9d97572b40c

DAX 基本概念

點我打開

何謂 DAX?

Data Analysis Expressions
數據分析表達式
幫助您從模型中的原始資料建立新資料出來。

Excel公式引用為儲存格(A1),而DAX公式直接引用某張表中的某欄名稱
例如
銷售量=sum ('銷售表'[數量])
欄位名稱= 運算式
'資料表'[欄位]


related(要傳回的欄位)
傳回另一個表中的相關值,類似Vlookup
類似Query中的合併查詢,但只能針對單一欄位合併且必須建立起關聯性


行式儲存資料表(Column-based Storage)
有時候在樞紐分析表或是POWER BI,原有的資料如果不能滿足我們的需要,就需要建立新的資料行以及量值。
但 建立前先認識一下資料行與量值

名稱 說明
資料行 必須存在表中
量值 以公式形式存在,不使用時不佔用記憶體

量值

  • 內隱式量值:加總,平均,最大值等
  • 明確式量值:自己建的新計算欄位

撰寫DAX時先了解到以下的基本概念

* 資料類型

能被計算的數值,文字是不能被計算(除了計數),建議先確定好資料型態

* 運算子




雙線的打法

DAX參考



聚合函數-計算器類型

  • SUM 數值加總 -SUMX
  • AVERAGE 數值平均-AVERAGEX
  • MAX 最大值
  • MIN 最小值
  • CountRows('資料表')求列個數,以整張表來看,不用給欄位
  • Counta 計算儲存格不為空的數量-COUNTX
  • CountBlank 計算資料行中儲存格為空白的數量
  • DistinctCount 不重複值(唯一值)的總數

averagex(資料表, 運算式)

1_平均成本_averagex = averagex('交易資料','交易資料'[成本_單價]*'交易資料'[數量])

1_平均售價_averagex = averagex('交易資料','交易資料'[單價]*'交易資料'[數量])

countrows(資料表)

1_筆數_countrows = countrows('交易資料')

小備註:

  1. countx : 計算數值型筆數
  2. countax : 計算文字、數值、錯誤 / 非空白筆數
  3. countrows : 計算筆數

迭代函數-X系列函數
https://www.powerbigeek.com/aggregate-x-functions/

迭代函數

新增量值

sumx(資料表, 運算式)

1_售價_sumx = sumx('交易資料','交易資料'[單價]*'交易資料'[數量])

1_成本_sumx = sumx('交易資料','交易資料'[成本_單價]*'交易資料'[數量])


所有語法均須以半形輸入

成本_小計 = '交易資料'[成本_單價]X'交易資料'[數量]

售價小計 = '交易資料'[單價]X'交易資料'[數量]

成本_單價 = RELATED('商品資料'[成本單價])

單價 = RELATED('商品資料'[單價])

回收獎勵金 = '交易資料'[數量] * 3

單價 = RELATED('商品資料'[單價])
成本_單價 = RELATED('商品資料'[成本單價])
售價小計 = '交易資料'[單價] * '交易資料'[數量]
成本_小計 = '交易資料'[成本_單價] * '交易資料'[數量]

CALCULATE函數

銷售筆數 = CALCULATE( COUNT('銷售'[單位價格]) , '銷售'[單位價格]>10 )
銷售筆數 = CALCULATE( 計算器 , 篩選器1 ,... )

calculate(計算器, 篩選器[, 篩選器2][, 篩選器3])

2_大筆_售價 = calculate('交易資料'[1_售價_sumx], '交易資料'[數量]>=50)

2_大筆_筆數 = calculate('交易資料'[1_筆數_countrows], '交易資料'[數量]>=50)

使用篩選條件時,可搭配使用calculate函數將運算式套上篩選條件後,計算出符合條件的結果,這組合可以想像成Excel的Countif
當有多個篩選準則時,可以使用和 (&&) 邏輯運算子來評估它們,這表示所有條件都必須是 TRUE,或是由或 (| |) 邏輯運算子,表示任一個條件都可以是 true。
若要用三個以上要使用 in {A,b,c,d} 。
簡單地說在計算中套用一個或多個篩選來決定結果或值。

in = CALCULATE([銷售量],
'產品表'[咖啡種類] in {"拿鐵","美式","卡布奇諾"})


若有特別要求,量值必須要限定資料行,若是要新增資料行,使用當前表中的資料行,則不受限

正確的寫法=CALCULATE([銷售量],'產品表'[咖啡種類]="拿鐵")
錯誤的寫法=CALCULATE([銷售量],[咖啡種類]="拿鐵")

但若是量值要引用已建立的量值,則可以不限定資料表,且量值不是依附於表而存在的,可以放在任意表的下面。

可使用Alt+Enter or Shift+Enter來分隔公式

篩選器

樞紐分析表中可以藉由欄和列標籤的篩選按鈕以及交叉分析篩選器來套用篩選內容
那在 DAX 中可以使用 ALL, RELATED, FILTER, CALCULATE 和其他量值和資料行 等來進行篩選。

名稱 內容 範例
ALL 忽略所有套用的篩選後傳回所有資料列或是資料行的所有值 =ALL(<table>) =ALL(<table>,<table>[<column>],<table>[<column>],...)
FILTER 篩選表格中符合條件的資料列 *** 通常搭配整個資料表進行運算的公式 = FILTER(<table>,<filter>)

ALL

忽略所有套用的篩選條件(刪除篩選條件,擴大篩選範圍)
ex: All銷售量 = calculate( [銷售量],all('銷售數據表'))
引用的資料行必須來自同一張表,若要多張來源,就要用all(),all(),all()

all(資料表)

3_售價_all = calculate('交易資料'[1_售價_sumx], all('交易資料'))

3_成本_all = calculate('交易資料'[1_成本_sumx], all('交易資料'))

3_大筆_售價_all = calculate('交易資料'[1_售價_sumx], filter('交易資料','交易資料'[數量]>=50), all('交易資料'))
或是
3_大筆_售價_all = CALCULATE('交易資料'[1_售價_sumx],'交易資料'[數量]>=50,all('交易資料'))

Allexcept

除了指定列之外,清除篩選條件,也就是「除之外」
ex: Allexcept = calculate([銷售量],allexcept('產品表','產品表'[杯型]))
杯型對資料篩選有影響,而其他不會對資料篩選有影響

Allselceted

對表中所顯示的篩選條件執行清除篩選,而其他篩選條件皆保留

如何回傳個別項目數量?

sum公式回傳來得全部總和,那如何針對個別項目加總?

FILTER-進階篩選器

篩選器函數,無法單獨使用,通常與Calculate搭配,也可以與某些彙總函數搭配
例如 Countrows(Filter(資料表,篩選條件))來計算表的列數(筆數)

篩選表格中符合條件的資料列
FILTER('表',篩選條件)

何時會用到? 因之前的Calculate的條件只能針對固定值 (>10;=10;<>10 ..etc)
若要進一步判定就需用到Filter函數。
(可偵測資料行、量值、公式)

過濾 => CALCULATE('銷售'[加總],FILTER('銷售','銷售'[銷售數量]>10))
判定 => CALCULATE('銷售'[加總],FILTER('銷售','銷售'[銷售數量]>'銷售'[銷售目標]))

filter(資料表,篩選器)

2_大筆_售價 = calculate('交易資料'[1_售價_sumx], filter('交易資料','交易資料'[數量]>=50))

isfiltered

isfiltered('交易資料'[店家名稱])
判斷有無篩選

4_分店名_卡片 = if(isfiltered('交易資料'[店家名稱]),VALUES('交易資料'[店家名稱]),"未篩選")

4_分店營業額_卡片 = if(isfiltered('交易資料'[店家名稱]),'交易資料'[1_售價_sumx],"未篩選")


3_目標值 = {一個固定值, Ex: 300000}


日期智慧範圍

在使用這些公式前,需要先定義日期資料表
還有兩條限制
1. 必須為唯一值
2. 資料必須為連續值,不可有間隔

> 除非日期資料有符合限制的條件,才考慮使用日期智慧範圍

名稱 功用
PREVIOUSDAY 傳回前一日
PREVIOUSMONTH 傳回前一月
PREVIOUSQUARTER 傳回前一季
PREVIOUSYEAR 傳回前一年

PARALLELPERIOD 平移期間

https://docs.microsoft.com/zh-tw/dax/parallelperiod-function-dax
PARALLELPERIOD(<dates>,<number_of_intervals>,<interval>)



8_上期_年 = CALCULATE('交易資料'[1_售價_sumx],PARALLELPERIOD('交易資料'[日期].[Date],-1,YEAR))
8_季度_上期 = CALCULATE('交易資料'[1_售價_sumx],PARALLELPERIOD('交易資料'[日期].[Date],-4,QUARTER))
8_月_上期 = CALCULATE('交易資料'[1_售價_sumx],PARALLELPERIOD('交易資料'[日期].[Date],-12,MONTH) )


parallelperiod(日期,間隔數(可為負),間隔)

8_年度_上期 = calculate('交易資料'[1_售價_sumx], parallelperiod('交易資料'[日期].[Date],-1,year))

8_季度_上期 = calculate('交易資料'[1_售價_sumx], parallelperiod('交易資料'[日期].[Date],-4,quarter))

8_月_上期 = calculate('交易資料'[1_售價_sumx], parallelperiod('交易資料'[日期].[Date],-12,month))


營收成長率

營收成長率的計算方式,可以分為:營收年增率(YoY)、營收季增率(QoQ)、營收月增率(MoM)
主要是將目前的總收入與某一時期(月、季、年)來進行比較,可以使不同公司(尤其是同行或市場中)之間的比較更容易,常用來衡量一間公司的成長與發展


YoY公式

營收年增率(Year on Year,YoY)

=(當年營收-去年營收)/去年營收x100%

營收季增率(Quarter On Quarter,QoQ)

=當季營收-上季營收)/上季營收x100%

營收月增率(Month on Month,MoM)

=(當月營收-上月營收)/上月營收100%

YoYYoY年增長率(Year-on-year percentage,YoYYoY),是指當期的數據較去年同期變動多少,例如:甲公司今年11月營收115億元,去年11月營收為100億元,則營收YoY為15%
去(前)年同期都算YoY

說明

  • 年增率的參考意義會比月增率高
    • 原因1.產業有淡旺季之分,若和上個月、上一季比較很可能會有誤差
    • 原因2.每月份天數不同,會產生誤差

其中,年營收有時候會用近四季營收合來計取代,年營收成長率和淨利成長率不一定相同,從季營收YoY來評估企業成長,因為年營收一年才能看一次,一般我們會使用季營收YoY來評估近期成長。

3_20201101_20211031 = CALCULATE('交易資料'[0_sumx],DATESBETWEEN('交易資料'[日期],"2020/11/1","2021/10/31"))


營收年增率(Year on Year,YoY)

=(當年營收-去年營收)/去年營收x100%


營收季增率(Quarter On Quarter,QoQ)

=當季營收-上季營收)/上季營收x100%

與去年同期的季比較


營收月增率(Month on Month,MoM)

=(當月營收-上月營收)/上月營收100%

與去年同期的月比較


YoY寫法練習

6_營收年增率 = ('交易資料'[6_2021年度]-'交易資料'[6_2020年度])/'交易資料'[6_2020年度]

6_2021年度 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2021)

6_2020年度 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2020)

6_4月YoY = ('交易資料'[6_2021-4月]-'交易資料'[6_2020-4月])/'交易資料'[6_2020-4月]

6_2021-4月 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2021,'交易資料'[月]=4)

6_2020-4月 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2020,'交易資料'[月]=4)

6_第一季YoY = ('交易資料'[6_2021年度第一季]-'交易資料'[6_2020年度第一季])/'交易資料'[6_2020年度第一季]

6_2021年度第一季 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2021,'交易資料'[季]=1)

6_2020年度第一季 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2020,'交易資料'[季]=1)

或是

6_2021年度第一季 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2021,'交易資料'[月]<4)

6_2020年度第一季 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2020,'交易資料'[月]<4)

5_202101 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2021,'交易資料'[月]=1)

5_202001 = calculate('交易資料'[1_售價_sumx], '交易資料'[年度]=2020,'交易資料'[月]=1)

達成率

https://www.itsfun.com.tw/達成率/wiki-422322


if和switch邏輯判斷

if(條件,則,則) 第二個則可以省略,即傳回空值
switch 多條件
實例:
switch = switch(TRUE(),
'1-4月'[地區]="新北","北區",
'1-4月'[地區]="台中","中區",
'1-4月'[地區]="桃園","北區",
'1-4月'[地區]="上海","大陸",
"")
另一寫法 = switch('1-4月'[地區],"新北","北區","台中","中區","桃園","北區","")

區域 = switch(TRUE(),
    '店家資料'[縣市]="台北市", "北區",
    '店家資料'[縣市]="新北市", "北區",
    '店家資料'[縣市]="台中市", "中區",
    "南區"

或是

區域 = switch('店家資料'[縣市],
    "台北市", "北區",
    "新北市", "北區",
    "台中市", "中區",
    "南區"

小技巧:shift + enter 可以維持縮排


縣市2 = if('店家資料'[縣市]="高雄市", "Kaohsiung", '店家資料'[縣市])


餐點滿意度文字 = SWITCH(TRUE(),
'表單回應 1'[餐點滿意度]=1,"非常不滿意",
'表單回應 1'[餐點滿意度]=2,"不滿意",
'表單回應 1'[餐點滿意度]=3,"尚可",
'表單回應 1'[餐點滿意度]=4,"滿意","非常滿意")


課程滿意度文字 = SWITCH(TRUE(),
'表單回應 1'[課程滿意度?]=1,"非常不滿意",
'表單回應 1'[課程滿意度?]=2,"不滿意",
'表單回應 1'[課程滿意度?]=3,"尚可",
'表單回應 1'[課程滿意度?]=4,"滿意",
"非常滿意")

另一寫法
課程滿意度另一寫法 = SWITCH('表單回應 1'[課程滿意度?],
1,"非常不滿意",
2,"不滿意",
3,"尚可",
4,"滿意",
"非常滿意")


薪資分群區間 = SWITCH(TRUE(),
'人事資料表'[薪資分群]=<20000,"2萬以下",
'人事資料表'[薪資分群]=<40000,"2萬到4萬",
'人事資料表'[薪資分群]=<60000,"4萬到6萬",
"賺很多")

  • 關聯函數
    • Related
    • Relatedtable
    • lookupvalue
  • 時間智慧
  • 日曆表使用技巧

DAX進階

  • Values
  • Hasonevalue
  • Earlier
  • X函數SumX
  • RankX和TopN
  • 輔助表使用
  • Var/Return
  • DAX查詢語言

Profits YoY% Shape = IF([Profits YoY%]>0,UNICHAR(9650),UNICHAR(9660))
https://www.dotblogs.com.tw/RYNote/2021/01/18/172048

篩選器

視覺篩選器:所選的物件
頁面篩選器:整個頁面
報表篩選器:整個Pbix


講師連絡方式

燕秋老師教學頻道-FB https://www.facebook.com/Hyonith2014/
燕秋老師教學頻道-YT https://www.youtube.com/燕秋老師教學頻道