如何把 CSV 轉成流程地圖
如何把一份 CSV 匯出檔轉成流程地圖:找出你的系統本來就匯出的階段欄與負責人欄,把它們抄進「橫向泳道」與「縱向泳道」,讓每一個步驟落在它該在的位置。
流程地圖是一張多了第二條軸的流程圖——每個步驟同時坐在它所屬那一段工作的階段之下——而在一個 CSV 裡,那條軸就是多一個欄,通常是匯出檔已經以另一個名字帶著的那一個。
簡而言之
- 「橫向泳道」承載階段,「縱向泳道」承載負責人——同一個 CSV 裡多兩個欄而已。
- 你的匯出檔兩者都有,只是叫作狀態、里程碑、部門或者指派給。
- 階段欄的不重複值會按那些列出現的次序變成泳道標籤。
- 泳道標籤是按確切文字比對的,所以一個尾隨空格或者一個不同的大小寫,會悄悄多出一條泳道。
- 任何含有分隔符的泳道標籤都要用引號包起,否則「財務, 應付」會變成兩個欄。
流程地圖比流程圖多了甚麼
一張流程圖回答一個問題:接下來會發生甚麼。一張流程地圖回答那一題,再加一題——這個步驟坐在整段工作的哪個位置。第二個答案就是階段,而正是它令你看著一張圖就可以說出,二十六個步驟裡有六個發生在訂單獲確認之前,或者一張訂單由接單走到收款之間換手了四次。在 QueryChart 裡,兩個答案都是同一張表上的欄。「橫向泳道」承載階段,「縱向泳道」承載負責人,而一張流程圖不過是那兩個儲存格留了空的流程地圖。
對一個 CSV 而言,這件事比聽起來小,因為那份匯出檔幾乎肯定已經帶著這兩個欄。無論產生這個檔案的是甚麼——一套 ERP、一個工單系統、一個個案管理工具——它都需要對自己的紀錄做篩選與報表,所以它會儲存一個粗略的工作位置,以及一個為此負責的一方。那個位置叫作狀態、訂單狀態、單據類型、里程碑、階段或者工序。那一方叫作負責人、指派給、擁有者、部門、成本中心、工作中心、團隊或者隊列。沒有人是為了畫圖才加那兩個欄的。它們無論如何都是一張流程地圖的兩條軸。
匯出檔唯一不會給你的,是那些列。一份由系統出來的 CSV 是一筆紀錄一列——一條訂單明細、一張工單、一次狀態變更——而一張流程地圖是一次移動一列。一千條訂單明細是二百張訂單走過大約二十個步驟,而任何分組方式都不會把第一份清單變成第二份。所以這次轉換要走兩趟:先把階段欄的不重複值拿來當泳道標籤,然後自己把那些步驟寫出來,並為每一個標上一個階段與一個負責人。先把檔案整理成可以乾淨匯入的樣子,值得花那十分鐘——/yue/guides/流程圖csv檔案結構 處理了那一部分。
下面的示例是一張由 ERP 匯出檔建成的訂單到交付地圖:頂上六個階段、側邊五條泳道、二十六個步驟與四個不同的結局。它一次填一組欄,而泳道欄刻意留到最後,這樣你就看得清楚它們究竟加了甚麼。完成的圖表在 /yue/templates/csv流程地圖,你可以打開它,把自己的列貼上去覆蓋。
把匯出檔自己的欄當成兩條泳道軸
訂單到交付,分四趟填。打開試算表面板,看看每一趟填的是哪幾個欄——兩個泳道欄最後才到。
只有步驟與形狀
第 1 至 6 列全部屬於同一個階段。「客戶送出一張採購訂單」、「把訂單明細輸入 ERP」、檢查「所訂的明細是否與報價相符?」,以及那道檢查可以結束的兩種方式——一次接單確認,或者「訂單於發貨前取消」。六個步驟坐在匯出檔狀態欄的同一個值之下,而這正是一份狀態清單永遠不可能是一張地圖的原因。
以列號寫成的連接
「連線至」填好了,信用那一段接上前半截。「這張訂單是否在信用額度以內?」把在額度以內那一支送去第 11 列,把超出額度那一支送去第 9 列,而它們要麼到達「把訂單放行至倉庫」,要麼停在「訂單以信用拒絕結案」。那些數字是列的位置,不是你匯出檔拿來當鍵的那些單據編號。
分支標籤與那兩條迴路
「連線文字」為每個出口命名,兩條迴路隨即現形。「現在先發有貨的明細嗎?」的「連線至」是 15,12,「連線文字」是 分批出貨並開欠交,等齊整張訂單,所以第二個出口往回走到第 12 列「為每個訂單明細配貨」。包裝檢查上那條有出入的分支以同樣方式回到揀貨。這兩條迴路正是為甚麼同一張訂單會以兩個單據編號在同一份匯出檔裡出現兩次。
兩個泳道欄
最後兩個欄進去,流程圖就變成一張地圖。「橫向泳道」承載接單、信用檢查、配貨、揀貨包裝、發貨與運輸,以及開票與結案;「縱向泳道」承載客戶、銷售、倉庫、財務與承運商。橫著把完成的圖讀一次,那張訂單換手了四次,其中兩次發生在一個階段邊界上而沒有任何已定義的觸發條件——這是任何一個狀態代碼欄都永遠顯示不了給你看的。
運作方式
把檔案當文字打開,讀一讀標題列
在做任何事之前,先用文字編輯器看頭兩行。你需要知道分隔符,在大部分歐洲匯出檔裡它是分號而不是逗號,因為清單分隔符跟隨地區設定;你也需要知道那些欄真正的名字。把標題列抄在紙上;你即將要在那些欄裡挑兩個出來,而其餘一切都由這個選擇決定。
挑出階段欄
階段欄是那個不重複值又少又有次序的欄——狀態、訂單狀態、單據類型、里程碑、階段、工序。數一數:把那個欄排序,取它的不重複值。五六個是一組階段。三十個是一份狀態代碼清單,你要先把它分組才能變成一條軸,因為三十條泳道不是任何人讀得到的圖。
挑出負責人欄,並偏向角色而不是人
負責人、指派給、擁有者、部門、成本中心、工作中心、團隊、隊列、銷售代表、採購員。任何一個都可以做「縱向泳道」。如果那個欄放的是人而不是角色,就先把姓名對應到角色:二十個人一人一條泳道是讀不了的,而且第一次有人轉職就已經錯了,反觀倉庫與財務可以真上好幾年。
寫一個步驟一列,不是一筆紀錄一列
這一趟是沒有工具可以替你做的。你的匯出檔是一條訂單明細或者一張工單一列;地圖需要的是一次移動一列——工作換手或者作出判斷的那些時刻。由單據類型與狀態轉換推算出它們,然後把那個步驟放進「方框文字」,再把你已經挑好的階段與負責人放在旁邊。二十到三十個步驟是一條完整的流程;多過這個數,你描述的就是兩條。
把那兩個欄準確命名為「橫向泳道」與「縱向泳道」
匯入比對的是標題名稱而不是欄的位置,而它不認得的欄會被帶過並忽略。所以你甚麼都不用刪、不用重排:把狀態與指派給留在原處,另外加兩個欄,標題寫「橫向泳道」與「縱向泳道」,再把分組好的值抄過去。原本那些欄會原封跟著走,而你保住了每一條泳道由何而來的紀錄。
把檔案拖到試算表區域,再讀泳道揭露了甚麼
把 .csv 拖到編輯器的試算表區域,或者直接把文字貼進去,地圖就會自己畫出來——沒有精靈,也沒有欄位對應器要走一遍。然後橫著把那些階段讀一次。一個只有一個步驟的階段不是一個階段;一個沒有人擁有的階段是一個隊列;而一個前面沒有判斷的跨泳道交接,正是你這條流程的延誤真正住的地方。
應避免的錯誤
一個含有分隔符而沒有引號的儲存格
作為泳道標籤的「財務, 應付」、「連線至」裡的 4,5 與「連線文字」裡的 是,否,每一個都是一個剛好含有逗號的欄位,所以每一個都必須用雙引號包起。不加引號,它們就會裂成兩個欄位,並把它們後面每一個欄往後推一格——這也正是為甚麼徵狀從來不是你弄壞的那個儲存格,而是泳道欄裡塞滿了連線標籤。
編好號之後才把檔案排序
「連線至」放的是列的位置,所以目標寫好之後再按狀態或日期把 CSV 排序,會令每一列重新編號,並悄悄把整張圖重新接線。先決定列的次序,然後才編號,任何進一步的重排都在編輯器裡做,那裡連接會跟著列一起移動。
其實是狀態的階段
開啟、處理中、暫緩與已結案,是一筆紀錄停留的狀態,不是工作的一段段。一個階段是一個裡面有步驟的區段——接單、信用檢查、配貨。如果你的階段欄讀起來像一部狀態機,就先把它的值分成四至六個區段,然後才拿去做泳道標籤。
以為匯出檔會包含那些例外
一份匯出檔記錄的是它裡面那些紀錄身上發生過的事,所以上一季沒有人走過的分支,在這個檔案裡根本不存在。示例裡那條信用拒絕與那次交付索償,正是一張純由資料驅動的地圖會漏掉的路徑,也正是值得畫出來的那些,因為流程真正壞掉的地方就在那裡。
由你的匯出檔建一張流程地圖
打開這個訂單到交付示例,看看兩個泳道欄是怎樣填的,然後把那些列換成你自己的步驟。
相關指南
常見問題
我需要一張流程地圖,還是一張流程圖就夠?
如果爭論的是接下來會發生甚麼,一張流程圖就夠,而 /yue/guides/從csv建立流程圖 是比較短的那份功夫。當爭論的是時間去了哪裡、或者誰要負責時,就加上階段那條軸,因為那些問題是由位置而不是由次序回答的。檢驗方法是看看有沒有人說得出這件工作現在在哪一個階段。如果兩個人給出不同答案,那個階段欄就在做真正的事,地圖值得建;如果整條流程是一個團隊裡十個線性步驟,頂上那一行階段就只是裝飾。
匯出檔的哪一個欄應該變成「橫向泳道」?
不重複值又少、有次序、而且描述一筆紀錄走到了工作的哪個位置的那一個——不是它屬於哪一類紀錄,也不是誰碰過它。在一份 ERP 匯出檔裡,單據類型往往是最好的人選,因為每一種單據都是在這條鏈上某一個特定位置產生的:訂單、送貨單、發票、貸項通知單。把狀態的代碼分組之後,它是次好的。要留意那些看似有次序而其實沒有的欄,例如優先次序或者客戶分層;把其中一個放上頂部,會得出一張讀起來像流程地圖、卻甚麼問題都回答不了的圖。
我的匯出檔沒有階段欄。還建得成一張地圖嗎?
建得成,而且這很常見——很多匯出檔帶著日期與金額,卻沒有任何東西描述位置。有兩條路可行。由日期欄推導出階段,因為一份帶著訂單日期、確認日期、揀貨日期與開票日期的匯出檔,是把四個階段寫在欄標題裡而不是寫在值裡。或者按這件工作實際是怎樣運作的,自己為那些階段命名,再人手為每個步驟標上——地圖不必由檔案推導出來,而四至六個誠實的階段名,好過一欄無人同意的代碼。
為甚麼我的泳道名稱變成了 Procédure 或者 Køb?
這個檔案不是 UTF-8,卻被當成 UTF-8 去讀。大部分舊有匯出檔是 Windows-1252 或 Latin-1,它們對純英文與 UTF-8 一致,而一個部門名稱裡一出現重音、變音或者一個丹麥字母就分道揚鑣。如果那套系統給得出選擇,就重新匯出為 UTF-8,否則用文字編輯器打開這個檔案並另存為 UTF-8。相關的徵狀是第一個標題前面有一個位元組順序標記:那個欄於是讀成了你所打的名稱以外的東西,所以第一個欄比對不上任何東西,並作為一個不獲認得的多餘欄被帶進來。
匯出檔裡其他的欄可以留著嗎?
可以。匯入比對的是標題名稱,所以任何它不認得的欄都會被帶過並忽略——你可以把單據編號、數量與日期留在檔案裡而不會弄壞任何東西。如果你想那些細節在圖上看得見,而不只是存在於檔案裡,就把它移進「備註」欄,那裡承載一個步驟的自由文字;或者移進「連結」欄,讓一個步驟指向它所來自的那筆紀錄。其餘一切留作出處,而下一次有人問某個階段名稱由何而來時,它就派上用場。
