cypher query用于计算层次结构中每个组件的总成本百分比

时间:2018-03-05 20:16:15

标签: neo4j cypher

我有物料清单数据集。

   *data model*
    (:part)
       -part_num
       -cost

    [:component_of]
       -quantity

以下查询将正确创建完整的BOM层次结构

MATCH path=(p:part)-[r:component_of*0..]->(fg:part)
WHERE fg.part_num = 'D100'
RETURN path

为了支持成本可视化,我试图计算每个组成部分归因于成品(fg:part)的成本百分比。我想实现的逻辑如下。

示例路径:

(A:一部分) - [:component_of] - GT;(B:部分) - [:component_of] - GT;(FG:份)

    每个部分的
  1. 计算其父部分的成本百分比。 pct =(part.cost * relationship.quantity)/ parent_part.cost
  2. 返回层次结构并确定有效百分比成本。如果(a)是(b)成本的50%,而(b)是(fg)成本的25%,那么(a)的有效百分比成本是.5 * .25 = .125或12.5%
  3. 这可以在密码查询中完成吗?我从哪里开始?

1 个答案:

答案 0 :(得分:1)

尝试reduce功能:

MATCH path=(p:part)-[r:component_of*0..]->(fg:part)
WHERE fg.part_num = 'D100'
WITH path, 
     NODES(path) AS nds, 
     RELATIONSHIPS(path) AS rls
RETURN path, 
       REDUCE(acc=1.0, i IN RANGE(0, LENGTH(path)-1) | 
              0.0001 * acc * nds[i].cost*rls[i].quantity / nds[i+1].cost
       ) AS epc