🧠 Spotfire Filter 改欄位後資料消失?從零搞懂 Property Control 與 Script 關係
📌 問題情境(很多人都會遇到)
你在 Spotfire 裡有一個篩選面板(Filter),
例如:
- OSAT
- PO_No
- Product No
- LOT_ID
某一天你做了一個小改動:
👉 把篩選欄位從 Job No 改成
PO_No
結果發生了:
❌ CPK Summary(報表)突然沒資料
❌ 明明有選值,但畫面是空的
❌ 沒有 error,看起來「壞掉但沒報錯」
🎯 這篇文章會幫你搞懂三件事
- Spotfire 的 Filter 到底怎麼運作
- 為什麼改欄位會讓資料消失
- 如何快速找到是哪段 Script 造成問題
🧩 一、Spotfire Filter 其實不是你想的那樣
很多人以為:
👉 Filter = 資料庫直接篩選
但其實你現在用的是:
👉 Property Control(文件屬性控制)
簡單講:
| 元件 | 真正用途 |
|---|---|
| Filter UI | 只是畫面上的選單 |
| Document Property | 真正儲存選到的值 |
| Script / SQL | 根據 Property 去查資料 |
🧠 白話比喻(超重要)
想像你在點飲料:
- UI = 點餐機
- Property = 你選的飲料名稱
- Script = 店員拿去做飲料
👉 如果你點「紅茶」,但店員只認「GreenTea」
結果會怎樣?
👉 沒飲料(= 沒資料)
⚠️ 二、為什麼改欄位後資料消失?
你做了這件事:
👉 把 Filter 從 Job No 改成
PO_No
但背後可能發生:
❗ 問題 1:名稱沒改
你仍然使用:
SelectedJobNo
但裡面裝的是:
PO_No 的值
👉 就變成:
用 PO_No 去查 Job_No
👉 結果:查不到資料 ❌
❗ 問題 2:Script 還在用舊欄位
很多 Script 會寫類似:
👉(概念示意)
資料 = 查詢 where Job_No in 使用者選擇
但你已經改成 PO_No
👉 就完全對不上
❗ 問題 3:資料被重新載入
Spotfire 常見流程:
- Script 重新抓資料
- Filter 選項重新計算
- 如果舊選項不存在 → 被清掉
👉 看起來像「Filter 自己亂變」
🔍 三、怎麼找「是誰動了你的 Filter?」
這是最關鍵的技巧👇
✅ 方法 1:看 Property Control 有沒有綁 Script
操作:
- 對 Filter 右鍵 → Properties
- 找到「Script」按鈕
- 打開「Act on Property Change」
你會看到:
👉 當選值改變時,會執行哪個 Script
例如:
- RefreshData
- UpdateTable
- QueryData
👉 這些就是「會影響資料」的來源
✅ 方法 2:搜尋 Script 有沒有改 Property
打開:
👉 Tools → Script Manager
搜尋:
SelectedProduct
找這種邏輯:
設定某個值 = ...
👉 這種就是「直接改 Filter」的 Script
✅ 方法 3:找資料被重建的地方(最常見原因)
找 Script 裡有:
- ReplaceData
- Reload
- UpdateTable
👉 這些會讓資料整個刷新
當資料變了:
👉 Filter 選項也會跟著變
🧨 四、最常見的錯誤模式(你很可能中這個)
👉 Filter 顯示正常
👉 但查詢結果為 0
原因通常是:
欄位名稱 ≠ Property 名稱 ≠ SQL 條件
三者不一致
✅ 五、正確做法(推薦)
✔️ 方法 1(最乾淨)
👉 每個欄位用專屬 Property
| 欄位 | Property |
|---|---|
| Job No | SelectedJob |
| PO_No | SelectedPO |
👉 SQL 也跟著改
✔️ 方法 2(快速修)
👉 不改 Property 名稱
👉 改 SQL 查詢欄位
例如:
原本查 Job_No → 改查 PO_No
✔️ 方法 3(進階)
👉 做「欄位切換」
讓使用者選:
- 用 Job 查
- 或用 PO 查
Script 動態決定查哪個欄位
🛠️ 六、實務排錯 SOP(照這個做就對)
1️⃣ 看 Filter Property 裡的值
2️⃣ 看 Script 有沒有改它
3️⃣ 看 SQL 用哪個欄位
4️⃣ 看資料表是不是 0 筆
🎯 七、關鍵結論
👉 Spotfire Filter ≠ 真正篩選
👉 Property 才是核心
當你改欄位:
👉 一定要同步改三件事:
- Property 名稱
- Script 邏輯
- SQL 條件
💡 最後給你的建議(很實用)
如果你有這種架構:
- 多個 Filter
- 多支 Script
- ReplaceData 流程
👉 建議:
✅ 命名要清楚(不要混用)
✅ 每個欄位用不同 Property
✅ Script 集中管理(不要分散)
留言
張貼留言