📊 為什麼設定「BIN 比例門檻」後,畫面上還是出現空的 BIN 欄位?

 

🧠 前言:

「我明明設定 BIN 加起來要超過 0.1% 才顯示,
為什麼畫面上還是看到一堆 0.00% 或空白的 BIN?」

如果你有做過 BI 報表、資料視覺化或製造數據分析,一定遇過這種情況:

  • SQL 裡已經寫了門檻條件
  • 查出來的資料「理論上」應該被過濾掉
  • 但報表畫面上 BIN 欄位還是全部出現,甚至看起來像沒資料

這不是你眼花,也不是系統壞掉,
而是 「資料過濾」與「畫面顯示」是兩件完全不同層級的事情


🧩 先用白話講整個資料流程(給完全沒寫過程式的人)

我們把整個系統想成三個步驟:

① 資料庫查資料(SQL)

👉 決定「哪些資料列要留下來」

② 系統加工資料(資料轉換 / 彙總)

👉 把資料整理成「適合報表顯示的形狀」

③ 報表畫面顯示(表格 / 圖表)

👉 決定「哪些欄位要顯示在畫面上」

💡 關鍵重點:

就算你在第 ① 步過濾掉資料
第 ③ 步如果「硬把欄位加進畫面」,
那些欄位一樣會出現(只是值是空或 0)


❌ 常見誤解:

###「我在 SQL 裡設定門檻,欄位就不會顯示了」

這是 90% 工程師一開始都會犯的錯誤

實際上:

  • SQL 只能控制「資料列」
  • 報表系統(例如 BI 工具)
    • 不會自動幫你隱藏「全空的欄位」

🔍 真正的三大問題根源(工程師角度)


❗ 問題一:你只過濾「資料」,但沒有過濾「欄位」

很多系統會這樣做(示意):

「把所有 BIN 欄位都加到畫面上」

即使某個 BIN:

  • 沒有任何資料
  • 全部是 0
  • 顯示成 0.00%

👉 它還是會被顯示出來

📌 解法思維(概念):

在顯示前,先計算「整個欄位的總和」,

小於門檻的欄位,直接不要顯示。



❗ 問題二:資料 Join(合併)時,用錯層級的 Key

這個是最致命、也最難察覺的問題。

常見錯誤情境:

  • 原始資料是「機台 + BIN」等細節資料
  • 卻只用「產品 ID」去合併

結果會發生什麼?

➡ 系統會把 不該屬於這一列的 BIN 資料硬塞進來
➡ 產生一堆「理論上不該存在的 BIN 欄位」

📌 白話比喻:

就像你只用「姓氏」來合併全班成績,

張三的分數就會跑到張四、張五身上。



❗ 問題三:門檻看起來很大,其實非常小

很多人看到:

> 0.01

會以為是 1%

但如果你是這樣算的:

(數量 / 總數) * 100

那:

寫法 真正意義
0.01 0.01%(非常小)
0.1 0.1%
1 1%

👉 所以「只要有 1 筆資料」就可能通過門檻
👉 顯示時再被格式化成 0.00%,看起來像沒資料


✅ 正確的工程師解法(不依賴任何特定系統)

✔ 解法一:資料層先過濾「不該存在的 BIN」

示意邏輯(非真實程式):

只留下「整體占比超過門檻」的 BIN

✔ 解法二:顯示層再檢查「整欄是否有意義」

對每個 BIN 欄位:
如果整欄加總 <= 門檻
不顯示該欄位

📌 這一步是 SQL 做不到的
一定要在「報表顯示前」做。


✔ 解法三:合併資料時「Key 層級一定要一致」

工程原則一句話:

資料從哪個層級來,就要用哪個層級去 Join


資料內容 合併 Key
產品 + 機台 + BIN 三個都要
只有產品 只能用產品

🧠 工程師總結(這句很重要)

SQL 是在決定「資料對不對」

報表邏輯是在決定「畫面好不好看」


只做其中一半,結果一定怪。


✨ 結語:為什麼這個問題很常見?

因為:

  • 資料工程師看 SQL
  • 使用者看畫面
  • 中間那層「顯示邏輯」最容易被忽略

真正穩定、可信的 BI 系統,
一定是 資料邏輯 + 顯示邏輯 同時設計

留言

這個網誌中的熱門文章

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

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

🔎EF Core 連 Oracle 出現 ORA-00600 [kpp_concatq:2] 的完整排錯指南(含 EF Core ToString/CultureInfo 錯誤)