發表文章

🐬Spotfire 為什麼突然沒有 BIN 值與圖表不顯示?工程師用「縮排、欄位來源、過濾條件」三招快速定位(含 IronPython 範例)

 在 Tibco Spotfire 裡做良率(Yield)或 BIN 分佈分析時,最常見也最讓人抓狂的狀況之一,就是: 表格(TablePlot)突然看不到 BIN 欄位 圖表(Chart)突然空白 你明明知道資料有回來,但畫面就是不出來 腳本還可能報 unexpected indent 、或是印出一堆 debug 訊息卻看不出問題在哪 這篇文章用「軟體工程師的除錯方式」,用簡單白話把問題拆成 3 類,並用可套用在任何 Spotfire 專案的方式,教你快速定位「BIN 不見」的真正原因。 一、Spotfire 的 BIN 不見,其實通常不是「沒資料」,而是「你拿錯地方的欄位」 很多人直覺以為: 圖表不顯示 = 資料表沒資料 但在 Spotfire 的腳本世界裡,另一個超常見真相是: 資料表其實有資料、有 BIN 欄位 只是你從「視覺物件的參照」去拿欄位,而不是從「真正的資料表」去拿欄位   結果判斷條件永遠成立不了 → BIN 就永遠加不回去 什麼是「視覺物件的參照」? Spotfire 的 TablePlot / Chart 會有一種像「指向資料的指標」的東西(概念上類似捷徑),它可能還停留在舊的 view、舊的欄位集合,或欄位字串格式跟你想像的不一樣。 工程師的做法是: 用「資料表」做欄位判斷 用「視覺物件參照」做欄位加入(AddColumn) 二、為什麼你「明明印得出 BIN 欄位清單」,最後卻又變成空? 你可能會遇到這種除錯輸出: 你先印出:有 BIN1, BIN2, BIN3... 但你最後算出來要顯示的 binColumns 卻是空的 這常見原因不是資料突然消失,而是你的判斷式像這樣: 把欄位物件轉成字串 str(col) 去判斷是否 startswith("BIN") 但 str(col) 根本不是欄位名(可能是 ColumnRef(...) 這類描述字串) 三、第二個大地雷:過濾條件把資料「全部清光」但你沒發現 另一種超常見的 BIN 消失原因,是你後面加了某種過濾: 只保留「Rate% > 0.01」 只保留「選到的 BIN」 只保留「某個欄位不是空」 如果你寫得太嚴格、或欄位名...

🧾SQL 教學:如何列出資料表欄位的「不同值」— 新手也能懂的 DISTINCT 與 GROUP BY

1. 這篇文章要解決什麼問題? 你在資料庫裡有一張資料表(例如測試資料、報表資料、或任何紀錄表),其中有一個欄位叫做 RAWFILE ,它通常代表「資料從哪個檔案匯入」或「來源檔名」。 你想做的事情很常見: 把 RAWFILE 欄位中出現過的「不同值」全部列出來   也就是:不要看到重複的檔名,只要每個檔名列一次。 這個需求通常用在: 找出有哪些來源檔案有被匯入 檢查資料異常時,快速定位「哪些檔案」可能有問題 做資料清理前先確認來源分佈 寫 ETL / Loader 時做追蹤與稽核(audit) 2. 先用白話理解:「不同值」是什麼? 假設 RAWFILE 欄位的資料長得像這樣: RAWFILE fileA.xlsx fileA.xlsx fileB.xlsx fileC.xlsx fileB.xlsx 你要的輸出是: fileA.xlsx fileB.xlsx fileC.xlsx 也就是 去重複後的清單 。 3. 最常用解法:DISTINCT(去重複) 在 SQL 裡,最直覺的作法是用 DISTINCT 。 它的意思就是: 只顯示不重複的值 ✅ 示範 SQL: SELECT DISTINCT t.RAWFILE FROM dbo.FT_TEST_INFO AS t WHERE t.RAWFILE IS NOT NULL ORDER BY t.RAWFILE; 你...

🧠 APS 系統是怎麼判斷訂單能不能成交?工程師帶你看懂「成交率、Pull-in / Extra、續留次數」

一、什麼是 APS(Advanced Planning System)? 在現代製造業中,例如面板、電子、半導體產業,每天都會有大量訂單需求: 客戶要提前交貨 新訂單突然增加 原本排好的生產計畫被打亂 如果只靠人工排程,幾乎不可能完成。 因此企業會使用一種系統: APS(Advanced Planning System) APS 的工作是: 根據「產能、物料、設備、需求」去計算 哪些訂單可以完成、哪些不行。 簡單來說: 需求 ↓ APS 排程計算 ↓ 可成交 / 不可成交 二、APS 系統判斷成交的三個關鍵因素 當 APS 在計算一筆訂單能不能成交時,通常會檢查三件事情: 1️⃣ 前段製程(Front Process) 例如: TFT 製程 Wafer 製程 Panel 製程 問題可能是: 產能不夠 機台滿載 2️⃣ 後段製程(LCM / Assembly) 例如: 模組組裝 測試 包裝 可能問題: 模組產能不足 排線衝突 3️⃣ 物料(Material) 這其實是最常見的問題。 例如: Driver IC PCBA Backlight Polarizer 只要其中一種材料缺料,訂單就可能無法完成。 三、什麼是 Pull-in 訂單? Pull-in 的意思是: 客戶希望「提前交貨」。 例如: 原本訂單是: 交貨時間:第 12 週 客戶突然說: 我要第 10 週交貨 這就是 Pull-in 。 在系統中會標記為: Order Type = Pull-in APS 必須重新計算: 產能 物料 排程 看看能不能提前生產。 四、什麼是 Extra ...

🧾Oracle SQL Developer 出現 SP2-0552 怎麼辦?新手也懂的「綁定變數未宣告」排查與解法(含常用去重查詢)

一、你遇到的問題其實很常見:SP2-0552 是什麼? 如果你在 Oracle SQL Developer 執行 SQL 時看到這個錯誤: SP2-0552: 連結變數 "XXXX" 未宣告 這通常代表一件事: 你在 SQL 裡用了「綁定變數」(Bind Variable),但工具端沒有先宣告它。 這不是你的資料表壞了,也不是 SQL 寫錯了,而是「執行環境」在提醒你: 我不知道 :xxxx 是什麼,因為你沒有先定義它。 二、為什麼會這樣?關鍵差異:Run Statement vs Run Script Oracle SQL Developer 有兩種常見執行方式: 1) Run Statement(通常是 Ctrl + Enter) 偏向「直接執行 SQL」 有時會用 SQL Developer 自己的方式處理參數 2) Run Script(通常是 F5) 會走 SQL*Plus 風格的腳本執行器 這種模式下, : 開頭的變數 一定要先宣告 很多人就是因為按了 F5 ,就突然遇到 SP2-0552。 三、什麼是 Bind Variable?新手版解釋 想像你寫一段 SQL: 你想查「某個版本」的資料 但版本字串每次都不同 你不想每次都改 SQL(也比較安全) 所以你會寫成「先留一個洞」: 這個洞叫做 參數 / 綁定變數 讓程式或工具在執行時再把值塞進去 四、SP2-0552 的三種實用解法 下面用一個「查訂單資料」的假想情境來示範 ✅ 解法 A:用 Run Script(F5)時,先宣告變數(最正統) 如果你的 SQL 裡像這樣寫: SELECT * FROM SALES_ORDERS WHERE ORDER_GROUP = :gr...

🐬Spotfire 自動報表腳本常見錯誤解析:IronPython 變數未定義與 SQL 查詢結果不一致的完整排查指南

一、問題背景:Spotfire 自動報表腳本出現奇怪錯誤 在企業 BI 系統中,許多工程師會使用 Spotfire + IronPython 來建立自動化報表,例如: 每週自動匯出 CSV 每月產生 PDF 報表 定期從資料庫抓取資料 例如典型流程: 透過 SQL 從資料庫抓取資料 更新 Spotfire Data Table 依不同產品分類輸出報表 匯出 CSV 或 PDF 然而在實務中,常常會遇到這些問題: 常見錯誤 1️⃣ SQL 在 SQL Server 有資料,但 Spotfire 查不到 2️⃣ IronPython 出現變數未定義錯誤 3️⃣ Data Table 不存在 4️⃣ 自動化報表腳本中途停止 例如錯誤訊息: IronPython.Runtime.UnboundNameException: name 'ReportList' is not defined 或 The table named 'CHECK_TABLE' does not exist 這些問題其實非常常見。 二、典型自動報表腳本架構 以下是一個簡化版的 Spotfire 自動報表流程(已重新設計範例程式)。 Step 1:產生查詢日期 from datetime import datetime , timedelta today = datetime . today() start_date = today - timedelta ( days = 7 ) end_date = today start_str = start_date . strftime( "%Y-%m-%d" ) end_str = end_date . strftime( "%Y-%m-%d" ) Step 2:建立 SQL 查詢 sql_query = """ SELECT product_id, batch_...