Hi, I am new to Neo4j but have handled graphs in R (igraph) for years. I would like to move some of my R logic into cypher, like the case in the picture above. In this case, which is a network of ownership of companies, that could be own by other companies but in the end there are persons that are the real owners of a given company. For the company "A" I want to nest the ownership "pct" to all persons end nodes and calculate the ownership share along the paths.
The follwing query might be a good starting point:
Match (p:Pers) -[r:OWNS*0..] -> (n:Comp {name: 'A'} )
,path = (p) - [r:OWNS*0..] -> (n:Comp {name: 'A'} )
return path
that gives me a row for each person a path to A
name pct val name1 pct1 val1 name2
<chr> <int> <int> <chr> <int> <int> <chr>
1 P4 100 150 F 10 100 A
2 P5 10 100 A NA NA NA
3 P2 30 30 D 70 100 A
4 P1 70 30 D 70 100 A
5 P3 100 10 E 10 100 A
The ownership share for for row 3 (P2) would be pct(pct1/100) ->30(70/100) = 21
So the question is how to iterate through all rows, get the pct values and perform the calculations.
I have tried with variuos approches with "WITH" AND "UNWIND" but no luck so far.
Below is a script for cerating the sample graph for reusability.
Thanks,
Roger
MERGE (a:Comp {name: 'A', val: 100})
MERGE (b:Comp {name: 'B', val: 1000})
MERGE (c:Comp {name: 'C', val: 70})
MERGE (d:Comp {name: 'D', val: 30})
MERGE (e:Comp {name: 'E', val: 10})
MERGE (f:Comp {name: 'F', val: 150})
MERGE (g:Comp {name: 'G', val: 200})
MERGE (p1:Pers {name: 'P1'})
MERGE (p2:Pers {name: 'P2'})
MERGE (p3:Pers {name: 'P3'})
MERGE (p4:Pers {name: 'P4'})
MERGE (p5:Pers {name: 'P5'})
MERGE (d)-[:OWNS {pct: 70}]-(a)
MERGE (e)-[:OWNS {pct: 10}]-(a)
MERGE (e)-[:OWNS {pct: 100}]-(b)
MERGE (f)-[:OWNS {pct: 10}]-(a)
MERGE (p5)-[:OWNS {pct: 10}]-(a)
MERGE (p5)-[:OWNS {pct: 100}]-(c)
MERGE (p1)-[:OWNS {pct: 70}]-(d)
MERGE (p2)-[:OWNS {pct: 30}]-(d)
MERGE (p3)-[:OWNS {pct: 100}]-(e)
MERGE (p4)-[:OWNS {pct: 100}]-(f)