🐬Spotfire 表格欄位怎麼來的?3 步驟查「資料來源」+用 SQL 找資料庫欄位(新手也懂)

內容

你在 Spotfire 報表上看到一個欄位,例如「Job No.」,常常會遇到這幾個問題:

  • 這個欄位到底是從哪張資料表來的
  • 它是從資料庫查出來的?還是 Spotfire 自己算出來的?
  • 我想修改欄位來源或顯示內容,要改 Spotfire?還是要改 SQL?
  • 我知道資料庫叫 xsemi_dev,但不知道 CUST_PO_NO 這個欄位在哪張表,怎麼快速找?

這篇文章用「軟體工程師講給完全不懂的人」的方式,帶你一次搞懂 Spotfire 欄位來源與資料庫欄位搜尋。


一、先搞懂兩件事:Spotfire 的「表格」不等於資料庫的「資料表」

很多新手會混淆:

  • 資料庫資料表(Database Table):真正存資料的地方,例如 SQL Server 的某張 dbo.xxx
  • Spotfire Data Table:Spotfire 內部的資料集(像一個載入後的資料快照),可能來自:
    • 資料庫查詢(SQL)
    • CSV/Excel 檔案
    • Information Link
    • Spotfire 自己產生或計算欄位
  • Spotfire Visual(視覺化):畫面上的表格、圖表。它只是「把某個 Data Table 的欄位拿出來顯示」。

簡單比喻:

資料庫 = 廚房食材倉庫
Spotfire Data Table = 把食材拿出來放在料理台上 
Spotfire 表格視覺化 = 把料理擺盤給你看


所以你看到的「Job No.」,要追來源時,順序一定是:

視覺化(Visual) → 綁定的 Spotfire Data Table → SQL/資料來源 → 資料庫資料表


二、Spotfire 看到「Job No.」:先查它綁的是哪個 Data Table

你在 Spotfire 表格上右鍵:

  1. 右鍵表格 → Properties(屬性)
  2. Data(資料) 分頁
  3. 你會看到一個欄位:Data table: ________

這裡顯示的名稱就是「這張表格正在用哪個 Spotfire Data Table」。

例如 Data table 顯示 INPUT_DATA,代表你現在看到的所有欄位,都從 INPUT_DATA 這個 Data Table 來。



三、Spotfire 的欄位來源有兩種:Imported vs Calculated(這是關鍵)

當你想知道「Job No. 是從哪裡來」時,最重要的一步是:

去 Spotfire 的 Column Properties 看欄位型態

操作路徑(不同版本介面略有差異):

  • 上方選單 → Data → Column Properties
  • 選到欄位 Job No.

你會遇到兩種情況:


情況 A:Job No. 是 Calculated Column(Spotfire 自己算出來的)

意思是:

Job No. 不是資料庫直接給的

而是 Spotfire 用某個公式(Expression)從其他欄位算出來


例如它可能是:

  • LOT_ID 直接改名成 Job No.
  • 或把多個欄位組合起來成為 Job No.

你要修改來源:改 Expression 即可,不用碰 SQL、不用碰資料庫。


情況 B:Job No. 是 Imported Column(資料載入時就存在)

意思是:

Job No. 是你從資料庫查詢(SQL)或資料連線時就已經是這個名字


你要修改來源:要去改「資料來源 SQL」或 Information Link。


四、如果是 SQL 查出來的:怎麼把資料庫欄位改成你想顯示的欄位?

假設你有一段SQL:

SELECT
t.lot_id,
t.product_code,
t.test_program
FROM dbo.lot_info t
WHERE t.product_code IN ('P001', 'P002');

如果你想讓 Spotfire 表格顯示「Job No.」而它其實是 lot_id,最常見的做法是:

SELECT
t.lot_id AS [Job No.],
t.product_code AS [Product No.],
t.test_program AS [TEST_PG]
FROM dbo.lot_info t
WHERE t.product_code IN ('P001', 'P002');

這樣 Spotfire 載入後就會真的有一欄叫 Job No.,不用再靠手動改名或計算欄位。


五、Spotfire IronPython 腳本在做什麼?(用人話版本)

很多公司 Spotfire 會用 IronPython 腳本做這件事:

  1. 讀使用者在畫面上選的條件(例如 Product、日期、站點)
  2. 組成 SQL
  3. 把 Spotfire 的某張 Data Table 換成這段 SQL 的查詢結果
  4. 再把表格視覺化要顯示的欄位「清掉重加」,確保順序一致

以下是概念理解:

# 1) 從 Spotfire 屬性讀條件
products = Document.Properties["Products"] # 例如 ["P001", "P002"]
prod_str = "', '".join(products)

# 2) 組 SQL(示意)
sql = """
SELECT
t.lot_id AS [Job No.],
t.product_code AS [Product No.],
t.date_code AS [DATE_CODE]
FROM dbo.lot_info t
WHERE t.product_code IN ('{0}')
""".format(prod_str)

# 3) 更新 Spotfire Data Table(示意)
ds = DatabaseDataSource(DatabaseDataSourceSettings(
Document.Properties["DbProvider"],
Document.Properties["DbConnection"],
sql
))
Document.Data.Tables["INPUT_DATA"].ReplaceData(ds)

你不需要懂每個 API,只要知道它本質是:
把資料庫查詢結果塞回 Spotfire Data Table


六、我知道資料庫叫 xsemi_dev,但不知道 CUST_PO_NO 在哪張表:怎麼找?

這個情境在 SQL Server 超常見:
你知道欄位名稱,但不知道它在哪張表。

✅ 最快的方法是查系統目錄(INFORMATION_SCHEMA):

SELECT
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME
FROM xsemi_dev.INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'CUST_PO_NO';

你會得到結果像:

  • dbo.order_header
  • dbo.po_detail
  • dbo.customer_orders

這樣你就知道哪幾張表CUST_PO_NO

如果你不確定欄位拼法(模糊查詢)

SELECT
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME
FROM xsemi_dev.INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%CUST%PO%';

七、常見踩雷提醒(新手最容易卡的地方)

1) 你以為改了表格欄位就改資料來源

其實你只改了「顯示」,資料來源根本沒動。

2) Job No. 在 SQL 裡找不到

因為它可能是 Spotfire 算出來的(Calculated Column)或只是顯示名稱。

3) 同一個欄位在不同頁面看起來不同

因為不同視覺化可能綁定不同 Data Table,或套了不同的資料限制(Filtering/Marking)。


八、最短結論(你可以照這套做 Debug)

  1. 右鍵表格 → Properties → Data:看它綁定哪張 Spotfire Data Table
  2. Data → Column Properties:看 Job No. 是 Imported 還是 Calculated
  3. 如果要找資料庫欄位:用
    INFORMATION_SCHEMA.COLUMNS 搜尋欄位在哪張表

留言

這個網誌中的熱門文章

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