發表文章

🐬Spotfire Automation Services 能不能正常匯出報表?一篇搞懂「為什麼同一台機器也會失敗」與必做檢查清單

前言:我明明在 Spotfire 裡按一下就能匯出,為什麼放到 Automation Services 就不行? 很多人第一次把 Spotfire 的 IronPython 腳本丟進 Automation Services 排程時,會遇到這種崩潰情境: 在電腦上用 Spotfire Analyst 手動跑: 正常匯出 PDF/CSV 放到 Automation Services 上排程跑: 沒檔案、報錯、或跑完但什麼都沒產出 更常見的誤解是: 「Automation 與 Server 在同一台機器,應該就一定能存檔吧?」 答案是: 不一定 。 因為 Automation Services 的腳本不是用「你在桌面操作 Spotfire 的那個使用者」在跑,而是用 伺服器服務帳號(Service Account) 在背景執行。 同一台機器只代表「磁碟路徑存在」, 不代表它有權限寫入 、也不代表 資料庫連線方式相同 。 Spotfire Automation Services 在做什麼?(給完全新手的比喻) 你可以把它想成: 你在桌面點 Spotfire 匯出報表:像是「你本人拿著筆電親自操作」 Automation Services 排程跑:像是「公司派了一個機器人,半夜自動打開檔案、刷新資料、匯出報表」 重點是: 機器人不是你本人,它有自己的通行證(帳號/權限) 。 所以只要「通行證」權限不足,它就會: 建不了資料夾 寫不了檔案 連不上資料庫 找不到你指定的頁面/視覺化元件 為什麼「同一台 Server」也會失敗?5 個最常見原因 1) 檔案寫入權限不足(最常見) Automation Services 以 Windows Service 身分跑。 你在桌面能寫入 C:\某資料夾 ,不代表服務帳號也能寫入。 典型症狀 ...

🧾SQL Server 用底線分割字串並更新資料庫欄位:避免 STRING_SPLIT 版本限制與 SUBSTRING 537 錯誤的完整教學

 在資料工程與系統整合的世界裡,我們常會遇到一種「看似很小、卻很常卡住」的需求: 某個欄位是一段用 _ 底線串起來的字串,我要把其中第 3 段、第 4 段抓出來,然後寫回到資料表的兩個欄位。 例如:很多系統把「批號、廠別、日期碼、流程代號」這些資訊,塞在一條檔名或識別字串裡。當資料進到資料庫後,後續報表/查詢就會希望把這些資訊拆開成正式欄位。 但實務上會遇到三個常見坑: STRING_SPLIT 在不同版本 SQL Server 的支援差異 SUBSTRING 會噴 錯誤 537:長度無效 CROSS APPLY 的欄位引用方式不對會噴 錯誤 207:無效的資料行名稱 這篇文章會用「 完全不懂 SQL 的人也能理解的方式 」帶你把整套問題解乾淨,最後還會教你如何把結果寫回資料庫(UPDATE)。 一、為什麼 STRING_SPLIT 可能直接不能用? 很多人第一反應會用: STRING_SPLIT(字串, '_') 但你很快就會遇到版本差異: 有些文章會教 STRING_SPLIT(text, '_', 1) (多一個參數) 你的 SQL Server 如果比較舊,就會出現類似錯誤:「引數太多」 重點結論 如果你不能確定 SQL Server 版本是否支援「回傳順序(ordinal)」這個功能,最保險的作法是改用: ✅ CHARINDEX + SUBSTRING (版本相容性最好) 或 ✅ 逐段 CROSS APPLY (工程實務最穩) 二、最常見的爆炸點:SUBSTRING 537(長度無效) 當你用 SUBSTRING(text, start, length) 時, 只要 length ≤ 0 ,SQL Server 就會噴: 訊...

🐬Spotfire Automation Services 教學:為什麼排程「找不到 D 槽 DXP」?以及如何正確把報表放進 Automation 執行

前言:你以為是「程式碼問題」,其實是「系統位置」問題 很多人第一次做 Spotfire 報表排程會遇到這種情況: 手動在電腦開 DXP 一切正常 但放到 Automation Services 後,報表不跑、檔案不輸出 明明 DXP 路徑就在: D:\...\xxx.dxp 卻一直開不到 對新手來說很困惑: 「我檔案明明在那裡啊,為什麼 Automation 找不到?」 工程師的答案其實很簡單: Automation Services 是在 伺服器(Server)上跑 ,它看不到你的電腦 D 槽。 核心觀念:Automation Services 跑在 Server,不跑在你電腦 用最白話的比喻 你在家裡電腦桌面有一份檔案, 但你叫公司機房裡的一台伺服器去開「你家桌面的檔案」——當然開不到。 同理: 你看到的 D:\xxx.dxp 是你「本機」的 D 槽 Automation Services 看的世界是「伺服器」 兩者不在同一台機器 所以「正確方式」只有兩種: 把 DXP 放到 Spotfire Library (最標準) 或放到 Server 看的到的 UNC 網路共享路徑 (視公司規範) 為什麼你在 Tools 找不到 Register Script?(Spotfire 11 常見) 很多人會照教學找: Tools → Register Script 或 Add-ins / Extensions 結果發現完全沒有這些選項,甚至 Options 裡也找不到 Add-ins。 這通常不是你操作錯,而是企業環境常見的「功能控...

🐬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 ...