🐬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 = 把食材拿出來放在料理台上
所以你看到的「Job No.」,要追來源時,順序一定是:
視覺化(Visual) → 綁定的 Spotfire Data Table → SQL/資料來源 → 資料庫資料表
二、Spotfire 看到「Job No.」:先查它綁的是哪個 Data Table
你在 Spotfire 表格上右鍵:
- 右鍵表格 → Properties(屬性)
- 點 Data(資料) 分頁
- 你會看到一個欄位: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 腳本做這件事:
- 讀使用者在畫面上選的條件(例如 Product、日期、站點)
- 組成 SQL
- 把 Spotfire 的某張 Data Table 換成這段 SQL 的查詢結果
- 再把表格視覺化要顯示的欄位「清掉重加」,確保順序一致
以下是概念理解:
# 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)
- 右鍵表格 → Properties → Data:看它綁定哪張 Spotfire Data Table
-
Data → Column Properties:看
Job No.是 Imported 還是 Calculated -
如果要找資料庫欄位:用
INFORMATION_SCHEMA.COLUMNS搜尋欄位在哪張表
留言
張貼留言