📊 為什麼資料明明存在,圖表卻不更新? 一個資料分析工具「看不見錯誤卻直接關閉」的真實工程案例解析
前言:
「我只是想過濾小於 0.01% 的資料,為什麼整個系統直接消失?」
這篇文章,寫給三種人:
- 🧠 完全不懂程式,但每天要看報表的人
- 🧑💻 工程師,但第一次碰到資料分析工具 Script
- 🏢 主管 / PM,看不懂錯誤,只看到系統「怪怪的」
這不是理論文,而是一個 真實發生在企業資料分析系統中的工程事故。
一、問題現象(給完全不懂技術的人看)
事情是這樣的:
📌 使用者在報表中📌 希望「只顯示比例大於 0.01% 的資料」
📌 在畫面上「手動設定」時可以正常運作
📌 但一按「自動化按鈕」
📌 圖表會更新、但資料卻完全沒有被過濾
📌 有時甚至「整個系統直接跳掉」
❗ 不會顯示錯誤訊息
更詭異的是:
- ❌ 沒有錯誤訊息
- ❌ 沒有警告
- ❌ 連系統 log 都沒有留下
二、為什麼「手動可以、程式不行」?
這是很多非工程背景的人最困惑的地方。
🔍 關鍵原因一句話版:
手動操作會偷偷幫你做「資料清洗」,但程式不會。
用生活例子來說:
你在 Excel 裡看到:
0.01
0.00
—
NaN
∞
人眼會自動忽略「奇怪的東西」。
但對程式來說:
-
—不是數字 -
NaN不是數字 -
∞不是數字 -
"0.01%"也不是數字
👉 只要程式嘗試把它們當成數字,就會直接出錯。
而在某些資料分析工具中:
❗ 發生錯誤時❗ 不會顯示錯誤訊息
❗ 而是「直接中斷整個腳本」
👉 系統會直接中止 Script
👉 不顯示錯誤
👉 不寫 log
這正是為什麼你會看到:
- 圖表不更新
- log 不顯示
- 系統彷彿「什麼都沒發生」
三、真正的工程問題在哪?
❌ 錯誤的工程假設是:
「這個欄位看起來是數字,所以一定可以拿來比較」
✅ 但在真實系統中,資料可能來自:
- 多個資料庫
- 多次計算
- 多個轉換流程
- 人工匯入
- 例外除零
- 系統預設值
導致 同一欄位裡,混雜了:
- 真正的數字
- 空值
- 字串
- 特殊符號
四、為什麼系統會「直接跳掉」?
這是很多人沒注意到的重點。
在某些企業級 BI 工具中:
⚠️ Script 一旦發生未處理的錯誤👉 系統會直接中止 Script
👉 不顯示錯誤
👉 不寫 log
👉 使用者只看到「畫面沒變」
📌 不只是圖表
這在工程上稱為:
❗「未捕捉例外(Unhandled Exception)」
五、工程師真正該怎麼寫?
❌ 錯誤寫法(觀念層級說明)
如果這個值 <= 0.01
就刪掉
👉 這是假設「資料一定是乾淨的」
✅ 正確工程寫法(白話說明)
工程師真正該做的是:
- 先檢查是不是空的
- 再檢查是不是能轉成數字
- 不能轉的,直接視為無效資料
- 所有轉換都要防呆
- 任何錯誤都要被捕捉,不可以讓系統自己死掉
🔐 去識別化後的「安全工程邏輯示意」
對每一筆資料:
如果是空值 → 移除
如果是非數字 → 移除
如果轉成數字後 ≤ 0.01 → 移除
其餘 → 保留
並且整個流程必須包在:
就算出錯,也不能讓系統直接關閉
六、為什麼「手動 Filter」看起來比較聰明?
因為圖形介面會:
- 自動忽略 NaN
- 自動忽略空值
- 自動轉型
- 自動避免除錯誤
👉 但 Script 是「裸奔的」
七、工程師學到的三個重要教訓
① 資料「看起來是數字」≠ 真的是數字
② 沒錯誤訊息,不代表沒錯
③ 系統會不留情地把 Script 直接殺掉
八、給非工程背景的結論版本
如果你是:
- 👩💼 使用者
- 👨💼 主管
- 📊 看報表的人
你只需要記住一句話:
不是資料沒有被過濾,而是程式在過濾之前就已經「死掉了」。
九、結語:
為什麼這類問題在企業中很常見?
因為:
- 報表工具「太好用」
- 大家以為「拖拉設定 = 程式邏輯」
- 實際上兩者完全不同
這也是為什麼:
📌 資料分析📌 不只是圖表
📌 而是完整的軟體工程
留言
張貼留言