🐬Spotfire 11 一按按鈕就閃退?用「白話」搞懂欄位改名、Linked Data 與 Script 崩潰的真正原因
前言:為什麼你「只是改個表頭」,Spotfire 就會自己關掉?
很多人在 Spotfire 做報表時,都會遇到這種很崩潰的情況:
-
你改了欄位名稱(例如把「Test Qty」改成「Test Q’ty」或「TestQty」)
-
你按了某個按鈕(例如「Query」或「Generate Summary」)
-
然後 Spotfire 沒有給你很清楚的提示,甚至直接閃退關掉
如果你是完全不了解程式、也看不懂錯誤訊息的人,這篇會用最白話的方式帶你理解:
-
什麼是「欄位名」與「表頭」的差別
-
什麼是 Linked Data(連動資料)警告
-
為什麼 Script 會讓 Spotfire 直接閃退
-
Spotfire 11 怎麼「直接修改表頭」
-
最穩定的修法:欄位命名統一 + 相容欄位(讓舊報表不會炸)
一、先搞懂:Spotfire 的「欄位名」≠「表頭」
很多人以為畫面上看到的文字就是欄位名,其實 Spotfire 有兩種東西:
1) 欄位名(Column Name)
-
這是資料表真正的欄位代號
-
Script / 計算欄位 / Join / Pivot 都會用它
-
一改就可能影響所有連動
2) 表頭(Header / Display Name)
-
這是畫面顯示給人看的名字
-
改它通常不會影響 Script(但要看你是不是「真的改到欄位名」)
✅ 白話比喻:
欄位名 = 身分證號(系統認人靠它)
表頭 = 暱稱(畫面給人看,改暱稱不該影響系統)
二、你看到的兩種錯誤,其實是兩種完全不同的問題
在 Spotfire 常見的「欄位不存在」會分兩種:
A. Script 錯誤(高風險,可能直接閃退)
錯誤會長得像:
-
The column '___' does not exist in the collection -
或按按鈕後提示 Script 執行失敗
📌 意思:
你的按鈕背後有程式(IronPython
Script),它「硬抓」一個欄位,但現在資料表裡沒有那個欄位了。
所以程式直接爆炸,有些 DXP
甚至會直接關掉。
B. Linked Data report(低風險,多半只是警告)
錯誤會長得像:
-
Linked data report: columns are no longer valid -
Missing columns: ___ -
Some columns matched, but not all
📌 意思:
Spotfire
記得以前有「連動加欄位」或「資料串接設定」,但你現在新資料來源裡找不到某些欄位。
這通常是警告,不一定會導致閃退,但會造成資料顯示不完整。
✅ 結論:
-
閃退主因通常是 A(Script 硬抓欄位)
-
Linked Data 警告多半是 B(設定殘留)
三、為什麼「欄位改名」會引爆整個報表?
Spotfire 的報表不是只有一張表格,它通常有:
-
一張「查詢結果表」(按 Query 產生)
-
一張「選取結果表」
-
一張「統計用中介表」(Pivot / Join 的結果)
-
一張「最終摘要表」(Summary)
當你把欄位改名時,很可能造成:
-
Script 還在找舊欄位名(例如
OldQtyName) -
但資料表已經變成新欄位名(例如
NewQtyName) -
Script 一執行就爆炸 → 按鈕按下去就壞
四、Spotfire 11:如何「直接修改表頭」而不是改欄位名?
如果你只是想把顯示文字改漂亮(例如
TestQ_ty 顯示成
Test Qty),建議用「表頭顯示名稱」方式,而不是動資料欄位。
方法 1:Table Visualization 直接改(最直覺)
-
在表格上 右鍵
-
點 Properties(屬性)
-
進到 Columns(欄位)
-
在右側選到你要改的欄位
-
找「Display name / Column title(顯示名稱)」
-
把它改成你想顯示的文字(例如
Test Qty)
如果你找不到 Display name,可能是版本或視覺化類型不同;那就用方法 2。
方法 2:用 Expression / Calculated Column 做「別名欄位」
如果你的 Spotfire 不讓你直接改表頭,最穩的方式是:
新增一個「顯示專用欄位」,名稱固定,讓報表永遠都用它。
例如你新增一個計算欄位:
-
新欄位名:
Qty_Display -
表達式:直接引用原本欄位(不改資料)
這樣畫面永遠顯示
Qty_Display,就不怕來源欄位名稱變動。
五、工程師最推薦的穩定解法:做「欄位相容層」
如果你的報表已經很大、很多按鈕很多 Script,最佳做法不是「到處改 Script」,而是:
✅ 在資料進來的時候就統一欄位名
✅ 或建立一個「相容欄位」讓舊名字、新名字都能用
白話說法
你以前叫小明,現在改名叫阿明。
但親戚朋友都還叫你小明。
最好的做法不是叫大家全部改口,
而是你自己知道:「叫小明也會回應」。
六、匿名示意:如何寫「不會炸」的 Script(欄位存在才用)
以下是示意版概念(已去識別化、欄位與表名均為假名):
✅ 這樣即使欄位改名,Script 也不會直接爆。
七、Linked Data report 要怎麼處理?(不讓它一直跳)
當 Spotfire 出現:
Linked data table 'XXX': The following columns are no longer valid…
代表你曾經在某張表做過「Add Columns / Join / Linked」
但來源已經換掉或欄位不見了。
乾淨修法(推薦)
-
Data → Data table properties
-
選那張被警告的表(例如
TEMP_TABLE) -
找到「Add Columns」或「Linked data」的設定頁
-
把已經不存在的欄位移除/清除
-
存檔
✅ 這樣警告就不會再跳,也不會影響後續 ReplaceData。
八、你遇到的「按 Generate 就閃退」通常是哪個原因?
以維運經驗來說,Spotfire 按按鈕就關掉,常見原因是:
-
Script 直接用
Columns["某欄位"]硬抓,但欄位已不存在 -
ReplaceData 後欄位被改名,Linked Data / Pivot 仍依賴舊欄位
-
某些視覺化(Table/Chart)仍指向舊欄位
-
連動資料表之間「欄位對不上」造成連鎖崩潰
✅ 最優先排查順序:
-
先讓 Script 不會爆(欄位相容層)
-
再清掉 Linked Data 殘留
-
最後才整理視覺化的欄位顯示
九、最佳實務:Spotfire 報表維運的「命名規範」建議
如果你不想每次改欄位都爆炸,建議建立規範:
-
資料欄位名固定(系統用)
-
表頭顯示名稱可調整(給人看)
-
改版時新增「相容欄位」,不要直接刪舊欄位
-
Script 永遠用「安全取欄位」函式,不要硬抓
結語:你要的是「顯示一致」,不是「到處改到炸」
如果你的目標是:
✅ 讓畫面永遠顯示同一個字(例如
Test Qty)
✅ 讓按鈕永遠能跑
✅ 不要因為欄位改名就整份 DXP 爆掉
那最穩的方式是:
-
不要直接改資料欄位名
-
用 Display name / Calculated Column 統一表頭
-
Script 做「欄位相容層」
-
清掉 Linked Data 殘留設定
常見問題(FAQ)
Q1:Spotfire 11 可以直接 rename 表頭嗎?
可以,通常在 Table 的 Properties → Columns 裡有 Display name / Column title。若沒有,改用新增計算欄位做顯示別名。
Q2:為什麼我 Match Columns 之後還是會壞?
因為你 Match 只是當下對應一次,但 Script/Join/Pivot/Visualization 可能仍引用舊欄位名,下一次 ReplaceData 又會失配。
Q3:Linked Data report 一直跳會怎樣?
不一定會閃退,但可能造成某些欄位不再更新、或資料顯示不完整。建議清掉殘留設定。
留言
張貼留言