🐬Spotfire 報表的 BIN 為什麼顯示不出來?0.00 一堆、選兩個 Lot 只剩一個的完整排查指南(含 SQL 與 IronPython 思路)
內容
一、你看到的現象其實很典型:BIN 不見、(Empty) 出現、0.00 很多、選兩個 Lot 卻只剩一個
很多人第一次在 Spotfire 做 Yield / BIN 報表會遇到類似狀況:
-
Yield Summary 表格應該要有 BIN1、BIN5、BIN36…,結果完全沒出現
-
表格或 Pivot 後的欄位出現 (Empty)
-
BIN 欄位很多都顯示 0.00,看起來像「資料明明篩掉了 0,怎麼還是 0?」
-
明明選了兩筆(兩個 Lot),結果最後只剩一筆出現在 Yield Summary
這些問題看似四散,但本質都可以用「資料處理管線」的概念一次理解。
二、先用最簡單的比喻:Spotfire 就像一台「多段加工機」
你可以把整個流程想成:
-
資料庫(SQL):把原料(資料)運進來
-
Spotfire 的 Join/Pivot:把原料組裝成你要的形狀
-
視覺化(Table/Chart):把結果畫成表格與圖表
-
互動(Marking/Filtering):你點了圖,其他視覺會跟著變
只要其中一段「加工」做錯,就會出現你看到的怪狀況。
三、最重要的核心:為什麼會出現 (Empty)?
Spotfire 的 Pivot 常見邏輯是:
-
你指定「分類欄位」當作 Pivot 後的欄名來源
-
如果那個分類欄位是空的(Null/空字串),Spotfire 就會把它統一歸類成 (Empty)
✅ 直覺理解
-
你想要欄位叫:BIN1、BIN2、BIN36
-
但你用來命名的那個欄位是空的
-
Spotfire 只好產生一個叫 (Empty) 的欄位
常見原因(最常見)
你用 Join 把 BIN 名稱(例如 “BIN36”)拼進來,但 Join key 對不上,導致名稱欄位全變空。
四、為什麼 SQL 已經過濾掉 0,畫面還是 0.00?
這也是新手最容易誤會的地方。
✅ 觀念:0.00 不一定代表「資料庫裡有 0」
它可能是:
-
Pivot 後缺值(原本是空)被格式化成 0.00
-
上面表格顯示的是「比率」,下面圖顯示的是「計數」或「百分比」,兩邊不是同一個數字
-
小數位與四捨五入:0.004 可能顯示成 0.00、0.006 顯示成 0.01
所以:SQL 的 COUNT > 0 只能保證「計數不是 0」,但不保證「比率顯示不是 0.00」。
五、為什麼選兩個 Lot 最後只剩一個?
這通常不是使用者真的沒選到,而是資料處理時被「合併」或被「刪掉」。
典型原因 1:Join 用了「不夠唯一」的欄位當 Key
例如有人會用「檔名」或「某個描述欄位」當 Key,但兩筆資料剛好一樣,結果 Join 只匹配到一筆。
典型原因 2:Join 設定是「只取第一筆匹配」
有些 Join 模式是「左表只取單筆匹配」,遇到重複 Key 就可能只保留其中一筆。
典型原因 3:你後面又做了「刪除空值列」
如果其中一筆在 Join 後某欄位變成空,後面又有「空值就刪除」,那筆就消失了。
六、工程師排查 SOP:用 3 個問題快速定位
1)Pivot 的分類欄位是不是空?
如果分類欄位空 → 就會看到 (Empty) → BIN 欄就不會出現
2)表格跟圖表到底看的是不是同一種數字?
表格可能顯示「比率」,圖表顯示「計數」
3)資料列數量有沒有被刪到 0?
很多人以為是 SQL 沒資料,其實是「Spotfire 自己刪掉了」。
七、示範:用「安全範例」重寫一個不含隱私的流程(SQL + IronPython 思路)
(A)SQL:先在資料庫端把「沒有意義的 0」排除
效果:
-
從源頭只拉「有出現的 BIN」
-
這樣 Pivot 時不會憑空出現一堆 0 的 bin 記錄
(B)Spotfire/IronPython:先建立「真正的欄名」,避免 (Empty)
如果你不想依賴「外部 join 來的 BIN 名稱」,可以先自己拼出欄名(避免 join 失敗就全空):
效果:
-
你 Pivot 的分類欄位不會空
-
就算 join 失敗,你仍能看到 BIN1/BIN36 這些欄位
(C)Spotfire:Pivot 時用 BIN_LABEL 當分類欄位
概念上是:
-
Identity:session_id、lot、時間…
-
Category:BIN_LABEL
-
Value:bin_count 或 rate
這樣 Pivot 結果才會穩定產生 BINxx 欄位。
八、互動造成的「看起來怪」:為什麼上表會被下圖影響?
Spotfire 預設會做「互動連動」:
-
你點了 Pareto 圖上的某個 BIN
-
上面的表格也會跟著只顯示那個 BIN 的相關資料
-
這叫 Marking/Filtering 同步
✅ 解法:
在表格的 Properties 裡,把 Marking 設為 None 或另一個
Marking,避免表格被圖表選取影響。
九、常見問題 FAQ
Q1:我 SQL 已經加了
bin_count > 0,為什麼表格還是看到 0.00?
A:因為表格顯示可能是「比率」且經過四捨五入,0.004 會顯示 0.00。請把顯示小數位調大,或檢查表格/圖表看的欄位是不是同一個。
Q2:為什麼 Pivot 後只出現 (Empty)?
A:你用來當「欄名來源」的分類欄位是空值(通常是 join 失敗或欄位型別不一致)。改用自己拼出的 BIN_LABEL 或檢查 join key。
Q3:選兩筆 Lot 為什麼只剩一筆?
A:通常是 join key 重複 + 單筆匹配 join 模式導致只保留一筆,或後面「空值刪除」把其中一筆刪掉。
Q4:工程師最快的排查方式是什麼?
A:先印 RowCount(資料列數),再檢查 Pivot 的分類欄位是否為空,最後確認表格/圖表用的是同一個欄位與聚合方式。
十、結語:Spotfire 的問題多半不是「SQL 錯」,而是「資料管線某段不一致」
當你遇到 BIN 不見、(Empty)、0.00 很多、兩筆只剩一筆時,建議照這個順序查:
-
Pivot 的分類欄位是否空?
-
Join key 是否唯一且型別一致?
-
是否有「空值刪除」把資料刪掉?
-
表格與圖表是否在看同一個欄位/同一種聚合?
-
Marking 是否造成視覺連動?
只要按這個工程師 SOP 走,通常 30 分鐘內就能定位根因。
留言
張貼留言