🐬Spotfire 查詢失敗怎麼辦?一次搞懂 Column does not exist 的真正原因與解法

前言:這個錯誤,90% 的人都修錯方向

如果你在 TIBCO Spotfire 裡,按下查詢(Query)後看到這樣的錯誤:

Could not execute script: The column 'XXX' does not exist in the collection


你很可能會直覺認為:

  • 「是不是 SQL 沒寫好?」

  • 「是不是欄位名稱拼錯?」

  • 「是不是資料庫沒有這個欄位?」

但事實是:這個錯誤大多不是 SQL 的問題,而是「資料表之間欄位定義不一致」造成的。

本文會用完全不需要懂 Spotfire、也不需要懂程式的方式,帶你一步一步理解:

👉 為什麼你明明「已經加了欄位」,Spotfire 卻還是說「找不到欄位」。



一、先用生活比喻,理解 Spotfire 在做什麼

想像你在做一份報表,就像在做一張 Excel 表格。

Spotfire 裡,其實同時存在三個角色:

角色 白話說明
資料來源 像是資料庫或查詢結果
資料表(Data Table) 匯入後存在 Spotfire 裡的一張表
畫面表格(Table Visual) 螢幕上看到的那個表格

關鍵重點:畫面上的表格,不一定使用你「剛剛查詢的那張資料表」。


二、問題的真正原因(核心觀念)

❌ 常見誤解

「我 SQL 已經加了這個欄位,為什麼畫面還是說沒有?」


✅ 真正原因

你的畫面表格,實際綁定的是「另一張資料表」,

而那張表裡 從來沒有這個欄位名稱



三、Spotfire 常見的「雙資料表陷阱」

在實務上,Spotfire 專案常會有這種設計:

資料表 用途
查詢結果表 真正從資料庫查回來的資料
空白初始化表 給畫面先綁定用(避免畫面空白)

問題就出在這裡 👇

  • 查詢結果表:欄位叫「PO 編號」

  • 空白初始化表:欄位卻叫「MO」

👉 Spotfire 覺得:這是兩個完全不同的欄位

所以當畫面表格去找「PO 編號」時:

❌ 找不到 → 直接報錯



四、為什麼這種錯誤「怎麼改都改不好」

很多工程師會不斷重複做這些事(但都沒用):

  • 一直改 SQL

  • 一直改欄位名稱

  • 一直重跑查詢

  • 一直懷疑 Spotfire 有 Bug

但只要 畫面表格綁定的資料表裡,沒有那個欄位名,Spotfire 就一定報錯。


五、正確解法(工程師標準做法)

✅ 原則一:所有資料表的欄位名稱「必須完全一致」

不管是:

  • 真正查詢用的資料表

  • 空白初始化用的資料表

  • 後續被畫面綁定的資料表

👉 欄位名稱要一模一樣(包含空白、大小寫、符號)


✅ 原則二:畫面用到的欄位,一定要存在於「目前綁定的資料表」

工程師在除錯時,第一件事一定會做的是:

「確認這個畫面,到底綁的是哪一張資料表?」


而不是盲目改 SQL。


六、工程師實務除錯流程(不看程式也能懂)

1️⃣ 確認畫面表格「實際使用的資料表」
2️⃣ 列出該資料表「目前有哪些欄位」
3️⃣ 比對畫面要用的欄位是否真的存在
4️⃣ 若不存在 → 統一所有資料表的欄位定義


七、這類錯誤為什麼在 Spotfire 特別常見?

因為 Spotfire 很強大,但也很嚴格:

  • ✔ 欄位名稱是「完全比對」

  • ✔ 一個字不一樣,就視為不同欄位

  • ✔ 不會自動幫你猜「你是不是想用那個欄位」

這對報表穩定性是優點,但對初學者來說就很容易踩雷。


八、給完全不懂技術的人一句總結

這個錯誤不是你寫錯,而是資料表之間「講的不是同一種語言」。


只要讓所有資料表:

  • 用同一套欄位名稱

  • 畫面綁定正確的資料表

問題就會自然消失。


九、結語:與其一直改 SQL,不如先確認「畫面在用哪張表」

這類錯誤是 Spotfire 專案中最經典、也最容易被誤判的問題之一

如果你是:

  • BI 工程師

  • 資料分析師

  • 接手別人 Spotfire 專案的維運人員

👉 強烈建議把「資料表綁定關係」列為第一個檢查項目。

留言

這個網誌中的熱門文章

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