🐬Spotfire SQL 條件邏輯教學:如何依據不同廠商資料動態交換欄位
Spotfire SQL 條件邏輯教學:如何依據不同廠商資料動態交換欄位
在半導體資料分析、製程資料整合或測試資料系統中,不同廠商(Vendor)提供的資料格式常常並不一致。
例如:
| 廠商 | VendorLot | FabLot |
|---|---|---|
| A 廠商 | VendorLot | FabLot |
| B 廠商 | FabLot | VendorLot |
| C 廠商 | VendorLot | CustomLot |
這種情況在 BI 系統(例如 Spotfire、Power BI) 或 資料倉儲 SQL 查詢 中非常常見。
如果不處理,畫面上就會出現:
- VendorLot 顯示錯誤
- FabLot 顯示錯誤
- 不同廠商資料混亂
因此我們通常會透過 SQL 條件邏輯(CASE WHEN) 來統一資料。
本文將用簡單易懂的方式介紹:
- 為什麼需要這種邏輯
- 如何在 SQL 中動態切換欄位
- 如何在 Spotfire 查詢中實作
一、為什麼不同廠商資料需要特殊處理?
在半導體製造流程中,不同 OSAT 或測試廠商使用的命名方式不同。
例如:
廠商 A
資料格式
| VendorLot | FabLot |
|---|---|
| V12345 | F56789 |
廠商 B
資料格式(相反)
| VendorLot | FabLot |
|---|---|
| F56789 | V12345 |
如果直接顯示資料:
畫面會變成:
| VendorLot | FabLot |
|---|---|
| F56789 | V12345 |
結果就完全顛倒。
因此我們必須在 SQL 中加入規則。
二、常見的資料處理規則
假設系統需要以下兩個規則:
規則一:特定廠商使用標準欄位
如果 Vendor 為:
VendorA
VendorB
並且測試站別不是某個特殊站別。
那麼:
| 顯示欄位 | 使用資料庫欄位 |
|---|---|
| VendorLot | VendorLot |
| FabLot | FabLot |
也就是維持原本資料。
規則二:某廠商在特定站別需要交換欄位
如果 Vendor 為:
VendorC
並且站別為:
FinalTest
那麼:
| 顯示欄位 | 使用資料庫欄位 |
|---|---|
| VendorLot | FabLot |
| FabLot | VendorLot |
也就是兩個欄位互換。
三、SQL 解決方法:CASE WHEN
SQL 提供一個非常強大的工具:
CASE WHEN
可以依據條件決定要顯示哪個資料。
以下是一個示範範例:
SELECT
CASE
WHEN vendor_id = 'VendorC'
AND test_stage = 'FinalTest'
THEN fab_lot
ELSE vendor_lot
END AS VendorLot,
CASE
WHEN vendor_id = 'VendorC'
AND test_stage = 'FinalTest'
THEN vendor_lot
ELSE fab_lot
END AS FabLot
FROM test_data;
意思是:
如果符合條件就交換欄位,否則維持原本資料。
四、完整 SQL 範例
以下是一個完整但簡化的資料查詢範例。
SELECT
t.record_id,
t.lot_number,
t.vendor_id,
t.test_stage,
CASE
WHEN t.vendor_id = 'VendorC'
AND t.test_stage = 'FinalTest'
THEN t.fab_lot
ELSE t.vendor_lot
END AS DisplayVendorLot,
CASE
WHEN t.vendor_id = 'VendorC'
AND t.test_stage = 'FinalTest'
THEN t.vendor_lot
ELSE t.fab_lot
END AS DisplayFabLot,
t.test_time,
t.product_id,
t.test_quantity
FROM lot_table t;
透過這樣的 SQL:
不同廠商的資料就可以在同一個畫面正確顯示。
五、在 Spotfire 中使用 SQL
在 Spotfire 中,我們通常會透過 Script + Database Query 的方式動態查詢資料。
流程通常如下:
1️⃣ 使用 Document Property 取得使用者選擇條件
2️⃣ 動態產生 SQL
3️⃣ 建立 Database Data Source
4️⃣ 更新 Spotfire Data Table
示意程式:
def build_query(product_list):
product_text = "', '".join(product_list)
query = f"""
SELECT *
FROM product_test
WHERE product_id IN ('{product_text}')
"""
return query
然後再將 SQL 送到資料庫查詢。
六、為什麼這種設計很重要?
如果沒有這種邏輯,系統會出現以下問題:
問題 1
不同廠商資料無法整合
問題 2
分析報表錯誤
問題 3
工程師誤判良率
在半導體產業中,Lot ID 錯誤會造成非常嚴重的分析問題。
因此資料工程師通常會在:
- Loader
- ETL
- SQL
- BI Report
多層進行修正。
七、資料工程最佳實務
建議在系統設計時:
1️⃣ 建立 Vendor Mapping 規則
例如:
| Vendor | SwapLot |
|---|---|
| VendorA | No |
| VendorB | No |
| VendorC | Yes |
2️⃣ 建立標準欄位
統一:
DisplayVendorLot
DisplayFabLot
3️⃣ 在 ETL 層處理
如果資料量很大,建議在:
- Loader
- Data Warehouse
先處理好。
BI 工具只負責顯示。
八、總結
當不同廠商資料格式不一致時:
最常見的解法就是:
SQL CASE WHEN
透過條件判斷:
- 決定顯示 VendorLot
- 或顯示 FabLot
- 或交換欄位
這樣就可以讓 Spotfire / BI 報表維持一致性。
留言
張貼留言