BA需求分析方法总结(1)——控制变量法

举个简单例子。 目前有一个客户订单,报了BOQ(报价单),下面有某一套产品,而该套产品下含多个item(SBOM维度) 而有时,客户会因为某些因素,将BOQ下的部分产品做更改。 比如改数量、单价,或者直接退掉该产品。

比如客户此时对该产品不满意,突然间说我不想要了,怎么办?

对于客户来说,他其实只需要在原先的BOQ下,把该产品删除掉就行了。
而对于后端供应链来说,需要区分成两种场景:

  1. 该产品未发货——做撤货处理 即我不需要再把此产品做运输发出去了。直接在原BOQ下把产品删掉。
  2. 该产品已发货——做退货处理 此时,我不可能像客户那样,仅仅在系统上把该产品删掉就完了,而需要把这个产品做退货处理,即把原先发过去的货,让物流再退回来。
    因此需要单独再做个退货的BOQ来处理。

可以看出,同样一次变更,在供应链角度看的维度与处理方式,跟客户相比是有区别的。 因此,在IT系统上也需要相应的做区分。

目前前端客户用的系统PRM针对此种场景的处理如下:
如果BOQ发生变更,则会产生两种BOQ——MBOQ与DBOQ,分别用来表示全量与变量。

而针对退货与撤货,PRM处理相同:

MBOQ——更新成变更后的结果
DBOQ——说明这次变更改了什么

但后端供应链系统需要针对退货的场景,需单独新建一个BOQ(退货),原先的BOQ保持不变。而撤货的,只需要在原先BOQ剪掉即可。

例:

原BOQ1下有产品A 5套,其中每套包含了 item1 50个(单价为3元)与Item2 30个(单价为4元)

报价单 产品名称 产品数量 物料名称 物料数量 物料单价
BOQ1 产品A 5套 item1 50个 3元
      item2 30个 4元
则这个产品A的总金额=(item1金额+item2金额)*产品套数, 即 (50*3+30*4)*5

此时,客户要求退掉产品A中的item2。则PRM的处理为:

报价单 产品名称 产品数量 物料名称 物料数量 物料单价
MBOQ(更新后的结果) 产品A 5套 item1 50个 3元
      item2 0个 4元
DBOQ(变更了什么) 产品A 5套 item2 30个 4元
此时产品A的总金额= (50*3+ 0*4)*5

而对于供应链来说,退货的场景,原BOQ是不变的,只会把退货的产品单独做一个BOQ。 即

报价单 产品名称 产品数量 物料名称 物料数量 物料单价
原BOQ1(不变) 产品A 5套 item1 50个 3元
      item2 30个 4元
退货BOQ(相当于DBOQ) 产品A 5套 item2 30个 4元

因此,后端如何针对这两种场景进行处理?

  1. 是取MBOQ刷新,再针对DBOQ做特殊处理?
  2. 还是只取前端的DBOQ,再自己判断是该在原BOQ中剪掉,还是新建一个退货BOQ?

最终,我们选择了方案1:

先把MBOQ覆盖过来,再判断是撤货还是退货。 如果是撤货,则无需取DBOQ。如果是退货,则需要取DBOQ,在系统中新建一个退货BOQ,并将DBOQ加回到MBOQ中,保持原来的BOQ不变。


那么,如何验证该方案针对所有的变更场景都适用呢?

客户有可能在撤部分产品的同时,又把剩余的产品的金额(单价)改掉了。 那如何验证多种组合场景都可以适配?

这时,我们可能想列个表格,把所有场景都列出来,一一实验一下。 但我们真的能保证所有场景都列全了吗?

此时,我们可以尝试用下控制变量法。 1. 找出可变因素:产品套数 X、item数量 Y、item单价 Z

2. 列方程,推导验证 假设只有item数量改变,其他为常数,则只需验证

原BOQ的产品A金额 = MBOQ产品A金额+DBOQ的产品A金额
原BOQ的产品A金额 = item1金额 + item2金额。

假设只有item2发生变更,则item1金额可看作常数Q,

产品A金额 = Q+ X*Y*Z

MBOQ产品A金额 + DBOQ产品A金额 = [Q + X*( Y-△y)*Z] + X*△y*Z = Q+ X*Y*Z 

(其中,△y代表退货的item2数量,X、Y、Z分别代表原来的产品A的套数、item2数量、item2单价)

验证成功!

3.验证多个变量的场景: 假如三个变量都发生变化(又退货,又改了item数量,又改了产品套数),如退了产品套数△x中的△y数量的item2,那只需验证

MBOQ产品A金额 + DBOQ产品A金额 = [Q + (X-△x)*Y*Z+△x*( Y-△y)*Z ] + △x*△y*Z  

是否等于

Q+ X*Y*Z

4.查找不适配的场景业务上是否存在 如果验证错误,则再看下,该场景在业务上是否存在。 假如不存在,则该方案是ok的。

本文只是提供验证方案适配度的一种思路, 其难点在于,我们如何把可变的因素都能找出来。

有时变更场景没有想全,往往是因为某个可变因素没有考虑在内导致的。

但一旦找出变更场景,涉及到加减计算,或者不同系统维度不同的特殊处理时, 此方法还是比较有用的。

通过这个发现,数学还是挺有用的 ^_^