本頁 13 節,分 5 區 一、這是什麼 三十秒判斷關不關你的事
先確認這一篇解的是不是你的問題。看完這兩節如果覺得不像,就不用再往下讀——省下的時間比讀完更值錢。
01 解決的工作問題業務主管提出「我要看活躍度」「我要看流失」「我要看轉換率」這類需求時,聽起來像一句話就講完的任務,其實藏著至少八個沒講出口的假設:指標怎麼定義、分子是什麼、分母是什麼、用哪一種時間基準、對象範圍是誰、要排除哪些帳號、資料從哪張表來、多久更新一次。這些假設不同人腦中的答案往往不一樣——主管以為的「活躍」是有付費行為,分析師以為是有登入紀錄,兩邊都合理,但兜出來的數字會差很多。AI 最容易犯的錯,是看到「活躍度」三個字就自己選一種常見定義,直接生出一段語法正確、看起來很專業的 SQL。這段 SQL 能跑、有結果、圖表也畫得出來,但那是 AI 幫你決定的定義,不是主管真正想看的那個數字。等到報表上線、主管拿著數字去做決策,才發現「活躍」的算法跟他心裡想的不一樣,這時候要回頭改的不只是 SQL,還有已經根據錯誤數字做出的判斷。這個方法要處理的,就是在 AI動手寫 SQL之前,先把八個關鍵條件問清楚、寫下來、讓業務主管拍板,讓「怎麼算」這件事有一份大家都認的規格書可查,而不是活在某一個人的腦子裡或某一段 SQL 的邏輯裡。
真的有人這樣做過外部佐證 1 則 以下都是具名機構的公開案例,每個來源都經過連結實測。數字只寫來源講得出來的;來源沒講的,這裡就寫未公開。
dbt Labs官方部落格直接測試「純文字轉SQL」(沒有先定義好指標)vs.「先經過語意層(指標定義已寫死)」回答同一批業務問題的準確率差異,用Claude Sonnet 4.6與GPT-5.3 Codex實測。
成效 claude-sonnet-4-6:Text-to-SQL 90.0% → 語意層 98.2%;gpt-5.3-codex:Text-to-SQL 84.1% → 語意層 100.0%。官方原句:「With text-to-SQL, failure looks like a plausible but incorrect answer. With the Semantic Layer, failure looks like an error message.」
不能照抄的理由 這是dbt Labs自己發布、用來推廣自家語意層產品的基準測試,屬於廠商自證性質,不是獨立第三方稽核,測試題目集也未完全公開複核。
這些案例與其他外部佐證,完整收在找靈感 →
02 什麼時候用、什麼時候別用什麼情況下該用這一套 {'t': '業務主管的需求用詞是名詞而非定義', 'd': '「活躍度」「流失」「轉換率」這種詞本身不是定義,是需要拆解的入口。'} {'t': '這份數字之後要拿去做決策或對外報告', 'd': '口徑一旦錯了,後面根據這個數字做的判斷都要重新檢視,越早釐清成本越低。'} {'t': '有唯讀權限可以查資料庫的欄位與型態', 'd': '規格書裡寫的資料來源要能實際核對,不能只憑欄位名稱猜。'} {'t': '多個報表或多個人會用到同一個指標', 'd': '只要有第二個人或第二張報表引用同一個詞,口徑不一致的風險就存在,值得先寫規格書。'} 什麼情況下別用
已經有明確口徑文件的既有指標 公司已經定義過、大家都在用的指標不需要重新走一次,除非要新增排除條件或改時間基準。
純粹的探索性資料查看 分析師自己想先摸一下資料長什麼樣,不涉及要交付的正式指標,不需要走完整規格書流程,直接用唯讀查詢看看即可。
業務主管明確要求「先給我一個粗略版本就好」 如果主管已經知情並接受粗略版本可能不準,這是主管的決定,但要在交付時明確標註「未定稿口徑」,不能悄悄升級成正式數字。
指標定義涉及法規或財務認列標準 營收認列、法定合規指標等有既定會計或法規標準時,定義權不在業務主管,要先確認是否有法遵或財務規範要遵守。 誰會用到
數據分析 你是最常被要求「先給我看一下數字」的人,也最容易在還沒問清楚之前就先跑一版出來交差。先跑的那一版會變成事實上的定義,之後很難改。
PM 你常常是業務主管與分析師之間的翻譯,待確認清單就是你最好用的翻譯工具——拿著八個問題去跟主管對,比自己猜一個版本回去問「這樣對嗎」有效率。
主管 你要做的不是自己去定義指標,而是在拍板那一步真的把每一項看過、確認過。含糊帶過「差不多這樣」是這個方法最容易失敗的地方。 所屬工作情境 二、整件事怎麼跑 先看圖,再看逐步
先用一張圖抓全貌,再看逐步展開。圖看不懂沒關係,下一節會把每一步實際在做什麼、誰做,一條一條講清楚。
03 流程圖這張圖是整篇的骨架:輸入 → 步驟 → 困難點 → AI/Agent/Tool 介入 → 人工檢查 → 產出。紅框是最常出事的位置,綠框是不能下放的人工檢查點,粗框是中止條件。後面每一節都是在展開圖上的某一格。
業務需求轉數據規格:八項條件確認前,流程卡在生成 SQL 之前 Human 輸入 Human 步驟 AI Tool Checkpoint Output Risk 困難點 Stop 中止
看圖重點: 這張圖最重要的一道關卡是唯讀查詢核對那一步——資料來源沒有實際查過欄位是否存在、型態是否相符之前,規格書寫得再完整都只是假設。右下角的中止條件是這個方法唯一的鐵律:八項條件有一項還沒拍板,或資料來源還沒核對過,就不准往下走到生成 SQL 那一步,寧可讓流程卡住,也不要讓一段能跑但口徑錯誤的 SQL 流出去變成正式報表。純文字流程表(手機/螢幕閱讀器建議看這張) 業務需求轉數據規格:八項條件確認前,流程卡在生成 SQL 之前(純文字流程表) 序 類型/角色 流程步驟 這一步的困難點/中止條件 1 Human 業務主管的模糊需求原話 + 既有相關報表(如有) 原話需一字不改記錄,不自行先行詮釋 — 2 Human 人記錄原話,不加詮釋 先不要自己翻譯成任何技術定義 — 3 AI AI 拆解出八項候選清單,逐項標待確認 此步驟強制不得產出 SQL 困難點/風險 AI 自行選一種常見定義就動手寫 SQL
困難點/風險 分子分母在不同報表裡各自表述,看似互補實則口徑不一
4 Checkpoint 業務主管與相關人逐項核對拍板 失敗與中止條件 八項條件仍有任一項待確認、或資料來源未通過唯讀核對,不得生成 SQL
5 Tool 唯讀查詢核對資料來源欄位存在與型態 困難點/風險 資料來源只憑欄位名稱猜測,未經唯讀查證
6 AI AI 生成 Data Requirement Spec 與對應 SQL 草稿 每個 SQL 條件標註對應規格書條款 — 7 Checkpoint 業務主管與資料負責人共同簽核 — 8 Output 正式發布的 Data Requirement Spec + SQL 草稿 —
Mermaid 原始碼(貼進 Mermaid Live 或 draw.io 可再編輯) 可直接複製,改成你自己的流程 複製 Mermaid
flowchart TD
in1(["<b>Human</b><br/>業務主管的模糊需求原話 + 既有相關報表(如有)<br/><small>原話需一字不改記錄,不自行先行詮釋</small>"])
s1["<b>Human</b><br/>人記錄原話,不加詮釋<br/><small>先不要自己翻譯成任何技術定義</small>"]
a1[/"<b>AI</b><br/>AI 拆解出八項候選清單,逐項標待確認<br/><small>此步驟強制不得產出 SQL</small>"/]
c1{{"<b>Checkpoint</b><br/>業務主管與相關人逐項核對拍板"}}
t1[("<b>Tool</b><br/>唯讀查詢核對資料來源欄位存在與型態")]
a2[/"<b>AI</b><br/>AI 生成 Data Requirement Spec 與對應 SQL 草稿<br/><small>每個 SQL 條件標註對應規格書條款</small>"/]
c2{{"<b>Checkpoint</b><br/>業務主管與資料負責人共同簽核"}}
o1(["<b>Output</b><br/>正式發布的 Data Requirement Spec + SQL 草稿"])
r1>"<b>Risk</b><br/>AI 自行選一種常見定義就動手寫 SQL"]
r2>"<b>Risk</b><br/>分子分母在不同報表裡各自表述,看似互補實則口徑不一"]
st1[/"<b>Stop</b><br/>八項條件仍有任一項待確認、或資料來源未通過唯讀核對,不得生成 SQL"\]
r3>"<b>Risk</b><br/>資料來源只憑欄位名稱猜測,未經唯讀查證"]
in1 --> s1
s1 --> a1
a1 --> c1
c1 --> t1
t1 --> a2
a2 --> c2
c2 --> o1
a1 -.->|風險| r1
a1 -.->|風險| r2
c1 ==>|中止| st1
t1 -.->|風險| r3
in1 -.->|退回| s1
s1 -.->|退回| a1
a1 -.->|退回| c1
c1 -.->|退回| t1
t1 -.->|欄位或型態對不上,退回重新確認定義| c1
t1 -.->|退回| a2
a2 -.->|退回| c2
c2 -.->|SQL 與規格書對不上,退回重寫| a2
c2 -.->|退回| o1
classDef clsIn fill:#FFFFFF,stroke:#2C4459,stroke-width:2px,color:#141E2B
classDef clsHuman fill:#FBFCFD,stroke:#7A8CA0,stroke-width:2px,color:#141E2B
classDef clsAI fill:#FFF6EA,stroke:#DE9A45,stroke-width:2px,color:#141E2B
classDef clsAgent fill:#FDEBD2,stroke:#B87A2E,stroke-width:2px,color:#141E2B
classDef clsTool fill:#EDF2F6,stroke:#2C4459,stroke-width:2px,color:#141E2B
classDef clsCheck fill:#E8F2EC,stroke:#3F7A5A,stroke-width:2px,color:#123024
classDef clsOut fill:#141E2B,stroke:#141E2B,stroke-width:2px,color:#F2F6F9
classDef clsRisk fill:#FCEFEA,stroke:#C0552F,stroke-width:2px,color:#5E2110
classDef clsStop fill:#F7E1DB,stroke:#8E2F17,stroke-width:3px,color:#5E2110
class in1 clsIn;
class s1 clsHuman;
class a1 clsAI;
class c1 clsCheck;
class t1 clsTool;
class a2 clsAI;
class c2 clsCheck;
class o1 clsOut;
class r1 clsRisk;
class r2 clsRisk;
class st1 clsStop;
class r3 clsRisk; 04 完整步驟圖的文字版,逐步展開 一句話版(快速回顧) 先把主管的原話記下來,不要自己詮釋成「活躍度就是 DAU」這種結論。 請 AI 依原話整理出「待確認清單」:指標定義、分子、分母、時間基準、對象、排除條件、資料來源、更新頻率的候選選項,明確標示這只是選項不是決定,此步驟不准產出 SQL。 拿著待確認清單回去跟主管與相關人逐項核對拍板,寫成正式定義。 核對候選的資料來源在實際資料庫裡是否存在、型態是否相符,型態或欄位對不上要退回重新定義。 所有條件都確認後,才請 AI 生成正式的 Data Requirement Spec 與對應的 SQL 草稿,SQL 每個條件都要能對回規格書的某一條。 由主管與資料負責人共同簽核規格書定稿與 SQL 邏輯,才能上線變成正式報表。 完整版(每一步誰做、產出什麼) 序 誰做 步驟與說明 1 Human 記原話、不詮釋 把主管的需求原句記下來,包含他順口提到的例子或期待,先不要自己轉譯成任何技術定義。→ 需求原始紀錄 2 AI AI 整理待確認清單 依原話拆解出指標定義、分子、分母、時間基準、對象、排除條件、資料來源、更新頻率八項的候選選項,逐項標示【待確認】,這一步明確禁止產出 SQL。→ 待確認清單草稿 3 Human 逐項核對拍板 拿著待確認清單回去找業務主管與相關人,一項一項問清楚選哪個,寫成正式定義。跨部門會用到的指標要讓相關部門一起確認。→ 已拍板的正式定義 4 Tool 核對資料來源 用唯讀查詢實際核對候選資料來源的欄位是否存在、型態是否相符、時區與命名是否跟業務認知一致;對不上的話退回上一步重新確認定義或改用其他來源。→ 已驗證的資料來源清單 5 AI 生成規格書與 SQL 草稿 所有八項條件都確認後,才生成正式的 Data Requirement Spec 全文與對應的 SQL 草稿,SQL 裡每一個 WHERE、JOIN、GROUP BY 都要能對回規格書的具體條款。→ 規格書與 SQL 草稿 6 Human 簽核定稿 業務主管確認規格書內容與他要的一致,資料負責人確認 SQL 邏輯與規格書相符,兩邊都簽核才算定稿。→ 已簽核的規格書與 SQL 7 Human 發布規格書 把定稿的規格書、SQL、以及規格書裡註明的假設與限制條件一起發布到共用位置,讓後續要用同一個指標的人有依據可查。→ 正式發布的 Data Requirement Spec
三、動手做 備料 → 指令 → 產出 → 工具
這一區是真的動手:先備料、再貼指令、然後對照產出應該長什麼樣。手上是哪一支 AI 都做得完,差別寫在最後的工具那一節。
05 開始前要準備什麼標「必要」的沒備齊就先別開始
業務主管的原話必要 一字不改記下來,不要自己先翻譯成「他應該是要 DAU」,翻譯這件事該由待確認清單完成,不是由你腦補完成。
資料庫或資料表的唯讀存取權限必要 沒有辦法查欄位是否存在、型態是否相符,規格書就只能停在「假設」層級。
既有相關報表或指標的清單(如果有)可選 避免同一件事又定義出第二種口徑,先看看公司裡有沒有已經在用的類似指標。
可以核對的關鍵人清單必要 業務主管本人、可能還有財務或營運部門,指標若跨部門使用要一起拍板,不能只問發起需求的那個人。
存放規格書與版本紀錄的位置必要 共用試算表或知識庫,決定好位置規格書才有機會被後續的人找到、沿用、更新。 餵進去的東西要長這樣 業務主管的模糊需求原話 + 逐項核對拍板後的八項定義 + 資料庫欄位唯讀核對結果。
原話要一字不改記錄,不要先自行翻譯成技術定義。 八項定義要全部核對過才能往下一步,缺一項就停在待確認清單階段。 資料來源要附唯讀查詢核對結果,包含表名、欄位名、型態、時區。 跨部門會用到的指標,八項定義要讓相關部門一起確認,不能只問需求提出人。 涉及財務認列或法規標準的指標,先確認是否有既定規範要遵守,不能由業務主管單方面拍板。 【原話】「我想在下週的會議上看到我們 App 的使用者活躍度,最近好像掉了,我想知道是不是真的在流失。」
【已拍板八項定義】
1. 指標定義:活躍=當日完成至少一次核心操作(上課、下單、發文)。
2. 分子:event_log 中 action_type='core_action' 的不重複 user_id。
3. 分母:(暫無,本次為絕對人數指標)。
4. 時間基準:自然日,UTC+8。
5. 對象:全部註冊使用者。
6. 排除條件:account_type IN ('test','internal');deleted_at 不為 NULL 的帳號。
7. 資料來源:event_log 表、users 表。
8. 更新頻率:每日凌晨 2 點跑前一天資料。
【唯讀核對結果】
event_log 表:user_id (varchar)、action_type (varchar)、created_at (timestamp, UTC) —— 已確認存在。
users 表:account_type (varchar)、deleted_at (timestamp, nullable) —— 已確認存在。 06 Prompt(快速/完整/進階)A 快速版貼上就能用;B 完整實戰版把角色、限制、步驟、輸出格式與驗收標準寫足;C 進階版是拿去建 GPT/Skill/Agent 的系統指令。三種都附可替換變數、使用範例、預期輸出與人工確認點。
三種版本共通的紅線 三版都不適合用在 不要在八項條件還沒全部確認前產出任何 SQL 或查詢語法。 不要把「未定稿口徑」的粗略版本悄悄升級成正式報表數字。 不要用猜測的欄位名稱或型態當作已驗證的資料來源。 三版都必須由人確認 八項條件的最終定義由業務主管拍板,AI 只能提供候選。 資料來源欄位是否存在、型態是否相符,由人用唯讀查詢實際核對。 SQL 每個條件是否對回規格書條款,由資料負責人核對。 規格書定稿要業務主管與資料負責人共同簽核。 適合的工具 ChatGPT Claude
👇 直接複製,{ } 換成你的內容 複製這段 Prompt
我是{職稱},主管提出以下模糊的數據需求:「{原話}」。我還不知道正確的指標定義、分子分母、時間基準、對象、排除條件、資料來源與更新頻率。請不要現在就寫 SQL 或假設一套定義,先幫我列出一份「待確認清單」:
1. 這個詞在業務上可能對應哪幾種常見定義?逐一列出,每個定義要說明分子與分母各是什麼。
2. 每種定義各自需要哪些時間基準的選項(例如自然日、滾動 7 天、當月)?
3. 「對象」有哪些可能範圍(例如全部使用者/付費使用者/特定產品線)?
4. 有哪些常見的排除條件應該考慮(測試帳號、內部帳號、已刪除或停用帳號等)?
5. 這個指標通常會從哪幾種資料來源取得(登入紀錄、行為事件、訂單紀錄等),各有什麼限制?
6. 建議的更新頻率是什麼,為什麼?
請用清單列出所有候選項,每項候選都要標明「待確認」,不要幫我下結論、不要輸出任何 SQL。 可替換變數 變數 要換成什麼 {職稱}你的角色,例如資料分析師、PM。 {原話}業務主管的需求原句,盡量一字不改照貼。
完整使用範例(照這樣填) 我是資料分析師,主管提出以下模糊的數據需求:「我想在下週的會議上看到我們 App 的使用者活躍度,最近好像掉了,我想知道是不是真的在流失。」我還不知道正確的指標定義、分子分母、時間基準、對象、排除條件、資料來源與更新頻率。請不要現在就寫 SQL 或假設一套定義,先幫我列出一份待確認清單。(照母提示詞六條) 預期輸出範例(拿到的東西應該長這樣) 【待確認清單】
一、指標定義候選
(A) 活躍 = 當日有登入。
(B) 活躍 = 當日有登入「且」完成至少一次核心操作(例如上課、下單、發文,依產品而定)。
(C) 活躍 = 當日有任何被記錄的行為事件(含被動的頁面瀏覽)。
【待確認:主管想看的「活躍」比較接近哪一種?如果是想知道「流失」,通常對應到 B 或 C,因為單純登入不代表真的在用。】
二、分子與分母
若選 DAU/MAU 這種比率型指標:
分子候選:符合上面活躍定義的不重複使用者數。
分母候選:(a) 當月累計註冊使用者數 (b) 當月曾登入過至少一次的使用者數。
【待確認:分母要不要排除「從沒登入過」的帳號?兩種算出來的比率差異可能很大。】
三、時間基準候選
(A) 自然日(每天 00:00–23:59,依哪個時區?)
(B) 過去 7 天滾動平均
(C) 當月累計
【待確認:「最近好像掉了」是跟上週比、上月比、還是跟去年同期比?】
四、對象範圍候選
(A) 全部註冊使用者 (B) 付費使用者 (C) 特定產品線或特定地區使用者
【待確認:如果只有付費使用者在流失,跟全體使用者流失,處理方式完全不同。】
五、排除條件候選
測試帳號、內部員工帳號、客服測試帳號、已申請刪除但尚未清除的帳號。
【待確認:目前系統裡這些帳號有沒有一個明確的標記欄位可以排除?】
六、資料來源候選
(A) 登入紀錄表 (B) 行為事件記錄表(event log)(C) 訂單或交易表
【待確認:這幾張表各自的記錄範圍與更新時間可能不同,需要實際查過才能確認能不能用。】
七、更新頻率候選
(A) 每日一次(隔日更新前一天資料)(B) 每小時 (C) 即時
【待確認:下週會議要看的是「到會議前一天」的資料,每日更新應該就夠,除非有即時監控的需求。】
八、下一步
以上八項全部標【待確認】,尚未產出任何 SQL 或查詢語法。建議帶著這份清單去跟主管當面核對,特別是第一項(活躍的定義)與第三項(時間基準),這兩項對最終數字的影響最大。 常見錯誤用法 拿到候選清單後自己選一個看起來最合理的就開始寫 SQL,那樣等於是你在幫主管做決定,風險換了個人扛而已。 只核對指標定義那一項,其他七項照候選清單第一個選項直接用,時間基準與排除條件常常才是數字對不上的真正原因。 把候選清單原封不動轉貼給主管看,八個問題一次丟過去,主管通常答不完。應該先自己整理成 2–3 個關鍵問題再去問。 這一版另外不適合 沒有額外的,看上面「三種版本共通的紅線」那一段就好。
缺少資料時怎麼辦 如果主管的原話裡完全沒提到任何時間範圍或比較基準(例如只說「我要看活躍度」沒有前後文),候選清單的時間基準那一項會特別籠統,一定要當面問清楚再往下走,不要用預設的「當日」帶過。
這一版另外要人確認 沒有額外的,看上面「三種版本共通的紅線」那一段就好。
適合的工具 ChatGPT Claude 公司 BI/資料庫唯讀帳號
👇 直接複製,{ } 換成你的內容 複製這段 Prompt
以下是已經跟業務主管核對拍板的八項定義,以及資料庫實際欄位核對結果。請完成兩件事:
1.【生成 Data Requirement Spec】用固定格式輸出完整規格書,包含:指標名稱、業務背景(一段話說明為什麼要這個指標)、指標定義(文字敘述)、分子定義(含篩選條件)、分母定義(含篩選條件)、時間基準、對象範圍、排除條件清單、資料來源(含表名、欄位、確認過的型態)、更新頻率、負責人與拍板日期、已知限制或假設。
2.【生成 SQL 草稿】依規格書寫出對應的 SQL 查詢,並在每個 WHERE、JOIN、GROUP BY 子句旁用註解標明它對應規格書的哪一條。
規則:
- 規格書與 SQL 只能使用我提供的八項已拍板定義與已驗證欄位,不得自行補充或替換成其他常見算法。
- 如果我提供的資訊有任一項仍是【待確認】或欄位未經驗證,不要生成 SQL,改為列出還缺什麼、需要回去確認什麼。
- SQL 裡出現的每一個篩選條件都要能在規格書裡找到對應文字,找不到對應的條件視為你自行加入,不允許出現。
已拍板的八項定義:{貼上}|資料庫欄位核對結果:{貼上} 可替換變數 變數 要換成什麼 {貼上}已核對拍板的八項定義(指標定義、分子、分母、時間基準、對象、排除條件、資料來源、更新頻率)。 {貼上}資料庫欄位核對結果,包含表名、欄位名、型態、是否驗證通過。
完整使用範例(照這樣填) (貼上已拍板的八項定義:活躍=當日有登入且完成至少一次核心操作;分母=當月曾登入過至少一次的使用者;時間基準=自然日,UTC+8;對象=全部註冊使用者但排除測試與內部帳號;排除條件=account_type IN ('test','internal');資料來源=event_log 表的 action_type='core_action';更新頻率=每日凌晨 2 點跑前一天資料。並附上唯讀查詢核對結果:event_log 表確有 user_id、action_type、created_at 三欄,created_at 為 UTC 時間戳,account_type 欄位存在於 users 表。) 預期輸出範例(拿到的東西應該長這樣) 【Data Requirement Spec|使用者日活躍度】
指標名稱:日活躍使用者數(DAU,核心操作版)
業務背景:主管觀察到近期使用量可能下滑,需要每日追蹤活躍使用者數,及早發現流失徵兆。
指標定義:當日完成至少一次核心操作(上課、下單、發文等,依 event_log 的 action_type='core_action' 判定)的不重複使用者數。
分子定義:當日 event_log 中 action_type='core_action' 的不重複 user_id 數,且該 user_id 對應的 users.account_type 不在 ('test','internal') 之列。
分母定義:(此指標為絕對人數,暫無分母;若後續要換算比率,分母定義為當月曾登入過至少一次的使用者數,需另行拍板。)
時間基準:自然日,時區 UTC+8,以 created_at 換算後的日期為準(原始時間戳為 UTC,需 +8 小時換算)。
對象範圍:全部註冊使用者。
排除條件:account_type IN ('test','internal');已申請刪除且 deleted_at 不為 NULL 的帳號。
資料來源:event_log 表(欄位:user_id, action_type, created_at)+ users 表(欄位:account_type, deleted_at)。已用唯讀查詢核對,兩張表欄位與型態均存在且相符。
更新頻率:每日凌晨 2 點(UTC+8)跑前一天 00:00–23:59 的資料。
負責人與拍板日期:{待填}/{待填}
已知限制或假設:event_log 的 action_type 分類目前只到產品端定義的「核心操作」,若產品後續新增其他被視為核心的動作類型,需要回頭更新本規格書,不會自動涵蓋。
【SQL 草稿】
```sql
SELECT
DATE(CONVERT_TZ(e.created_at, '+00:00', '+08:00')) AS active_date, -- 對應「時間基準:自然日 UTC+8」
COUNT(DISTINCT e.user_id) AS dau
FROM event_log e
JOIN users u ON u.user_id = e.user_id
WHERE e.action_type = 'core_action' -- 對應「指標定義:完成至少一次核心操作」
AND u.account_type NOT IN ('test', 'internal') -- 對應「排除條件」
AND u.deleted_at IS NULL -- 對應「排除條件:已刪除帳號」
AND DATE(CONVERT_TZ(e.created_at, '+00:00', '+08:00')) = CURDATE() - INTERVAL 1 DAY
GROUP BY active_date;
```
這份草稿的每個條件都對回規格書的對應項目,沒有規格書之外自行加入的邏輯。若要換算成比率型的「活躍度」,需要先補上分母定義那一項的拍板,目前暫不產出比率版本的 SQL。 常見錯誤用法 把「已知限制或假設」那一段刪掉讓文件看起來更乾淨。那一段是未來出狀況時第一個要回頭查的地方。 分母定義還沒拍板就要 AI 硬算出一個比率型指標。沒有分母的規格書寧可先只給絕對人數,也不要用猜的分母。 SQL 生成後直接上線,沒有請資料負責人核對條件與規格書是否一一對應。 這一版另外不適合 沒有額外的,看上面「三種版本共通的紅線」那一段就好。
缺少資料時怎麼辦 沒有提供資料庫欄位核對結果就要求生成 SQL,AI 只能用假設的欄位名稱寫查詢,型態、時區、命名任何一項猜錯,SQL 跑出來的數字都不能信。
這一版另外要人確認 沒有額外的,看上面「三種版本共通的紅線」那一段就好。
適合的工具 自訂 GPT/Claude Project Claude Skill ChatGPT
👇 直接複製,{ } 換成你的內容 複製這段 Prompt
請把「業務需求轉數據規格」這套流程,寫成一份可以直接用來建立共用受理助手的系統指令。
【系統指令要包含】
1. 角色與任務:接收任何模糊的數據需求,先做需求釐清,不主動生成 SQL 或查詢語法。
2. 開場動作:無論使用者說什麼,第一步永遠是拆解出「指標定義、分子、分母、時間基準、對象、排除條件、資料來源、更新頻率」八項候選清單,逐項標【待確認】。
3. 硬性限制——以下情況一律不產出 SQL,直接回報缺什麼:
- 八項條件中有任何一項仍標【待確認】。
- 使用者提供的資料來源沒有附上唯讀查詢核對結果(欄位存在、型態相符)。
- 使用者要求「先給我抓個大概」——這時要求對方明確承認這是「未定稿口徑」並在輸出上標註,而不是默默升級成正式數字。
4. 條件齊全後的動作:生成正式 Data Requirement Spec(固定格式:指標名稱、業務背景、指標定義、分子、分母、時間基準、對象範圍、排除條件、資料來源、更新頻率、負責人與日期、已知限制)+ 對應 SQL 草稿,SQL 每個條件都要標註對應規格書條款。
5. 版本紀錄:規格書修改時要記錄修了哪一項、誰同意的、日期。
【另外請給我】
(a) 一份「使用說明」,寫給第一次用的同事看,含三個好例子與三個壞例子。
(b) 一份「維護說明」:規格書要更新時該改哪裡、誰負責核對資料來源、多久回頭檢查一次既有指標是否還適用。 可替換變數 變數 要換成什麼 (無)這段是完整的系統指令產生請求,不含需要替換的變數,直接整段複製使用即可。
完整使用範例(照這樣填) (不需要額外變數,直接把上面的 body 貼給 AI 即可取得完整系統指令) 預期輸出範例(拿到的東西應該長這樣) 【共用受理助手 系統指令】
一、你的角色
你是本單位的數據需求受理助手。任何人丟給你模糊的數據需求(例如「我要看活躍度」「我要看流失」),你的任務是先把它拆解清楚,不是直接生成 SQL。
二、開場動作
收到需求後,第一步永遠是列出八項候選清單:指標定義、分子、分母、時間基準、對象、排除條件、資料來源、更新頻率,逐項標【待確認】,並提示使用者「請帶著這份清單去跟需求提出人核對」。
三、不產出 SQL 的情況
1. 八項條件任一項仍為【待確認】——回報「還缺哪幾項」,不生成查詢語法。
2. 資料來源沒有附唯讀查詢核對結果——回報「請先核對欄位是否存在、型態是否相符」。
3. 使用者要求「先抓個大概」——同意提供粗略版本,但輸出最上方必須標註【未定稿口徑,僅供參考,不得作為正式報表依據】。
四、條件齊全後
生成 Data Requirement Spec(固定十一欄格式)+ SQL 草稿,SQL 每一行篩選條件旁加註解對應規格書條款編號。
五、版本紀錄
每次規格書修改,記錄【修改項目】【修改前】【修改後】【核准人】【日期】,附加在規格書最下方,不覆蓋舊版本。
──────────
【使用說明(給第一次用的同事)】
這個助手做什麼:把模糊的數據需求拆解成可以核對的具體條件,並在條件齊全後生成規格書與 SQL 草稿。
這個助手不做什麼:不會自己決定「活躍」該怎麼算,不會在條件不全時先給你一個能跑的 SQL 讓你「先用著」。
好例子:
1. 貼上「我想看轉換率,從瀏覽到下單」,讓助手先列候選清單。
2. 八項都跟需求提出人核對完,貼回來要求生成正式規格書與 SQL。
3. 資料來源有兩個候選表,先各自查過欄位再回來讓助手比較哪個更合適。
壞例子:
1.「先幫我用最常見的算法寫一版 SQL,之後再調」——這正是要避免的事,最常見的算法很可能不是主管要的那個。
2. 把候選清單裡的【待確認】自己隨便選一個就當作已核對——助手擋不住這種自欺,需要人誠實面對還沒問過的事。
3. 資料來源核對只看欄位名稱像不像,沒有真的查過型態與時區。
【維護說明】
- 系統指令的「八項候選清單」定義每季檢視一次,依公司實際常見指標更新候選選項的內容。
- 資料來源核對由熟悉資料庫結構的人負責,助手本身不能執行查詢,只能引導使用者去查。
- 既有規格書每半年抽查一次,確認資料表結構是否變動、指標定義是否仍適用。
- 負責人:〔填寫〕。更新後在共用位置註明版本與日期。 常見錯誤用法 把第三節的硬性限制拿掉,讓助手在條件不全時也生成一版「先用著」的 SQL。那正是這個方法要擋下的行為,拿掉等於整套白做。 讓助手兼職幫忙「順便分析一下這份資料反映什麼」。它的任務只到規格書與 SQL 草稿,分析結論屬於另一個工作,混在一起容易讓人誤把候選清單當成分析結論。 版本紀錄嫌麻煩就跳過。半年後沒人記得某個排除條件是誰、為什麼加上去的,等於規格書失去了可信度。 這一版另外不適合 沒有額外的,看上面「三種版本共通的紅線」那一段就好。
缺少資料時怎麼辦 沒有指定「誰負責核對資料來源」,助手會預設使用者自己查過,但實際上很多需求提出人根本沒有資料庫存取權限,核對這一步會被悄悄跳過。
這一版另外要人確認 沒有額外的,看上面「三種版本共通的紅線」那一段就好。
07 產出應該長什麼樣拿到的東西要長這樣 Data Requirement Spec 固定十一欄格式 + 對應的 SQL 草稿,SQL 每個條件都標註對應規格書條款。
完成品:同一句「我要看活躍度」,兩種處理方式的落差 【沒有先問清楚,AI 直接生成】
使用者輸入:「幫我寫一段 SQL,算出我們 App 每天的活躍使用者數。」
AI 產出(節錄):
```sql
SELECT DATE(created_at) AS day, COUNT(DISTINCT user_id) AS dau
FROM login_log
GROUP BY day;
```
附帶說明:「這段 SQL 統計每天登入過的不重複使用者數,也就是常見的 DAU 定義。」
→ 看起來完全正確,能跑、有結果。問題是:
→ 用的是 login_log(登入紀錄),沒有人確認過主管要的「活躍」是不是「有登入就算」,還是要有實際操作行為。
→ created_at 沒有處理時區,「每天」的切法可能跟業務認知的一天對不上。
→ 沒有排除測試帳號與內部帳號,這兩種帳號通常登入頻率很高,會把活躍度墊高。
→ 這份 SQL 沒有任何文件說明它的假設,三個月後換人維護,沒人知道當初為什麼這樣寫。
【先列待確認清單,逐項核對後才生成】
AI 產出(節錄,條件確認後):
「【Data Requirement Spec|使用者日活躍度】
指標定義:當日完成至少一次核心操作的不重複使用者數。
資料來源:event_log 表(action_type='core_action'),已用唯讀查詢核對欄位存在、型態相符。
時間基準:自然日,UTC+8,已處理時區轉換。
排除條件:account_type IN ('test','internal');deleted_at 不為 NULL。
【SQL】
SELECT DATE(CONVERT_TZ(e.created_at,'+00:00','+08:00')) AS active_date,
COUNT(DISTINCT e.user_id) AS dau
FROM event_log e JOIN users u ON u.user_id=e.user_id
WHERE e.action_type='core_action'
AND u.account_type NOT IN ('test','internal')
AND u.deleted_at IS NULL
GROUP BY active_date;」
→ 每一行都能回答「為什麼這樣算」,時區與排除條件都處理過,三個月後換人維護,規格書就是交接文件。
【差別在哪】
第一種問「能不能跑出結果」,第二種問「這個結果是不是主管真正想看的那個定義」。SQL 語法本身可能一樣簡單,差別全部發生在動筆之前那八個問題有沒有問過。 輸出格式規格(要照著做的人再展開) 規格書十一欄缺一不可:指標名稱、業務背景、指標定義、分子定義、分母定義、時間基準、對象範圍、排除條件、資料來源、更新頻率、負責人與拍板日期,外加已知限制或假設。 SQL 裡的每個篩選條件都要有註解標明對應規格書的哪一項,找不到對應的條件視為不允許出現的自行加料。 分母未拍板時,規格書要明講「暫無分母」,不能用猜的分母硬湊出比率。 已知限制或假設一定要寫,那是未來對不上帳時第一個要回頭查的地方。 規格書修改要留版本紀錄,不能直接覆蓋舊版本。 指標名稱:日活躍使用者數(DAU,核心操作版)
業務背景:主管觀察到近期使用量可能下滑,需要每日追蹤活躍使用者數。
指標定義:當日完成至少一次核心操作的不重複使用者數。
分子定義:event_log 中 action_type='core_action' 的不重複 user_id,且排除 test/internal 帳號。
分母定義:暫無,本次為絕對人數指標。
時間基準:自然日,UTC+8。
對象範圍:全部註冊使用者。
排除條件:account_type IN ('test','internal');deleted_at 不為 NULL。
資料來源:event_log 表(已驗證)、users 表(已驗證)。
更新頻率:每日凌晨 2 點(UTC+8)跑前一天資料。
負責人與拍板日期:王經理/2026-08-20。
已知限制或假設:core_action 分類目前僅涵蓋既定的三種操作,產品新增操作類型時需回頭更新本規格書。
SQL:
SELECT DATE(CONVERT_TZ(e.created_at,'+00:00','+08:00')) AS active_date, -- 對應時間基準
COUNT(DISTINCT e.user_id) AS dau
FROM event_log e JOIN users u ON u.user_id=e.user_id
WHERE e.action_type='core_action' -- 對應指標定義
AND u.account_type NOT IN ('test','internal') -- 對應排除條件
AND u.deleted_at IS NULL -- 對應排除條件
GROUP BY active_date; 08 工具怎麼挑這幾支都做得到——差別在你手上有哪一支、資料能不能外流。標「起手」的是不知道從哪支開始時的建議,不是限定。
工具 什麼時候用 為什麼 注意 ChatGPT ↗ 起手 整理待確認清單、生成規格書與 SQL 草稿 拆解待確認清單、生成規格書與 SQL 草稿 追問式對話穩定,能依固定格式逐條輸出並標註對應規格書條款。 條件不全時容易自己補一個常見定義往下寫,一定要明確要求它在條件不全時停下來回報。 Claude ↗ 長對話追問、規格書與 SQL 交叉核對 需求脈絡長、要交叉核對規格書與 SQL 是否一致 長輸入穩定,適合把整份規格書與 SQL 一起貼進去要求逐條核對有沒有對不上的地方。 同樣要明確要求缺條件時不產出 SQL,不能只靠它自己判斷。 試算表 存放候選定義、核對紀錄與版本歷程 存放候選清單、拍板紀錄與版本歷程 多人需要一起看、一起核對拍板結果,試算表比對話紀錄更容易被找到與更新。 定稿後的版本要鎖起來或加註「定稿」,避免被誤改成候選清單的舊版本。 公司 BI/資料庫唯讀帳號 確認欄位是否存在、型態是否符合規格書所寫 核對候選資料來源的欄位是否存在、型態是否相符 規格書寫的資料來源必須是實際查過的,不能只憑欄位名稱推測。 唯讀權限只能查看,不能拿來做任何寫入或修改;查到的結果要截圖或記錄下來附進規格書。
四、不要做錯 這幾關不下放
這一區是踩過的坑與該守的線。標「不下放」的步驟請不要交給 AI 決定;Checklist 是拿來驗收的,不是拿來勾好看的。
09 會卡住與會做錯的地方會卡住的地方(流程困難點)
AI 自己選一種常見定義就動手寫 SQL 「活躍」「流失」都有好幾種業界常見算法,AI 選了其中一種、語法正確、看起來很專業,但那不是主管腦中的那個定義。
分子分母各自表述 同一份報表裡,活躍度用「登入天數」當分子,流失率卻用「最後下單日」當基準,兩個指標看似互補,其實根本不是同一群人。
時間基準被悄悄選定 「自然日」「過去 7 天滾動」「當月累計」算出來的數字差異很大,AI 沒問清楚就會選一個預設值,而預設值往往不是主管要的。
排除條件被忽略 測試帳號、內部帳號、客服帳號沒被排除,活躍度或轉換率會被稀釋或灌水,數字失真但看起來完全正常。
資料來源只憑欄位名稱猜 欄位叫 last_login 不代表它真的記錄每次登入,也可能只在特定情境更新,沒有實際查過就當作事實使用。 會做錯的地方(常見失敗方式) AI 自己選一種常見定義就寫 SQL 「活躍」「流失」都有好幾種業界常見算法,AI 選的那一種未必是主管腦中的那個。
怎麼修 八項條件全部標【待確認】列出候選,明確要求條件不全就不產出 SQL。
分子分母各自表述 同一份報表裡不同指標用不同口徑計算同一群人,數字看似合理其實無法互相對照。
怎麼修 規格書把分子分母寫死成具體的欄位與篩選條件,不同指標交叉核對是否用同一套對象與排除條件。
時間基準被悄悄選定 自然日、滾動 7 天、當月累計算出來的數字差異很大,沒問清楚就用了 AI 的預設值。
怎麼修 時間基準列為候選清單必答項目之一,明確問主管是跟哪個時間點比較。
資料來源只憑欄位名稱猜 欄位名稱看起來合理,但實際型態、時區、記錄範圍跟業務認知不一致,SQL 跑出來的數字不能信。
怎麼修 用唯讀查詢實際核對欄位存在與型態,核對結果附進規格書。
粗略版本悄悄變成正式數字 主管說「先抓個大概」,做的人心裡想著之後再補正,結果那個大概版本被直接拿去做決策。
怎麼修 粗略版本一律標註【未定稿口徑】,正式報表不得使用未標註的粗略版本。
規格書沒人簽核就上線 少了業務主管與資料負責人的簽核,日後有爭議查不到是誰同意的定義。
怎麼修 規格書定稿流程強制要求兩方簽核紀錄才能發布。
其他注意事項 讓 AI 直接把「活躍度」「流失」「轉換」翻成它認為合理的 SQL,其實是 AI 自己選了一種定義,主管很可能是別的意思。 分子分母定義混用,例如活躍用「登入天數」算但流失用「最後一次下單」算,兩張報表看起來像在講同一群人,其實口徑完全不同。 資料來源沒有實際核對過欄位與型態,規格書寫得很漂亮,SQL 一跑才發現那個欄位根本不存在或時區不對。 10 人工把關與安全限制AI/Agent/Tool 介入在哪幾步 流程位置 誰 做什麼/怎麼做 釐清階段 AI 拆解模糊需求成待確認清單 依原話列出指標定義、分子、分母、時間基準、對象、排除條件、資料來源、更新頻率的候選選項,每項都標【待確認】,此階段強制不得產出 SQL 或任何查詢語法。驗證階段 Tool 唯讀查詢核對資料來源 用 readonly-db 之類的唯讀存取,實際確認候選欄位存在、型態相符、命名與時區跟業務認知一致,對不上就標記回上一步。產出階段 AI 生成規格書全文與 SQL 草稿 只有在八項條件全部確認之後才進行,SQL 的每個條件都要標註對應規格書的哪一條,不允許出現規格書沒寫但 SQL 裡多加的邏輯。使用階段 Agent 做成需求受理入口,擋下未經確認就要 SQL 的請求 把「先問八項條件、條件未齊不產出 SQL」寫進系統指令,變成任何人提出模糊數據需求時的固定第一關。
這幾關不下放
八項條件的最終拍板 指標定義、分子、分母、時間基準、對象、排除條件、資料來源、更新頻率,每一項的最終選擇都由業務主管(跨部門則加上相關部門)拍板,AI 只能提供候選。
資料來源的實際核對 欄位是否存在、型態是否相符,要由人用唯讀查詢實際核對過,不能只看 AI 說的欄位名稱。
SQL 邏輯與規格書的對應 SQL 每個條件都要能指回規格書的具體條款,這一項由資料負責人核對,對不上要退回重寫。
規格書定稿簽核 業務主管與資料負責人都簽核過,規格書才能發布成為正式依據。
未定稿口徑的標註 若主管接受先用粗略版本,粗略版本要明確標示「未定稿口徑」,由人決定要不要在報表上這樣呈現。 安全與權限限制
唯讀權限的邊界 核對資料來源只能用唯讀存取查看結構與少量樣本資料,不得用來做任何寫入、修改或大量匯出。
規格書與 SQL 裡的敏感欄位 若涉及個資欄位(姓名、聯絡方式等),規格書與 SQL 草稿裡應以欄位名稱與型態描述為主,避免貼出實際個資範例。
共用位置的存取範圍 規格書存放位置的分享權限要設對,特別是包含資料表結構與商業指標定義的內容。
財務或法規認列指標的定義權 涉及營收認列、法定合規指標時,定義不能由業務主管單方面拍板,需先確認是否有既定規範。
SQL 不得包含未經確認的邏輯 任何規格書之外自行加入的篩選條件或運算,都可能悄悄改變數字的意義,一律視為不允許。 11 Checklist 與驗收標準做的時候逐項打勾 做完了才檢查:全部成立才算完成 指標定義、分子、分母、時間基準、對象、排除條件、資料來源、更新頻率八項都已由業務主管(跨部門則含相關部門)拍板,沒有一項仍標【待確認】。 候選清單提出階段沒有夾帶任何 SQL 或查詢語法。 資料來源已用唯讀查詢實際核對欄位存在、型態相符,核對結果附在規格書裡。 正式規格書具備十一欄固定格式,且「已知限制或假設」一欄非空。 SQL 草稿的每個條件都能對回規格書的具體條款,沒有規格書之外自行加入的邏輯。 規格書已由業務主管與資料負責人共同簽核,並留有版本紀錄。 若使用未定稿的粗略版本,已明確標註【未定稿口徑】。 五、延伸 看別人做過,然後往下一步
看看別人實際做過的樣子,再決定下一步往哪走。沒有找到可查證案例的方法,這裡會直說沒有,不拿相似的案例充數。
12 實際案例「活躍度掉了」背後,其實是三種不同的問句
當時的狀況: 一家線上課程平台的營運主管在週會前一天丟訊息給分析師:「我想在明天會議上看使用者活躍度,最近好像在掉,看一下是不是真的在流失。」分析師手上同時有登入紀錄表、行為事件表、訂單表三種可能來源,過去也曾經因為不同人各自定義「活躍」而在會議上為了數字吵起來。
AI 做了什麼 依原話拆解出八項候選清單,明確指出「活躍」在資料裡至少有三種可能定義(單純登入/登入且核心操作/任何被記錄的行為),並提示這跟主管真正想問的是「流失」還是「活躍度下降」有關。 點出時間基準候選(自然日/7 天滾動/當月累計)會讓「最近好像在掉」這句話有完全不同的答案,建議先問清楚主管比較的基準是什麼。 在八項條件確認、資料來源唯讀核對通過後,才生成正式規格書與 SQL 草稿,並在每個 SQL 條件旁標註對應規格書條款。 生成規格書時明確寫出「分母暫無,本次為絕對人數指標」,沒有因為使用者沒提供分母定義就自己湊一個比率。 人做了什麼 分析師沒有先跑一版「登入次數」交差,而是先拿候選清單去跟主管核對,發現主管真正想知道的是「核心操作」下降,不是單純登入下降。 跟主管確認時間基準是跟上週同一天比,不是跟上個月比,這個資訊如果沒問,AI 的候選清單裡三個選項都合理,會議上很可能選錯。 用唯讀查詢實際核對 event_log 表的 action_type 分類與時區,發現 created_at 是 UTC 時間,如果沒轉換時區,「當日」的活躍人數會系統性地少算或多算幾小時的資料。 規格書定稿後請資料負責人核對 SQL 邏輯,確認排除條件真的排除了測試帳號,才拿去給主管在會議上使用。 結果: 會議上呈現的數字明確標著這是「核心操作版活躍度、自然日 UTC+8、排除測試與內部帳號」,主管當場就能判斷這個口徑跟他心裡想問的問題是不是同一件事,而不是拿到一個沒有註明算法的數字圖表。過程中花在核對八項條件與時區的時間,比起會議後才發現算錯要重跑一次規格書、還可能已經根據錯誤數字做出判斷,代價小得多。
待補資料:本站不提供這次規格書後續實際降低了多少次「口徑爭議會議」的量化數據。建議自己做一件簡單的事——記錄接下來三個月裡,因為指標定義不一致而重新確認或重跑報表的次數,跟導入這套流程之前的頻率相比,作為是否值得繼續投入的依據。
13 相關方法與下一步確認同一個詞在不同報表裡口徑一致 規格書定稿只解決了這一個指標,公司裡可能還有別的報表用了同一個詞但沒對過口徑。
資料來源核對之後的進一步探索 規格書定稿後,實際查詢與資料品質探索是下一步的日常工作。
規格書要做成給主管看的報表 定稿的規格書與 SQL 結果,接下來常常要整理成 Excel 或簡報形式呈現。
資料來源本身有髒資料或缺漏 核對欄位時若發現大量空值、重複或格式不一致,需要另外處理資料清理,才能讓規格書裡的數字可信。
可直接使用RELATED PROMPTS Download 這個方法的模板與 Checklist 下載包整理中——訂閱更新 ,上架後第一時間通知你。
這個站的做法 有來源 引用的案例都附得出可以點進去的出處;還沒查證完的另外標示,不跟已證實的混在一起。 可驗收 每個方法都附 Checklist 與驗收標準——你要能自己驗,而不是相信 AI 說它做完了。 不亂編 指令一律要求「材料裡沒有的不准補」,缺的標【待補】列成問題,不用漂亮的句子蓋過去。 不自動送出 站內的指令與工具不會替你發布、寄出或執行收不回來的動作。最後一步永遠是人按下去。 人要把關 方法裡標「不下放」的步驟,寫明白就是不要交給 AI 決定。 一般人照做 不用寫程式。步驟寫成照著做的樣子,術語第一次出現就用白話解釋。
取得 AI 實戰工具與更新
之後會不定期整理:新方法、指令包(Prompt Pack)、Checklist 與模板。免費、無廣告;送出後會收到一封確認信,點了連結才算訂閱成功 ,之後每封信都附一鍵退訂。
送出即表示你同意本站的 隱私權說明 :我們只儲存 Email 與同意版本,不會把 Email 和你的閱讀紀錄綁在一起。沒有點確認信就不會收到任何內容,之後也隨時可以一鍵退訂。