CSV 决策树模板(退款资格判定)
一棵用 CSV 导出文件搭起来的退款资格决策树:25 行、12 个带标签的判断,其中四个是三岔的,还有五个各自独立的终点。它演示的是连线到与连线文字如何按位置一一配对。
生成此图的 CSV 文件
每行一个步骤。「连线至」列中的数字是行号——正是它画出了连线,也正是大多数文件缺少的那一列。
| # | 形状 | 方框文字 | 连线到 | 连线文字 | 横向泳道 | 纵向泳道 |
|---|---|---|---|---|---|---|
| 1 | Start | 客户提出退款申请 | 2 | 申请 | 客户 | |
| 2 | Input | 记录订单号、购买日期与退款原因 | 3 | 申请 | 坐席 | |
| 3 | Decision | 系统中能否查到该订单? | 5, 4 | 能, 不能 | 申请 | 坐席 |
| 4 | Decision | 是否提供了购买凭证? | 5, 22 | 已提供, 两次提醒后无回复 | 申请 | 客户 |
| 5 | Decision | 订单距今多久? | 7, 6, 21 | 30天以内, 31至90天, 超过90天 | 资格 | 坐席 |
| 6 | Decision | 主管是否批准这笔超期申请? | 7, 21 | 批准, 不批准 | 资格 | 主管 |
| 7 | Decision | 商品是实物还是数字商品? | 8, 11 | 实物, 数字商品 | 资格 | 坐席 |
| 8 | Process | 登记退货并验收商品 | 9 | 品况 | 坐席 | |
| 9 | Decision | 商品处于什么状态? | 12, 13, 10 | 未拆封, 已拆封但可二次销售, 有质量问题 | 品况 | 坐席 |
| 10 | Decision | 该质量问题是否在保修范围内? | 14, 21 | 在保修范围内, 客户使用不当 | 品况 | 主管 |
| 11 | Decision | 数字商品是否已被下载? | 12, 13, 15 | 从未使用, 部分使用, 已全部消耗 | 品况 | 坐席 |
| 12 | Process | 计算全额退款金额 | 16 | 裁定 | 坐席 | |
| 13 | Process | 计算部分退款金额 | 16 | 裁定 | 坐席 | |
| 14 | Decision | 换货还是退款? | 19, 12 | 换货, 退款 | 裁定 | 客户 |
| 15 | Decision | 善意补偿是否在坐席权限之内? | 18, 17 | 在权限之内, 超出权限 | 裁定 | 坐席 |
| 16 | Decision | 金额是否超出坐席审批权限? | 20, 17 | 等于或低于权限, 超出权限 | 审批 | 坐席 |
| 17 | Decision | 主管是否批准这笔付款? | 20, 18, 21 | 全额批准, 改为账户储值批准, 不批准 | 审批 | 主管 |
| 18 | Process | 向账户发放储值 | 24 | 结付 | 财务 | |
| 19 | Process | 寄出换货商品并关闭退货 | 25 | 结付 | 坐席 | |
| 20 | Process | 按原支付方式退款 | 23 | 结付 | 财务 | |
| 21 | Reject | 退款被拒绝并已记录理由 | 结付 | 坐席 | ||
| 22 | End | 客户无回复即关闭申请 | 结付 | 坐席 | ||
| 23 | Success | 已按原支付方式完成退款 | 结付 | 财务 | ||
| 24 | Success | 已发放账户储值 | 结付 | 财务 | ||
| 25 | Success | 换货商品已寄出 | 结付 | 坐席 |
#,形状,方框文字,连线到,连线文字,横向泳道,纵向泳道
1,Start,客户提出退款申请,2,,申请,客户
2,Input,记录订单号、购买日期与退款原因,3,,申请,坐席
3,Decision,系统中能否查到该订单?,"5, 4","能, 不能",申请,坐席
4,Decision,是否提供了购买凭证?,"5, 22","已提供, 两次提醒后无回复",申请,客户
5,Decision,订单距今多久?,"7, 6, 21","30天以内, 31至90天, 超过90天",资格,坐席
6,Decision,主管是否批准这笔超期申请?,"7, 21","批准, 不批准",资格,主管
7,Decision,商品是实物还是数字商品?,"8, 11","实物, 数字商品",资格,坐席
8,Process,登记退货并验收商品,9,,品况,坐席
9,Decision,商品处于什么状态?,"12, 13, 10","未拆封, 已拆封但可二次销售, 有质量问题",品况,坐席
10,Decision,该质量问题是否在保修范围内?,"14, 21","在保修范围内, 客户使用不当",品况,主管
11,Decision,数字商品是否已被下载?,"12, 13, 15","从未使用, 部分使用, 已全部消耗",品况,坐席
12,Process,计算全额退款金额,16,,裁定,坐席
13,Process,计算部分退款金额,16,,裁定,坐席
14,Decision,换货还是退款?,"19, 12","换货, 退款",裁定,客户
15,Decision,善意补偿是否在坐席权限之内?,"18, 17","在权限之内, 超出权限",裁定,坐席
16,Decision,金额是否超出坐席审批权限?,"20, 17","等于或低于权限, 超出权限",审批,坐席
17,Decision,主管是否批准这笔付款?,"20, 18, 21","全额批准, 改为账户储值批准, 不批准",审批,主管
18,Process,向账户发放储值,24,,结付,财务
19,Process,寄出换货商品并关闭退货,25,,结付,坐席
20,Process,按原支付方式退款,23,,结付,财务
21,Reject,退款被拒绝并已记录理由,,,结付,坐席
22,End,客户无回复即关闭申请,,,结付,坐席
23,Success,已按原支付方式完成退款,,,结付,财务
24,Success,已发放账户储值,,,结付,财务
25,Success,换货商品已寄出,,,结付,坐席运作方式
导出申请,然后留下四列
拿你已经有的那份导出文件,把它的表头改名为形状、方框文字、连线到和连线文字。如果你希望深度和角色画成泳道,就再加上横向泳道和纵向泳道;只有在想给某条分支上色时才加连线样式。导出文件里其余的一切都可以留在原处:导入按表头名称匹配,所以列的顺序无关紧要,认不出来的列会被带过并忽略,而不是被拒绝。
让表头行成为文件的第一行
报表工具常常在表头上面写一行标题、一个日期戳或一个空行。CSV 里没有标题这个概念,所以无论第一行写的是什么,它都会被当成表头行读;一份第一行是“报表生成于 12/03”的文件,导入后会得到一列名叫“报表生成于 12/03”的列。请用文本编辑器打开文件,把表头上面的一切删掉,连同底部多余的空行——它们会变成空白的行。
先给行编号,再写连线到
连线到填的是位置,不是名称也不是 id:7 表示表头下面从 1 数起的第七条数据行。先把整棵树按你想要的顺序写完,再填编号。如果之后你又排序或调整了文件,那一列里的每个数字仍然指着一个位置,而现在指的是错的行,而文件看上去哪里都没有毛病。把一份写着步骤的 CSV 拿去排序,是悄无声息地给一棵树重新接线的最快方式。
让连线到与连线文字一一对应
这两个单元格被当成两个列表按位置配对,所以它们的条目数必须一样:7,6,21 对上 30天以内,31至90天,超过90天。这里有两层逗号,而只有外面那一层可以转义。含有逗号的字段在文件里会被加引号,所以方框文字写“记录订单号、购买日期与退款原因”没问题;分支标签里的逗号却救不回来,因为标签列表是在去掉引号之后才按逗号切分的。请写“已拆封但可二次销售”,永远不要写成用逗号隔开的两段。
把你们自己的数字填进三个门槛
有三行带着这份模板只能猜的数值。申请上的年龄档位是 30 天和 90 天;请换成你们公布的窗口,以及主管仍可批准的那个区间。坐席审批权限是一个金额,而不是一次判断,它应当设在大额退款的尾部会被升级、但主管泳道不至于变成队列的位置。至于数字商品的部分使用,需要一个定义——下载一次、看完一节课,还是密钥已被显示。
导入前先检查分隔符和编码
用纯文本编辑器看一眼第一行。表头之间是分号,说明这份文件是由一个使用欧洲列表分隔符的程序保存的,按逗号分隔来读它会塌成一列。同时也另存为 UTF-8:用旧代码页写出来的导出文件,会把 £、é 和 — 变成替换字符,而这些字符随后就坐在你的方框标签里;此外 UTF-8 的字节顺序标记会粘在第一个表头上,让形状这一列不再能与形状列匹配上。
常见问题
在 CSV 里怎么写一个三岔分支?
和写两岔的方法一样,只是在那两个单元格里各多一个条目。在这张图的第 5 行,连线到写着 7,6,21,连线文字写着 30天以内,31至90天,超过90天。第一个数字与第一个标签配对,第二个与第二个,第三个与第三个。这个格式本身没有隐含任何上限,也没有假定只有是和否,而这对一份真实的政策很要紧:年龄区间、商品品况和主管可选的处理方式,很少是二元的,硬把它们塞进嵌套的是否菱形,只会让行数翻倍而一条规则也没多出来。这张图十二个判断里有四个带三条出口。
如果连线到和连线文字的条目数不一样会怎样?
配对是按位置的,所以少一个标签不会在原处留一个空档——它会把后面每一个标签都往前拽一位,贴到错误的箭头上。在一个三分支的行上漏掉一个“是”,第二条分支贴的就是本该属于第一条的标签。这件事值得手工核对的原因在于:这两个单元格各自都不算格式错误,都是普通的逗号分隔文本,能通过任何 CSV 解析器,而文件不会给你任何信号。导入之前,把每一个判断行两个单元格里的逗号数一数,并且把箭头没有全部贴上标签的判断当成缺陷,而不是当成一种风格选择。
为什么我的 CSV 导入后变成了一列?
几乎总是分隔符。把表格另存为 CSV 时用的是这台机器区域设置里的列表分隔符,所以在欧洲区域设置的机器上产出的文件是分号分隔的,而扩展名仍然叫 .csv。按逗号分隔来读,每一行就是一个字段,于是你得到一列极宽的列。请用纯文本编辑器打开文件看表头行:如果分隔的是分号或制表符,就重新以逗号导出,或者把它们替换掉。同时顺手检查编码,因为在文本编辑器里显示成两个乱码符号的带重音字符,会原封不动地存进你的方框标签里。
我的服务台导出文件多出来的那些列,需要删掉吗?
不需要。导入按表头名称而不是按列的位置匹配,所以工单号、处理人、创建时间、渠道以及导出文件里的其他一切,都会被带过并忽略。这带来两个实际好处:导入前你不必调整任何列的顺序;而且你可以把参考数据留在流程旁边,让每一行都还能追溯到它来自哪张工单。唯一要检查的是别不小心留下两个同名的表头,而当导出文件把某一列命名为备注、表格里本来又有一列备注时,这很容易发生。
用 CSV 做决策树和在 Excel 里做同一件事有什么不同?
CSV 没有公式、没有工作表、没有单元格类型,也没有格式,所以文件里没有任何东西能算出一条分支,或者把一条规则藏进条件格式里。这棵树所做的一切,都必须原原本本写在连线到和连线文字里——在你编辑时这是限制,在别人要读它、或者要在版本控制里比对它时这是好处。另外也值得记住 CSV 是用来干什么的:它是系统交给你的出口格式。没有人会在里面维护一份政策。导出、导入一次,从此以后同时编辑图表和表格,而不是反复往返那个文本文件。