CSV 父子层级模板(产品目录拆解)

PIM 或 BOM 导出文件写的是每一行的父级,所以它的箭头朝上;而连线到列写的是子级,所以箭头朝下。这份模板把这次反转画了出来:五级深度、五个判断、七个叶子节点。

使用此模板

生成此图的 CSV 文件

每行一个步骤。「连线至」列中的数字是行号——正是它画出了连线,也正是大多数文件缺少的那一列。

#形状方框文字连线到连线文字横向泳道纵向泳道
1Start户外生活用品目录2, 3根节点(父级为空)类目记录
2Process座椅4深度 1类目记录
3Process遮阳与遮蔽7深度 1类目记录
4Decision该类目下面是否还有子类目?5, 6子类目, 可售产品深度 1类目记录
5Process长椅10深度 2类目记录
6Process长椅坐垫套装8深度 2产品记录
7Process3 米悬臂遮阳伞9深度 2产品记录
8Decision该产品是否有变体?11, 12有,每个变体一行, 没有,产品行本身就是 SKU深度 2产品记录
9Decision该备件是否单独销售?13, 14单独销售, 仅用于维修深度 2产品记录
10Process三人花园长椅15深度 3产品记录
11Success坐垫套装(本色)深度 3变体记录
12Success长椅坐垫套装(单一 SKU)深度 3产品记录
13Success3 米替换伞布深度 3变体记录
14End遮阳伞伞骨组件深度 3组件记录
15Decision是常备库存还是按单生产?17, 16常备库存, 按单生产深度 3产品记录
16Decision是外购还是自制?18, 19外购, 自制深度 3组件记录
17Success三人花园长椅(橡木)深度 4变体记录
18End硬木板条组件深度 4组件记录
19End铸铁长椅框架深度 4组件记录
#,形状,方框文字,连线到,连线文字,横向泳道,纵向泳道
1,Start,户外生活用品目录,"2, 3",,根节点(父级为空),类目记录
2,Process,座椅,4,,深度 1,类目记录
3,Process,遮阳与遮蔽,7,,深度 1,类目记录
4,Decision,该类目下面是否还有子类目?,"5, 6","子类目, 可售产品",深度 1,类目记录
5,Process,长椅,10,,深度 2,类目记录
6,Process,长椅坐垫套装,8,,深度 2,产品记录
7,Process,3 米悬臂遮阳伞,9,,深度 2,产品记录
8,Decision,该产品是否有变体?,"11, 12","有,每个变体一行, 没有,产品行本身就是 SKU",深度 2,产品记录
9,Decision,该备件是否单独销售?,"13, 14","单独销售, 仅用于维修",深度 2,产品记录
10,Process,三人花园长椅,15,,深度 3,产品记录
11,Success,坐垫套装(本色),,,深度 3,变体记录
12,Success,长椅坐垫套装(单一 SKU),,,深度 3,产品记录
13,Success,3 米替换伞布,,,深度 3,变体记录
14,End,遮阳伞伞骨组件,,,深度 3,组件记录
15,Decision,是常备库存还是按单生产?,"17, 16","常备库存, 按单生产",深度 3,产品记录
16,Decision,是外购还是自制?,"18, 19","外购, 自制",深度 3,组件记录
17,Success,三人花园长椅(橡木),,,深度 4,变体记录
18,End,硬木板条组件,,,深度 4,组件记录
19,End,铸铁长椅框架,,,深度 4,组件记录

运作方式

  1. 找出承载层级的那两列

    就这件事而言,导出文件里其余的一切都是陪衬。你需要的是装着每一行自身标识符的那一列,和写出它父级的那一列。它们很少叫 id 和 parent_id:去找 parent_sku、belongs_to、category_path 或 assembly。如果父级是一条路径而不是一个编码,比如“首页 > 座椅 > 长椅”,那么最后一段是父级,前面的部分是深度。如果导出文件根本没有父级列、却有一列层级编号,请看下面关于缩进式物料清单的那条说明。

  2. 把父级列反转成连线到

    整件事就这一步。把导出文件按父级列排序或分组,让每个父级的子级挨在一起,再把这些子级的行号写进父级的连线到单元格里,用逗号分隔。方向在这里掉头了:导出文件说的是子级写出父级,表格说的是父级写出子级。有一个后果值得说出来——父级列是一行一个值,而连线到有多少个值取决于这一行有多少子级,所以信息从很多行搬到了更少的行上。

  3. 最后再给行编号,而且只在顺序定稿之后

    连线到装的是这一行在表格里的位置,不是它的标识符,所以 SKU-1042 必须变成带着它的那一行的编号。之后插入一行,插入点以下的每一个数字就都差了一位。请先把行排成最终的顺序,再一遍把 id 解析成编号。指向不存在的行的连线到值,会在画图时被静默丢弃,看上去就像一个方框忘了连向任何地方。

  4. 给连线到单元格加引号,并确认分隔符

    连线到和连线文字装的是逗号分隔的列表,所以在逗号分隔的文件里,这些单元格必须用双引号包住——“4,5”和“是,否”——否则这一行会多出一个字段,它后面的每一列都向左错开一位。欧洲的导出文件常常是分号分隔的,这让单元格里的逗号变得无害,但整份文件都必须按分号分隔来读。产品名称自带引号方面的麻烦:“长椅, 三人”里的逗号,或者 3" 立柱里的英寸符号,都要照同样的方式转义。如果某一列导入后像是被忽略了,请检查第一个表头名称,因为一份带字节顺序标记的 UTF-8 文件会在它前面藏着三个看不见的字节。

  5. 形状由这一行是什么决定,横向泳道和纵向泳道由它在哪里决定

    有一行取开始:父级为空的那一行。连线到为空的行是叶子,而叶子需要一个终止形状——结束、成功或拒绝——因为一个非终止的行没有出去的连线就是一条死路。如果有帮助,就照这份模板的分法来:客户能下单的行用成功,只存在于组件内部的行用结束。然后把你走出来的深度填进横向泳道,把导出文件自带的类型列填进纵向泳道。认不出来的形状名称会被无声地规整成流程,所以尤其要检查决策这个词有没有写错。

  6. 导入前先清掉孤儿、多余的根和环

    三项检查,各有各的症状。父级列里的每一个值都必须出现在 id 列里;没有出现的就是孤儿,通常是因为导出时只筛了一个类目,而它们的父级在这个类目之上。父级为空的行应当恰好有一个,如果有好几个,你面对的就是好几棵树。而且任何一行都不能顺着父级回到它自己,这种情况出现在一次糟糕的合并之后,反转过来会画出一条绕回自身的连线。

常见问题

怎样把一列父级和子级变成流程图?

先反转这个关系,再给它编号。导出文件给你的是子级写出父级;表格要的是父级写出子级。把行按父级列分组,对每一个父级,把它的子级的行号写进这个父级的连线到单元格里,用逗号分隔。父级单元格为空的每一行都是根节点,取开始形状;没有出现在任何一行父级列里的行都是叶子,连线到留空并取一个终止形状。方框文字取自名称列,横向泳道取自你顺着父级链走出来的深度,纵向泳道取自导出文件已有的类型列。然后把 .csv 拖到编辑器的表格区域上,或者直接把 CSV 文本粘贴进去。导入按表头名称匹配,所以你文件里的列顺序无关紧要,它认不出来的列会被带过并忽略。

父级列和连线到列有什么区别?

方向、基数,以及值指的是什么。父级列朝上指:每一行写出它上面那唯一的一行,所以一行恰好一个值,而叶子就是没人写出的那些行。连线到列朝下指:每一行写出它下面的那些行,所以一个有四个子级的父级在一个单元格里装四个值,而叶子就是单元格为空的那些行。而且两者的值在种类上也不同。父级列装的是标识符,像 SKU-1042 这样的东西,它跟着这一行走到哪里都不变。连线到装的是位置,也就是这一行在表格里从 1 数起的编号,只要上面插入一行它就变了。这正是标识符必须在行序定稿之后、而不是之前解析成编号的原因。

我的列从文件中间开始整体错位了,发生了什么?

几乎总是一个没有加引号的逗号。CSV 的一行在任何东西看它之前就先按分隔符切开了,所以在逗号分隔的文件里,一个装着“4,5”的连线到单元格会被读成两个字段,这一行就比表头多出一个字段,而连线到后面的每一列都落到了邻居的标题下面。把这些单元格用双引号包起来,解析器就会把它们拼回去。同样也适用于连线文字,它也是一个逗号分隔的列表,以及任何名称里带逗号的产品。如果错位是从第一列就开始的,那么原因通常相反:这份文件是分号分隔的——多数欧洲系统导出的正是这种——却被当成逗号分隔来读;或者编码不匹配,让一个字节顺序标记粘在了第一个表头名称上,于是它再也匹配不上了。

父级不在导出文件里的那一行会怎样?

它变成孤儿,而这是筛选过的导出文件里最常见的缺陷。你向系统要了一个类目,或者只要在售的条目,它就恰好给了你这些行——连同它们的父级 id,而这些 id 指向的行被筛掉了。文件里没有任何东西标明这有问题。层级反转之后,这一行根本不会出现在任何人的连线到里,于是它画出来是一个没有任何箭头进来的方框,孤立在树之外。请在导入之前逐行判断它属于哪一种:父级被筛掉的行,应当重新挂到最近的、包含在文件里的祖先上;而父级在源系统里已经不存在的行,是一个该退回去修的数据缺陷,不是一个该画出来的东西。

我的物料清单只有层级列而没有父级列,可以用吗?

可以,转换出来是同一个东西,只不过这次转换依赖的是行的顺序而不是行里的任何值。缩进式物料清单沿着文件重复 1、2、2、3、1 这样的层级,规则是某一行的父级是它上面最近的、层级恰好小一级的那一行。这意味着导出文件原本的顺序是承重的——先按物料号给文件排个序,层级就没了,既不报错,也没有任何东西能把它找回来。请从上到下走一遍文件,记住每一级最后见到的那一行,边走边指定父级,然后才反转成连线到。数量、单位和供应商编码可以留在它们自己的列里,导入时会被带过并忽略;如果你希望它们可见,就搬进备注列。

使用此模板

CSV 流程图与图表模板中的更多内容

流程图模板中的更多内容

Browse all CSV 流程图与图表模板