如何由 CSV 製作流程圖

如何由一個 CSV 檔製作流程圖:編輯器讀的標題列名稱、「連線至」該填甚麼,以及填欄的次序——先「方框文字」,再「形狀」,然後箭嘴,最後泳道。

當一個 CSV 的列是步驟而不是紀錄,它就會變成流程圖:一個步驟一列,一個「形狀」欄、一個「方框文字」欄,以及一個「連線至」欄,裡面放著這一步所通往那一列的位置。

簡而言之

  • 一個步驟一列。一列在檔案裡的位置就是它的身分。
  • 標題名稱就是那份對應——「形狀」、「方框文字」、「連線至」、「連線文字」——而欄的次序無關緊要。
  • 單有「方框文字」畫出來的是互不相連的方框。畫出箭嘴的那個欄是「連線至」。
  • 「連線文字」按位置與「連線至」配對:「6,4」旁邊寫「是,否」,「是」就標在指向第 6 列的箭嘴上。
  • 「橫向泳道」與「縱向泳道」是最後填的兩個欄,它們把流程圖變成泳道圖。

每個欄該填甚麼,以及按甚麼次序填

CSV 是一份匯出。它是由別的東西產生出來的——一個服務台、一套 ERP、一個表單工具、一份隊列報表——而吐出來的是純文字:一列標題,然後一筆紀錄一行,欄位之間以逗號分隔,任何含有逗號或換行的欄位以雙引號包起。裡面沒有公式、沒有第二個工作表、沒有顏色、沒有註解,因為這個格式根本沒有地方放。正是這份簡陋,令一個 CSV 可以在兩套其他事情上毫無共識的系統之間往來;也正是這份簡陋,令這個檔案本身不帶任何意義。一個欄是用來做甚麼的,只活在它的標題名稱裡。

QueryChart 的編輯器是一張欄名固定的試算表:#、「形狀」、「方框文字」、「連線至」、「連線文字」、「連線樣式」、「橫向泳道」、「縱向泳道」、「備註」與「連結」。一個 CSV 是按標題名稱而不是按欄的位置去比對的,所以你的欄剛好排成甚麼次序都無關緊要,而編輯器不認得的欄會原封帶過並被忽略。匯入的方式是把 .csv 拖到試算表區域,或者把 CSV 文字貼進去。沒有精靈,也沒有甚麼要人手對應——標題列就是那份對應,所以標題列才是值得寫對的那一部分。

剩下的才是真正的問題:到底該填甚麼。按這個次序填欄,你可以親眼看住每一個欄各自做甚麼。單有「方框文字」,你得到的是一直行互不相連的方框,而一個由紀錄組成的 CSV 畫出來也正是這樣。「形狀」把那些問題變成菱形,並把第一列與最後一列變成起訖節點。圖是在「連線至」出現的:它放著這一列所通往那一列的位置,第一列資料算作 1,一列通向多過一處時以逗號分隔,而「連線文字」按同一次序承載分支標籤。「橫向泳道」與「縱向泳道」最後才填,它們把那條鏈變成一個網格。

下面的示例是一個客服工單分流——十八列——正是按這個次序建成的。打開試算表面板,讀一讀每個階段填的是哪一個欄。在匯入你自己的檔案之前,先用純文字編輯器而不是試算表打開它一次:分號分隔符、標題列上方兩行前言,或者一個把帶重音的姓名變成替代字元的編碼,任何一項都足以令匯入失敗,而試算表會把這三項全部藏起,因為它渲染這個檔案,而不是把檔案本身給你看。/yue/guides/流程圖csv檔案結構 完整處理了這一面。

同一個 CSV,一個欄一個欄地填

客服工單分流,十八列。每個階段在同一個檔案上多加一個欄——打開試算表面板就看得到是哪一個。

  1. 只有「方框文字」

    六個標籤,此外甚麼都沒有:「提交一張工單」、「把工單登記入服務台隊列」、「資料是否足夠處理這張工單?」,一直落到「按影響與緊急程度訂定優先次序」。它們一個疊一個地排成方框,中間空無一物,而一份服務台匯出檔畫出來也正是這樣,因為一個由紀錄組成的檔案沒有地方可以放一段關係。這裡沒有任何東西說明那道完整性檢查有兩個結果。

  2. 加上「形狀」欄

    第 1 列變成 Start,而四道問題——「資料是否足夠處理這張工單?」、「催辦期限屆滿前是否收到回覆?」、「一線能否自行解決?」與「解決方法是否有效?」——變成菱形。其餘一律留在 Process,那正是你把儲存格留空所得到的值。一個不獲認得的值會悄悄退回 Process,所以一列寫成 Diamond 或 Choice 的,會畫成一個矩形,而它的問題仍然坐在裡面,分支標籤也照樣掛著。

  3. 填「連線至」,然後「連線文字」

    現在到箭嘴。「資料是否足夠處理這張工單?」的「連線至」是 6,4,「連線文字」是 是,否,所以「是」跳到訂定優先次序那一步,「否」走去「向申請人索取欠缺的資料」。「一線能否自行解決?」是 8,11,標籤為「是」與「否——升級」。這些數字是列的位置,不是工單編號:把列重新編號,你就把整張圖重新接過線。

  4. 加上兩個泳道欄

    最後四列連同它們一起到齊:「告知申請人改動了甚麼」、那道確認判斷,以及兩個結局——「工單已結案」與「申請人沒有回覆而結案」。「橫向泳道」承載階段,由提交經分流、一線、升級到結案;「縱向泳道」承載角色:申請人、服務台、專責團隊。兩者在 CSV 裡都是普通文字,而一條泳道會在有一列指名它的那一刻出現,所以某一列打錯字,就會多出一條只有一個方框的泳道。

運作方式

  1. 另開一個新檔,不要改那份匯出

    你手上那個 CSV 是一張工單、一條訂單明細或者一筆紀錄一列。你即將要寫的檔案是一個步驟一列,而一條產生了一萬筆紀錄的流程,步驟通常不足二十個。把匯出檔放在旁邊開著,因為它的隊列名稱、狀態代碼與指派群組,才是這條流程真正的詞彙,但把圖寫進一個全新的檔案。

  2. 把標題列放在第一行

    把編輯器所用的名稱一字不差地打上去:「形狀」、「方框文字」、「連線至」、「連線文字」,之後還有「橫向泳道」與「縱向泳道」。那一行之上不可以有任何東西——沒有標題、沒有匯出時間戳記、沒有空行——因為比對是在檔案的第一行做的。你自己留著參考的欄,例如原本的紀錄編號,可以留在原處,會被原封帶過。

  3. 寫「方框文字」,一列一個動作

    一列就是一個人做的一件事。凡是文字裡含有「並」或「同時」的列都要拆開,凡是指一個階段而不是一個動作的列都要刪掉——「分流」是一個標題,「按影響與緊急程度訂定優先次序」才是一個步驟。想看效果的話這時就可以匯入一次:你會得到一直行沒有箭嘴的方框,而那正是一個有標籤、沒有關係的檔案最誠實的樣子。

  4. 填「形狀」

    第一列填 Start,凡是提出問題的列填 Decision,每一個結局填 Success、Reject 或 End。Process 是預設值,所以那些儲存格可以留空。要用編輯器所用的寫法——一個它不認得的值會毫無怨言地變成 Process,而一個畫成矩形的判斷仍然保留著它的分支標籤,這正是令這個錯誤容易被漏掉的原因。

  5. 填「連線至」,然後「連線文字」

    「連線至」放的是目標列的位置,第一列資料算作 1,一列通向多過一處時以逗號分隔。「連線文字」按同一次序放分支標籤,所以第一個標籤屬於第一個數字。在編任何號碼之前先把所有列寫完:「連線至」是按位置計的,所以之後在中間插入一個步驟,會令它下面每一列往下移,並令插入點之後每一個引用失效。如果之後非加一個步驟不可,就把它附在最底,再由它應該所在的位置指過去。

  6. 加上泳道,以 UTF-8 儲存,再把檔案拖進去

    把階段放進「橫向泳道」,把角色放進「縱向泳道」,然後以 UTF-8 加逗號分隔儲存這個檔案,並用文字編輯器打開確認得到的正是這樣。把 .csv 拖到編輯器的試算表區域,或者把文字貼進去。圖會隨著檔案落地即時渲染,連線自行選路,所以沒有排版環節——之後要檢查的,是有沒有哪一個方框沒有箭嘴離開。

應避免的錯誤

  • 匯入那份匯出檔,而不是另寫一個新檔

    一個一筆紀錄一列的檔案,沒有任何一個欄可以放一條邊,所以它匯入之後是一片互不相連的方框——一筆紀錄一個,而對一份真實的匯出檔而言,那是幾百個。匯出檔是詞彙的來源,不是結構的來源。

  • 「連線至」放的是編號而不是列的位置

    工單編號、步驟代碼與其他步驟的標籤,全部都會被悄悄丟棄:沒有錯誤、沒有警告,只剩一個沒有箭嘴離開的方框。它是目標列在檔案裡的位置,第一列資料算作 1。/yue/guides/在csv裡定義連接 詳細講解了這套定址方式。

  • 標籤裡有一個沒有引號保護的逗號

    「連線文字」是按逗號拆開的,而那一次拆開發生在 CSV 的引號已經被脫去之後——所以把欄位包起來救不了你。一個寫成「否, 升級」的標籤會變成兩個標籤,與「連線至」的配對整體移位一格,而損害浮現出來的樣子是一條指向意料之外位置的連線,不是一句寫錯了的說明。改寫成「否——升級」。這是唯一一個逗號無法轉義的地方,所以值得在匯出之前就知道。

  • 號碼寫好之後才插入一列

    插入點以下每一個引用現在都指高了一列,而圖照樣渲染,只是渲染錯了。先把步驟清單寫完,然後才編號,號碼一旦存在就用附加而不是插入。

由你的 CSV 製作流程圖

把分流示例作為你自己的圖表打開,看看每一個欄是怎樣填的,然後把你自己的 .csv 拖到試算表區域上。

由你的 CSV 製作流程圖

相關指南

常見問題

最小的一個 CSV 要有甚麼才畫得出流程圖?

兩個欄。一行標題寫著 方框文字,連線至,然後一個步驟一行,放上標籤與它所通往那一列的位置:一條四步的流程就是標題下面四行,第二個欄依次寫 2、3、4 與一個空格。這樣畫出來是一串矩形,中間有箭嘴。第三個值得加的欄是「形狀」,因為沒有它,每一個方框都是矩形,一道問題與一句指示畫出來一模一樣;第四個是「連線文字」,因為一個出口沒有標籤的判斷,只告訴讀者這裡有一次判斷,卻沒有告訴他之後該往哪一邊走。

「連線至」放的是列號還是編號?

是目標列在檔案裡的位置,第一列資料算作 1——正是編輯器在它的 # 欄裡印出來的那個數字。它不是這個 CSV 所來自那套系統的紀錄編號,也不是你自己發明的步驟代碼,即使你把那個欄留在了檔案裡。任何解析不到一個現存列位置的東西都會被丟棄,而且完全沒有錯誤,所以一個因為把標題列算作第 1 列而整體差了一的檔案,會渲染成一堆沒有箭嘴的方框,而任何地方都不會說明原因。

一個有兩條分支的判斷該怎樣寫?

把「形狀」設為 Decision,把兩個目標位置以逗號分隔放進「連線至」,再把兩個標籤按同一次序放進「連線文字」。「6,4」旁邊寫「是,否」,就會把「是」送去第 6 列、「否」送去第 4 列;把其中一個清單倒轉而另一個不倒轉,得出的圖會以最令人信服的方式出錯,因為它看上去仍然完整。如果標籤本身含有逗號,就把那個欄位用雙引號包起。一條完全由這個模式建成的分支流程在 /yue/templates/csv決策樹。

「形狀」欄可以填甚麼值?

Start、Process、Decision、End、Success 與 Reject 幾乎涵蓋了每一張流程圖,另外還有一些用於特定情況的——File、Input、Output 與 Preparation 在其中。空的儲存格得到的是 Process,而一個編輯器不認得的值得到的也是 Process,這正是要留意的地方:沒有匯入錯誤,所以一個用另一套工具的詞彙寫成的形狀欄會乾乾淨淨地匯入,並把每一個判斷畫成矩形。第一次匯入之後去檢查那些菱形,不要假設。

圖做好之後那個 CSV 還要留著嗎?

留著作為你匯入了甚麼的紀錄,而不是作為你動手編輯的東西。匯入之後圖表就是母版:在編輯器裡編輯那些列就是在編輯這張圖,因為它們是同一件東西,而在旁邊並行維護那個檔案,只會原封不動地重建這次轉換本來要消除的那種偏差。CSV 真正繼續有價值的地方,是下一張圖的起點——一張圖類型一個檔案,複製其中一個,比憑記憶重打一行標題快得多。

本指南所用的範本

CSV 轉流程圖範本(客服工單分流) — 把服務台匯出的 CSV 變成流程圖。客服工單由提交走到結案,全圖只靠「形狀」、「方框文字」與「連線至」三個欄畫成,並帶催辦期限、升級關卡與封了頂的重開路徑。

Browse all Excel 、 CSV 、 Visio 同埋數據驅動圖表指南