🔧 為什麼 Spotfire 的 Yield Summary 沒有 BIN?

一、問題背景:

「資料明明存在,為什麼畫面什麼都沒有?」

在半導體或製造業的資料分析中,Yield Summary(良率彙總) 幾乎是每天都會看的報表。
其中最重要的一塊,往往是 BIN(失敗分類) 的分布與 Pareto 圖。

但實務上,常會遇到這個情況:

❓「資料庫有 BIN 資料」
❓「下拉選單也選了 BIN」
❓「程式執行沒有錯誤」

👉 但 Yield Summary 表格與圖表就是空的


這篇文章會一步一步說明:
👉 為什麼「看起來一切正常」,卻完全顯示不出 BIN


二、初學者最容易誤會的關鍵觀念

❌ 常見錯誤理解

很多人會以為:

「只要欄位名稱是 BIN1, BIN2, BIN19, 用程式判斷『是不是 BIN 開頭』就好。」


但在 Spotfire 裡,這個想法非常危險


三、真正的關鍵:Pivot 後「欄位名稱不是你以為的樣子」

🎯 Spotfire 的 Pivot 是怎麼產生欄位的?

在 Yield Summary 中,BIN 欄位通常是 Pivot(樞紐分析) 的結果。

簡化來說,邏輯是:

原始資料 Pivot 後
SBIN_NAME = BIN19 產生一個「欄位」
SBIN_NAME = 19 產生一個「欄位」
SBIN_NAME = BIN 19 產生一個「欄位」

👉 欄位名稱 =「資料內容本身」
👉 而不是固定的 BINxx 命名規則


四、為什麼「明明是 BIN,卻抓不到」?

🔍 問題其實出在這裡:

  • 使用者選擇的 BIN 清單是:

    BIN1, BIN5, BIN19
  • 但 Yield Summary 產生的欄位實際名稱可能是:

    "1" "BIN 19" "Bin19 "

⚠️ 對電腦來說,這些「全部不同」

人眼看 電腦看
BIN19 BIN19
BIN 19 BIN␣19
BIN19␣ BIN19␣

➡️ 所以只要你用「字串完全比對」
➡️ 就會全部比對失敗


五、為什麼除錯時「什麼都沒印出來」?

很多工程師會這樣除錯:

「只印出包含 BIN 的欄位」


但如果 實際欄位根本沒有包含字串 BIN
那你得到的結果就會是:

(完全沒有任何輸出)

👉 這不是因為資料沒來
👉 而是因為「你檢查的條件本身就錯了」


六、正確觀念:不要猜欄位名,要「正規化後再比對」

✅ 正確做法(概念說明,不含原始程式)

步驟 1:把所有名稱轉成「統一格式」

  • 去掉前後空白

  • 全部轉成大寫

  • 移除中間的空白

  • 移除特殊不可見字元

例如:

原始值 正規化後
BIN 19 BIN19
bin19 BIN19
BIN19 BIN19

步驟 2:

  • 把「使用者選擇的 BIN 清單」也做一樣的正規化

  • 再用「正規化後的值」去比對 Yield Summary 欄位

👉 這樣才能 100% 對齊


七、為什麼這個問題在 Yield Summary 特別容易發生?

因為 Yield Summary 通常具備三個特性:

  1. 欄位是動態產生的(Pivot)

  2. 欄位名稱來自資料內容(SBIN_NAME)

  3. 資料來源可能來自不同系統 / 廠商

只要其中一個地方:

  • 多一個空白

  • 少一個字母

  • 大小寫不同

👉 結果就會「全部消失」


八、實務建議(工程師一定要記住)

✅ 三個黃金原則

  1. 不要用 startswith("BIN") 來判斷

  2. 一定要先印出「所有欄位名稱」再決定邏輯

  3. 所有字串比對都要先正規化


九、結論:

「不是 Spotfire 壞掉,是我們太相信眼睛」

這類問題最可怕的地方在於:

❌ 沒有錯誤
❌ 沒有 Exception
❌ 看起來資料都有

但畫面就是空的


真正的原因往往不是資料、不是 SQL、也不是效能,
而是 「欄位名稱的理解錯誤」


🎯 一句話總結

在 Spotfire 中,Pivot 產生的欄位名稱 ≠ 你以為的欄位名稱
👉 永遠用「實際欄位 + 正規化比對」,
👉 才能讓 Yield Summary 的 BIN 正確顯示。

留言

這個網誌中的熱門文章

🔍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 錯誤)