如何把 CSV 转成流程地图
如何把一份 CSV 导出文件转成流程地图:找出系统本来就导出的阶段列和负责人列,把它们复制进横向泳道和纵向泳道,让每个步骤各就各位。
流程地图就是多了一根轴的流程图——每个步骤还落在它所属的那一段工作下面——而在 CSV 里,这根轴就是多一列,通常还是导出文件已经用别的名字带着的那一列。
简而言之
- 横向泳道承载阶段,纵向泳道承载负责人——同一份 CSV 里多两列而已。
- 你的导出文件两者都有,名字大概是状态、里程碑、部门或指派给。
- 阶段列的不同取值成为泳道标签,顺序按这些行出现的先后。
- 泳道标签是按文本精确匹配的,所以一个尾随空格或不同的大小写会悄悄多出一条泳道。
- 含分隔符的泳道标签要加引号,否则一个写作 财务, 应付 的值进来会变成两列。
流程地图比流程图多了什么
流程图回答一个问题:接下来发生什么。流程地图回答这个问题,再多回答一个——这个步骤落在工作的哪一段。第二个答案就是阶段,正是它让你能看着一张图说出:二十六个步骤里有六个发生在订单确认之前;或者从下单到收款,这件事换了四次手。在 QueryChart 里,两个答案都是同一张表里的列。横向泳道承载阶段,纵向泳道承载负责人,而流程图不过是把这两个单元格留空的流程地图。
对一份 CSV 来说,这件事比听上去要小,因为导出文件几乎肯定已经带着这两列了。无论产出它的是 ERP、工单系统还是案件管理工具,它都需要对自己的记录做筛选和报表,所以它存着一个粗粒度的工作位置和一个负责方。位置那一列叫状态、订单状态、单据类型、里程碑、阶段或环节。负责方那一列叫负责人、指派给、所有者、部门、成本中心、工作中心、团队或队列。没有人是为了画图才加这两列的。可它们本来就是流程地图的两根轴。
导出文件唯一给不了你的是那些行。一份从系统里出来的 CSV 是一行一条记录——一条订单行、一张工单、一次状态变更——而流程地图是一行一次流转。一千条订单行是两百张订单走过大约二十个步骤,而任何分组方式都不能把第一份清单变成第二份。所以转换要走两遍:先把阶段列的不同取值取出来当泳道标签,然后自己写出那些步骤,并给每一个打上阶段和负责人。先把文件弄成能干净导入的样子,这十分钟值得花——/zh/guides/流程图csv文件结构 讲的正是这一段。
下面这个示例是一份从 ERP 导出文件搭起来的从订单到交付的地图:顶上六个阶段,侧边五条泳道,二十六个步骤,四种不同的结束方式。它一次填一组列,而泳道列刻意放在最后,好让你看清它们究竟添了什么。成品图在 /zh/templates/csv流程地图,你可以打开它,把自己的行覆盖上去。
把导出文件自己的列当成两根泳道轴
从订单到交付,分四遍完成。打开表格面板,看看每一遍填的是哪些列——两个泳道列排在最后。
只有步骤和形状
第 1 到第 6 行全都属于同一个阶段。“客户发来采购订单”、“在 ERP 中录入订单行”、检查“订单行与报价是否一致?”,以及这道检查可能有的两种结束方式——一次确认回复,或者“发货前订单已取消”。导出文件状态列的一个取值下面装着六个步骤,这正是一串状态永远成不了一张地图的原因。
用行号写成的连接
连线到填上了,信用审核这一段接到了前半截上。“订单是否在信用额度以内?”把额度以内的情形送到第 11 行,把超出额度的情形送到第 9 行,后者要么走到“将订单下达给仓库”,要么止于“订单因信用未通过而关闭”。这些数字是行的位置,不是你导出文件用作键的那些单据号。
分支标签与两条循环
连线文字给每个出口命名,两条循环随之显形。“是否先发有货的行?”的连线到是 15,12,连线文字是“分批发货并生成缺货补单,等齐整单再发”,所以第二个出口往回跑到第 12 行“为每条订单行分配库存”。打包检查上的差异分支也以同样方式回到拣货。两条循环正是同一张订单会在同一份导出文件里以两个单据号出现两次的原因。
两个泳道列
最后两列填进去,流程图就成了地图。横向泳道承载订单录入、信用审核、库存分配、拣货与打包、发运与在途以及开票与结案;纵向泳道承载客户、销售、仓库、财务和承运商。横着读一遍成品图,这张订单换了四次手,其中两次发生在阶段边界上而没有任何写明的触发条件——这是任何一列状态代码都不可能告诉你的事。
运作方式
把文件当文本打开,读它的表头行
在做别的事之前,先在文本编辑器里看这份文件的前两行。你要确认分隔符——多数欧洲导出文件是分号而不是逗号,因为列表分隔符跟着区域设置走——还要确认真实的列名。把表头行抄在纸上;你接下来要从这些列里挑出两列,其余的一切都由这个选择决定。
挑出阶段列
阶段列是那种不同取值很少而且有先后的列——状态、订单状态、单据类型、里程碑、阶段、流程环节。数一数:给这一列排序,取出不重复的取值。五六个是一组阶段。三十个是一份状态代码表,你得先把它归并才能当成一根轴,因为三十条泳道不是任何人读得下去的图。
挑出负责人列,并优先用角色而不是人
负责人、指派给、所有者、部门、成本中心、工作中心、团队、队列、销售代表、采购员。这些都可以当纵向泳道。如果这一列装的是人而不是角色,请先把人名映射成角色:二十个人就是二十条泳道,读不下去,而且第一次有人调岗它就错了;而仓库和财务能好用好几年。
写成一行一个步骤,而不是一行一条记录
这一遍没有工具能替你做。你的导出文件是一行一条订单行或一张工单;而地图要的是一行一次流转——工作换手或者作出判断的那些时刻。请从单据类型和状态迁移里把它们推导出来,然后把步骤填进方框文字,把你已经挑好的阶段和负责人写在旁边。二十到三十个步骤是一条完整的流程;再多,你描述的就是两条了。
把两列的名字准确写成横向泳道和纵向泳道
导入匹配的是表头名称而不是列的位置,而它不认识的列会被原样带过并忽略。所以你不必删掉或重排任何东西:把状态和指派给留在原处,另外加两列,表头写横向泳道和纵向泳道,把归并好的取值复制过去。原来的列会毫发无损地跟着走,你也就留下了每条泳道来自哪里的记录。
把文件拖到表格区域上,读泳道暴露出来的东西
把 .csv 拖到编辑器的表格区域上,或者把文本直接粘贴进去,地图就自己画出来了——没有向导,也没有列映射器要处理。然后横着读那些阶段。只装着一个步骤的阶段不是阶段;没有人负责的阶段是一个队列;而两条泳道之间前面没有判断的交接,才是你这条流程里真正积压时间的地方。
应避免的错误
含分隔符却没加引号的单元格
作为泳道标签的 财务, 应付、连线到里的 4,5 和连线文字里的 是,否,各自都是一个恰好含有逗号的字段,所以每一个都必须用双引号包起来。不加引号,它们会被劈成两个字段,把它们之后的每一列都往后挪一位——这也正是症状永远不出现在你弄坏的那个单元格上的原因,它表现为泳道列里装满了连线标签。
编号之后又给文件排了序
连线到装的是行的位置,所以目标写好之后再按状态或日期给 CSV 排序,会把每一行重新编号,并悄无声息地把这张图重新接线。请先定行序,再编号,之后任何重排都在编辑器里做,那里连接会跟着行一起动。
其实是状态的“阶段”
待处理、处理中、挂起、已关闭,是一条记录停留其中的状态,不是工作的分段。阶段是一个内部装着步骤的区间——订单录入、信用审核、库存分配。如果你的阶段列读起来像一台状态机,请先把它的取值归并成四到六个区间,再让它们成为泳道标签。
指望导出文件里包含那些例外
导出文件记录的是它里面那些记录发生过什么,所以上个季度没有人走过的分支,在文件里干脆就是缺席的。信用未通过和交付索赔,恰恰是一张数据驱动的地图会漏掉的路径,也恰恰是值得画出来的那些,因为流程真正出问题的地方就在那里。
用你的导出文件搭一张流程地图
打开从订单到交付这个示例,看看两个泳道列是怎么填的,然后把那些行换成你自己的步骤。
相关指南
常见问题
我需要一张流程地图,还是一张流程图就够了?
如果争论的是接下来发生什么,流程图就够了,而且 /zh/guides/从csv创建流程图 是更省事的活儿。当争论的是时间去了哪里、或者谁该负责时,才加上阶段这根轴,因为这些问题是靠位置而不是靠顺序回答的。检验方法是:有没有人说得出这件工作此刻处在哪个阶段。如果两个人给出不同答案,阶段列就在真正干活,这张地图值得做;如果这条流程是一个团队里的十个线性步骤,那顶上那排阶段就是装饰。
导出文件的哪一列该成为横向泳道?
取值少、有先后、并且描述一条记录走到了工作的哪一处的那一列——不是它是哪一类记录,也不是谁碰过它。在 ERP 导出文件里,单据类型往往是最佳人选,因为每一种单据都是在链条上的一个特定位置被创建出来的:订单、发货单、发票、贷项通知单。其次是状态,前提是你已经把它的代码归并过。要当心那些看着有先后其实没有的列,比如优先级或客户分层;把这样一列放到顶上,得到的是一张读起来像流程地图、却什么问题都回答不了的图。
我的导出文件没有阶段列,还能做地图吗?
能,而且这很常见——很多导出文件只带着日期和金额,没有任何描述位置的东西。有两条路可走。从日期列推导阶段,因为一份带着下单日期、确认日期、拣货日期和开票日期的导出文件,是把四个阶段写在了列名里而不是写在取值里。或者按这条流程实际是怎么跑的,自己给阶段命名,再手工给每个步骤打标签;地图不一定非要从文件里推导出来,而四到六个诚实的阶段名,胜过一列谁也不认可的代码。
为什么我的泳道名变成了 Procédure 或者 Køb?
这份文件不是 UTF-8,却被当成 UTF-8 读了。多数老系统的导出文件是 Windows-1252 或 Latin-1,它们在纯英文范围内与 UTF-8 一致,一旦部门名里出现重音符号、变音符号或丹麦语字母就分道扬镳。如果系统给了选择,请重新导出为 UTF-8;否则在文本编辑器里打开这份文件另存为 UTF-8。相关的症状是第一个表头前面有一个字节顺序标记:那一列读出来的名字就不是你敲的那个,于是这第一列匹配不上任何东西,被当作不认识的多余列带了进来。
导出文件里其他的列能留着吗?
能。导入匹配的是表头名称,所以它不认识的列都会被原样带过并忽略——你可以把单据号、数量和日期留在文件里,什么都不会坏。如果你希望其中一些细节在图上看得见,而不只是躺在文件里,可以把它移进备注列,那里放的是挂在一个步骤上的自由文本;或者移进链接列,让一个步骤指向它所来自的那条记录。其余的都作为出处留着,下次有人问某个阶段名从哪来的时候会很有用。
