如何在 CSV 裡定義流程圖的連接
如何寫一個 CSV 檔的「連線至」與「連線文字」欄:用列的位置而不是步驟名稱、分支標籤按位置配對、一個逗號如何把標籤拆成兩個,以及插入一列會有甚麼後果。
運作方式
在寫下任何位置之前先把列的次序定好
「連線至」引用的是檔案裡的位置,所以檔案的次序是承重的。把匯出檔排序一次,正正按你想要的樣子,然後就不要再排序。如果那些列來自一套每次抽取都會重新排序的系統,就先把它們凍結成一份工作副本——否則你今日寫下的號碼,明日定址的是另一批步驟。
由標題下面開始,把資料列由 1 編起
標題列不是一列資料,不計在內。檔案裡第一個步驟是位置 1,下一個是 2,一路往下。工作時把那些號碼放在一個草稿欄裡;匯入器不需要它,但你需要,因為你即將要人手打二十個引用。
先寫只有一個後繼的步驟
由上而下走一次這個檔案,給每一個直通的步驟在「連線至」填一個號碼。這很快,也很難寫錯,而剩下要動腦筋的就只有那些岔口。凡是真正令流程結束的步驟就把儲存格留空——一個空的「連線至」正是令一列成為終止列的東西。
把岔口寫成以逗號分隔的位置
在每一個判斷上,把所有目的地放進同一個儲存格:7,6,21 代表三個出口。逗號兩邊的空白會被修掉,所以「7, 6, 21」也可以。要緊的是次序,因為你即將要寫第二個清單,而它必須逐項與這個對齊。
按同一次序寫「連線文字」
「連線至」是 7,6,21 的話,「連線文字」就寫 30 日以內,31 至 90 日,超過 90 日。往下走之前先把它們當成一對一對來讀:第一個位置配第一個標籤,第二個配第二個。沒有任何東西會替你檢查這件事,而一對交叉了的配對,會產生一張自信滿滿、看似合理而完全錯誤的圖。
把檔案拖進去,再把箭嘴讀一次
把 .csv 拖到一張新圖表的試算表區域,或者把文字貼進去——沒有匯入精靈,也沒有欄位對應環節,因為標題名稱是直接比對的。然後在畫布上對著政策追兩三條分支。超出範圍的位置與沒有標籤的出口,在這個規模下會立刻現形。
常見問題
為甚麼用列的位置,而不是用一個 ID 欄?
因為一個由別的系統吐出來的 CSV,很少有一個你可以用的穩定鍵,而它確實有的那些,通常是紀錄的識別碼而不是步驟的識別碼。列的位置永遠都在、永遠唯一,而且不需要與匯出檔的產生者達成任何協議。代價是這個位置只在次序維持不變時才有意義,這也正是為甚麼列的次序在一張 CSV 流程圖裡,比在任何其他格式裡都要緊。
編位置的時候要不要把標題列計進去?
不要。位置 1 是第一列資料,緊接在標題下面。當人在試算表上讀位置時,這一點最容易絆倒他們,因為在那裡標題是第 1 列而第一個步驟是第 2 列——與檔案相比整體差了一。如果所有箭嘴都早落了一步,通常就是這個原因。
一個步驟可以指向多過兩列嗎?
可以,而決策樹經常這樣做。在示例裡,「商品的狀況如何?」有三個出口,而「主管是否批准這筆付款?」也有三個,其中一個是拒絕。把所有位置以逗號分隔放進同一個儲存格,再在「連線文字」放同樣數目的標籤。實務上沒有甚麼有意義的上限;可讀性遠在格式之前就先撐不住了。
如果「連線至」指名一列並不存在的列會怎樣?
那段連接會被丟棄,而且不會有任何提示。一個超出檔案末端的位置、一個本應有數字卻留了空白的地方,或者一個由列數更多那個版本的匯出檔遺留下來的號碼,全部產生同一個結果:一條根本不存在的箭嘴。任何一次改動了檔案長度的編輯之後,都應該檢查的正是這種失敗模式。
可以在「連線至」裡用步驟的名稱代替號碼嗎?
不可以——這個欄是當成位置去讀的。在大部分真實檔案裡,名稱本身也是有歧義的:這棵樹有兩列都以「批准」結尾,還有幾列讀起來是同一道問題的不同說法。一個數字按構造就沒有歧義,而這正是身分是位置性而不是文字性的原因。