跳到主要內容跳到頁尾

儀表板的圖表為什麼怪怪的:彙總表、下拉選單與版面配置

10 分鐘閱讀Lv.4 進階摘要與日期

先把明細彙總成小表,再接到圖表。用同一張茶飲訂單,跟著做出會隨下拉選單更新的儀表板。

發布 更新

文章目錄

儀表板做好了,切一下下拉選單,圖表卻變成只剩標題、沒有資料;或是同一個地區冒出好幾根長條,得自己心算加起來。這些怪現象多半不是圖表設定的問題,是圖表接到的資料長得不對。

怎麼插入圖表、挑哪一種類型,圖表完全指南 已經講過,這邊不重複,直接從儀表板會踩的坑開始。我自己做儀表板,第一個檢查的就是「圖表到底框了哪一塊」。

後面的例子都用這張茶飲訂單,放在 A1:D11,金額單位是千元:

日期地區品項金額
2026/07/04北區蘋果紅茶37
2026/07/18南區青茶52
2026/07/25北區鮮奶茶28
2026/08/06中區蘋果紅茶44
2026/08/13北區青茶19
2026/08/22南區蘋果紅茶63
2026/09/02中區鮮奶茶31
2026/09/09北區蘋果紅茶58
2026/09/15南區鮮奶茶22
2026/09/27中區青茶47

為了方便重現,明細和彙總表都放在同一個工作表,彙總表在 F 欄以後。實際做儀表板時,建議把明細、彙總、儀表板拆成三個分頁,拆法在 三層架構 講過。

先決定版面,再決定資料

動手接圖表以前,我會先在紙上畫一張版面:哪裡放 KPI、哪裡放趨勢、哪裡放明細。下面這張就是我最常用的排法。

儀表板版面:最上面是篩選列,下面一排三張 KPI 卡,接著左邊月趨勢折線、右邊地區排名長條圖,最底下是明細表,標示 1 到 4 的視線順序← 左右滑動看完整的圖,點圖可放大

圖:讀的人從 KPI 開始,往下依序看到趨勢、排名,要查單筆才會看到最底下的明細。

篩選列只放控制項(下拉選單),KPI 只放一個數字加一個變化,趨勢和排名各一張圖,明細表放最底下。我個人會把整頁控制在 4 到 6 個區塊,再多就是在逼讀的人找重點,這樣拆成第二個分頁比較好。

版面定了,每個區塊要的資料也就定了:KPI 要 1 個數字,趨勢要每月 1 列,排名要每個地區 1 列。這些全都不是明細本身,要先彙總。

圖表不要直接接明細

把 A1:D11 整塊丟給圖表,每一列明細會變成一根長條。北區在 7 月有 2 筆、8 月 1 筆、9 月 1 筆,圖上就是 4 根北區的長條。

直接接明細:同一地區分成多根長條

先彙總:北區 142、南區 137、中區 122

開啟完整比較圖放大(新分頁)

圖:同樣的資料,左邊要自己把北區加起來,右邊的長條高度就是答案。

手算北區是 37 + 28 + 19 + 58 = 142。用 QUERY 做成地區彙總,放在 F1:

Google 試算表公式
fx

依地區加總金額,由大到小排序

=QUERY( A1:D, "select B, sum(D)" & " group by B" & " order by sum(D) desc" & " label B '地區', sum(D) '金額'" )

來看看結果:

地區金額
北區142
南區137
中區122

範圍寫 A1:D 而不是 A1:D11,之後明細新增幾列都會自動算進來。圖表只框 F1:G4 這塊,每個地區一根。QUERY 的語法在 QUERY 完整指南 有講,這邊只用到 group by、order by 和 label。

趨勢圖要每月一列,放在 I1:

Google 試算表公式
fx

依年月加總金額,YYYYMM 鍵區分跨年同月;where 排除空列

=QUERY( A1:D, "select year(A)*100+month(A)+1, sum(D)" & " where A is not null" & " group by year(A)*100+month(A)+1" & " order by year(A)*100+month(A)+1 label year(A)*100+month(A)+1 '年月', sum(D) '金額'" )
年月(YYYYMM)金額
202607117
202608126
202609158

公式裡的 where A is not null 不能省。開放範圍 A1:D 會把明細下方的空白列也一起交給 QUERY,group by 會多分出一個空白群組,結果變成標題、空白、202607、202608、202609,下面 KPI 卡抓「最後一列」的公式也會跟著抓錯。把空列擋掉,結果才會是上表的 202607、202608、202609 三列。

month() 從 0 起算,所以加 1;再把年份乘 100,組成 YYYYMM 數字鍵,例如 2026 年 10 月是 202610。只按月份號分組會把不同年度的同月合併;這裡按年月分組並排序。2026/12、2027/1、2027/12 分別保留為 202612、202701、202712。建圖時請將年月欄設為分類標籤,金額設為資料系列。

下拉選單切換,要先想沒有資料的狀況

下拉選單連動圖表的做法,圖表完全指南 的動畫已經示範過。這邊補的是兩個容易漏掉的地方:「全部」要怎麼處理,以及選到沒有資料的值會怎樣。

F7 放下拉選單(選項:全部、北區、南區、中區),F9 放品項彙總:

Google 試算表公式
fx

依 F7 的地區加總各品項金額,選「全部」就不加條件

=QUERY( A1:D, "select C, sum(D) " & IF(F7="全部", "", "where B='"&F7&"' ") & "group by C order by sum(D) desc label sum(D) '金額'" )

F7 選「北區」,手算是蘋果紅茶 37 + 58 = 95、鮮奶茶 28、青茶 19:

品項金額
蘋果紅茶95
鮮奶茶28
青茶19

切到「南區」,順序會變成蘋果紅茶 63、青茶 52、鮮奶茶 22;「全部」則是蘋果紅茶 202、青茶 118、鮮奶茶 81。我故意讓每個選項的排序都不同,這樣圖表有真的跟著動,一眼就看得出來。

字串裡的單引號要成對:where B=' 之後接 F7,再補上結尾的 '。條件值是文字,一定要用單引號包住,漏掉整條公式會直接報錯。

如果 F7 的值在明細裡找不到,例如手打成「東區」,QUERY 沒有任何符合的列,這時它不會報 #N/A,而是只回傳一列標題(品項、金額),圖表就變成只有標題、沒有資料。所以 IFERROR(QUERY(...), ...) 這種備援不會觸發,因為根本沒有錯誤。要改成判斷結果有幾列,只有標題列就給占位:

Google 試算表公式
fx

結果只有標題列(ROWS 為 1)時,回傳一列「無資料」和 0

=LET( q, QUERY( A1:D, "select C, sum(D) where B='" & F7 & "' group by C order by sum(D) desc label sum(D) '金額'" ), IF(ROWS(q)=1, {"無資料", 0}, q) )

這樣沒資料時 F9:G9 是「無資料、0」,有資料時照常顯示 QUERY 的結果。這個寫法比 IFERROR 精準,公式寫錯時錯誤仍然看得到,不會被吞掉。不過我比較常從源頭擋:F7 用「資料驗證」做成下拉選單,選項取自一份固定清單,根本打不出「東區」。作法在 資料驗證與資料品質 有說。

圖表範圍框到回傳空字串的列

另一個常見的疑問:圖表範圍框到 10 列,資料其實只有 3 列,會不會多出空白類別?

重現方式:H2:H4 打三個地區,I2:I10 全部填上這條公式,往下拉滿 9 列:

Google 試算表公式
fx

H 欄有值才加總,沒有就回傳空字串

=IF(H2="","",SUMIFS($D$2:$D,$B$2:$B,H2))

H5:H10 是空的,所以 I5:I10 都回傳 ""。看起來是空格,可是 得到 9,只有 是 3。我把圖表範圍框到 H1:I10 實測,圖表只畫出 3 根長條,沒有出現空白類別。

不過這種每列各放一條公式、靠 "" 撐出來的表,範圍和公式要對得很準,我還是偏好讓資料來源就是 QUERY 的輸出,它只溢出真正有資料的列。

我自己的習慣是:圖表一律接 QUERY 的輸出,不接那種每列各放一條公式的表。

日期是文字,趨勢圖就不會照時間排

從別的系統匯出的日期,常常看起來是 2026/07/04,其實是文字。判斷方式用 ISNUMBER:真正的日期是 TRUE,文字日期是 FALSE。

假設 A2 是文字 2026/07/04, 得到 FALSE。拿它當條件的 SUMIFS 也會算成 0:

得到 0,不會有錯誤。這跟 SUMIFS 進階陷阱 講的是同一件事。

放到圖表上又是另一種現象:X 軸是真正的日期,而且橫軸的「將標籤視為文字」沒有勾,折線圖才會變成時間軸,7/4、7/18、7/25 之間的距離才照實際天數縮放;文字日期只是一個個標籤,每個點等距,順序就是列的順序。細節見 五組資料,五種圖。

文字日期:三個點等距

真正日期:間距反映 14 天與 7 天

開啟完整比較圖放大(新分頁)

圖:左邊是文字日期,點等距;右邊是真日期,間隔跟著天數走。

修法是旁邊加一欄輔助欄 , 就會得到 TRUE,之後拿輔助欄當 X 軸和條件。只改儲存格的數字格式不會讓文字變成日期,細節在 日期與時間基礎。

堆疊圖,容易看錯的是中間那一層

三個地區在 7 到 9 月的金額,整理成這張表(空白的 7 月中區代表沒有訂單,以 0 計):

月北區南區中區
7 月65520
8 月196344
9 月582278

北區 9 月的 58 可以這樣算出來:

Google 試算表公式
fx

北區 9 月的金額,結束日用小於下個月 1 號

=SUMIFS( D2:D, B2:B, "北區", A2:A, ">="&DATE(2026, 9, 1), A2:A, "<"&DATE(2026, 10, 1) )

得到 58。把這張表畫成堆疊柱狀圖,總量看得很清楚:117、126、158 一路上升。但如果有人想問「南區這三個月怎麼走」,就很難回答了。

堆疊直條:南區每月的起點不同,要比較厚度

折線:南區 52 → 63 → 22 的變化直接可見

開啟完整比較圖放大(新分頁)

圖:同一份資料,左邊要比較「厚度」,右邊比較「高度」。

堆疊圖只有最底下那一層共用同一條基準線,其他層都浮在別人上面。南區 52、63、22 這三段,底邊分別在 65、19、58,眼睛得自己扣掉底邊才能比。我的做法是:想看總量加組成,用堆疊,層數不超過 3 層,順序固定;想比各區的走勢,就改成每區一條折線。

配色上,我把北區用 #5B7A52、第二個系列南區用 #6B839E、第三個用暖灰;#A69272 只留給警示,像是「低於目標的那一格」,不拿來當一般系列的顏色。

KPI 卡要跟著新資料走

KPI 卡最常見的毛病是參照寫死。本月金額寫成 =J4,10 月資料進來後,它還是指著 9 月。

先清除前面空字串示範的 H1:I10,再把年月彙總公式放回 I1。彙總表在 I1:J4(年月、金額),本節本月/上月指有資料的最後兩個月份;缺月不會補零,尚未結束月份的部分金額也不能當作完整月來比較。

Google 試算表公式
fx

本月金額:取彙總表最後一列

=INDEX(J2:J, COUNTA(J2:J))

得到 158。上月:

Google 試算表公式
fx

上月金額:取彙總表倒數第二列

=INDEX(J2:J, COUNTA(J2:J)-1)

得到 126。接著把變化組成一行文字,本月放 L1、上月放 L2:

Google 試算表公式
fx

組合箭頭、金額差與百分比變化

=IF(L1>=L2,"▲ ","▼ ")&ABS(L1-L2)&" ("&TEXT((L1-L2)/L2,"+0.0%;-0.0%")&")"

得到 ▲ 32 (+25.4%),算式是 (158 - 126) / 126 = 0.2540。如果明細新增一筆 10 月的資料(北區青茶 20),QUERY 多出一列「202610、20」,本月會自己變成 20,上月變成 158,公式不用動。

完成的儀表板:上方三張 KPI 卡,下方左邊月趨勢折線、右邊地區排名長條圖

圖:把前面的彙總表接上圖表和 KPI 之後的儀表板分頁。

動手練習

1

找出錯在哪

同事做了下拉選單連動圖表,F7 選「北區」之後,F9 一直沒有資料,她寫的公式是:

請說明原因,並改成能正常運作的公式。

想把圖表連動、篩選器和資料透視表一起做成一份互動報表,可以接著看 互動式報表設計。

先把自己儀表板上的圖表範圍點開來看看吧!我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

這篇在技能樹的 Lv.4「進階應用」,模組「用圖表說清楚你的數據」(第 1/1 篇)。

回到技能樹

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。