🐬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 報表維持一致性

留言

這個網誌中的熱門文章

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