🧠 Spotfire Filter 改欄位後資料消失?從零搞懂 Property Control 與 Script 關係

📌 問題情境(很多人都會遇到)

你在 Spotfire 裡有一個篩選面板(Filter),
例如:

  • OSAT
  • PO_No
  • Product No
  • LOT_ID

某一天你做了一個小改動:

👉 把篩選欄位從 Job No 改成 PO_No

結果發生了:

❌ CPK Summary(報表)突然沒資料
❌ 明明有選值,但畫面是空的
❌ 沒有 error,看起來「壞掉但沒報錯」


🎯 這篇文章會幫你搞懂三件事

  1. Spotfire 的 Filter 到底怎麼運作
  2. 為什麼改欄位會讓資料消失
  3. 如何快速找到是哪段 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 常見流程:

  1. Script 重新抓資料
  2. Filter 選項重新計算
  3. 如果舊選項不存在 → 被清掉

👉 看起來像「Filter 自己亂變」


🔍 三、怎麼找「是誰動了你的 Filter?」

這是最關鍵的技巧👇


✅ 方法 1:看 Property Control 有沒有綁 Script

操作:

  1. 對 Filter 右鍵 → Properties
  2. 找到「Script」按鈕
  3. 打開「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 集中管理(不要分散)

留言

這個網誌中的熱門文章

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