📊 為什麼資料明明存在,圖表卻不更新? 一個資料分析工具「看不見錯誤卻直接關閉」的真實工程案例解析

前言:

「我只是想過濾小於 0.01% 的資料,為什麼整個系統直接消失?」

這篇文章,寫給三種人:

  • 🧠 完全不懂程式,但每天要看報表的人
  • 🧑‍💻 工程師,但第一次碰到資料分析工具 Script
  • 🏢 主管 / PM,看不懂錯誤,只看到系統「怪怪的」

這不是理論文,而是一個 真實發生在企業資料分析系統中的工程事故


一、問題現象(給完全不懂技術的人看)

事情是這樣的:

📌 使用者在報表中
📌 希望「只顯示比例大於 0.01% 的資料」
📌 在畫面上「手動設定」時可以正常運作
📌 但一按「自動化按鈕」
📌 圖表會更新、但資料卻完全沒有被過濾 
📌 有時甚至「整個系統直接跳掉」


更詭異的是:

  • ❌ 沒有錯誤訊息
  • ❌ 沒有警告
  • ❌ 連系統 log 都沒有留下

二、為什麼「手動可以、程式不行」?

這是很多非工程背景的人最困惑的地方。

🔍 關鍵原因一句話版:

手動操作會偷偷幫你做「資料清洗」,但程式不會。


用生活例子來說:

你在 Excel 裡看到:

0.01
0.00

NaN

人眼會自動忽略「奇怪的東西」。

但對程式來說:

  • 不是數字
  • NaN 不是數字
  • 不是數字
  • "0.01%" 也不是數字

👉 只要程式嘗試把它們當成數字,就會直接出錯。

而在某些資料分析工具中:

❗ 發生錯誤時
❗ 不會顯示錯誤訊息 
❗ 而是「直接中斷整個腳本」


這正是為什麼你會看到:

  • 圖表不更新
  • log 不顯示
  • 系統彷彿「什麼都沒發生」

三、真正的工程問題在哪?

❌ 錯誤的工程假設是:

「這個欄位看起來是數字,所以一定可以拿來比較」

✅ 但在真實系統中,資料可能來自:

  • 多個資料庫
  • 多次計算
  • 多個轉換流程
  • 人工匯入
  • 例外除零
  • 系統預設值

導致 同一欄位裡,混雜了:

  • 真正的數字
  • 空值
  • 字串
  • 特殊符號

四、為什麼系統會「直接跳掉」?

這是很多人沒注意到的重點。

在某些企業級 BI 工具中:

⚠️ Script 一旦發生未處理的錯誤
👉 系統會直接中止 Script
👉 不顯示錯誤
👉 不寫 log 
👉 使用者只看到「畫面沒變」


這在工程上稱為:

❗「未捕捉例外(Unhandled Exception)」


五、工程師真正該怎麼寫?

❌ 錯誤寫法(觀念層級說明)

如果這個值 <= 0.01
就刪掉

👉 這是假設「資料一定是乾淨的」


✅ 正確工程寫法(白話說明)

工程師真正該做的是:

  1. 先檢查是不是空的
  2. 再檢查是不是能轉成數字
  3. 不能轉的,直接視為無效資料
  4. 所有轉換都要防呆
  5. 任何錯誤都要被捕捉,不可以讓系統自己死掉

🔐 去識別化後的「安全工程邏輯示意」

對每一筆資料:
如果是空值 → 移除
如果是非數字 → 移除
如果轉成數字後 ≤ 0.01 → 移除
其餘 → 保留

並且整個流程必須包在:

就算出錯,也不能讓系統直接關閉

六、為什麼「手動 Filter」看起來比較聰明?

因為圖形介面會:

  • 自動忽略 NaN
  • 自動忽略空值
  • 自動轉型
  • 自動避免除錯誤

👉 但 Script 是「裸奔的」


七、工程師學到的三個重要教訓

① 資料「看起來是數字」≠ 真的是數字

② 沒錯誤訊息,不代表沒錯

③ 系統會不留情地把 Script 直接殺掉


八、給非工程背景的結論版本

如果你是:

  • 👩‍💼 使用者
  • 👨‍💼 主管
  • 📊 看報表的人

你只需要記住一句話:

不是資料沒有被過濾,而是程式在過濾之前就已經「死掉了」。


九、結語:

為什麼這類問題在企業中很常見?

因為:

  • 報表工具「太好用」
  • 大家以為「拖拉設定 = 程式邏輯」
  • 實際上兩者完全不同

這也是為什麼:

📌 資料分析
📌 不只是圖表
📌 而是完整的軟體工程

留言

這個網誌中的熱門文章

🔍Vue.js 專案錯誤排查:解決 numericFields is not defined 與合併儲存格邏輯最佳化

🖥️遠端桌面連線完整新手指南:Windows RDP、Chrome Remote Desktop、AnyDesk、TeamViewer 一次搞懂

如何在 Word 插入漂亮的程式碼區塊—使用Editor.md