Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 用于计算层次结构中每个组件的总成本百分比的cypher查询_Neo4j_Cypher - Fatal编程技术网

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

Neo4j 用于计算层次结构中每个组件的总成本百分比的cypher查询,neo4j,cypher,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

我有一份材料清单

   *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:部分)-[:组件的]->(b:部分)-[:组件的]->(fg:部分)

  • 对于每个零件,计算其父零件的成本百分比。pct=(零件成本*关系数量)/父零件成本
  • 返回层次结构并确定有效成本百分比。如果(a)为(b)成本的50%,且(b)为(fg)成本的25%,则(a)的有效成本百分比为.5*.25=.125或12.5%

  • 这是可以在密码查询中完成的吗?从何处开始?

    尝试
    减少
    功能:

    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
    

    这可能比您提供的2个步骤更复杂。一般来说,任何零件(例如螺钉)都可以包含在多个子组件中。因此,您必须能够为层次结构中出现在多个位置的任何零件生成正确的百分比。是的,这是正确的。