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

问题描述 投票:1回答:1

我有一个物料清单数据集。

   *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] - >(B:部分) - [:component_of] - >(FG:部分)

  1. 对于每个部分,计算其父部分的成本百分比。 pct =(part.cost * relationship.quantity)/ parent_part.cost
  2. 返回层次结构并确定有效的百分比成本。如果(a)是(b)成本的50%,而(b)是(fg)成本的25%,那么(a)的有效百分比成本是.5 * .25 = .125或12.5% 。

这是可以在密码查询中完成的吗?我从哪里开始?

neo4j cypher
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.