스크림트 정리
This commit is contained in:
57
cypher_scripts/path_analysis_table.cypher
Normal file
57
cypher_scripts/path_analysis_table.cypher
Normal file
@@ -0,0 +1,57 @@
|
||||
// Path Analysis Query for Table View (Pure Cypher, Final & Performant)
|
||||
// Calculates and returns path data in a clear, tabular format for a specific scenario.
|
||||
|
||||
// Parameter for the scenario ID
|
||||
// Example: :scenario_id => 'parallel-process'
|
||||
|
||||
// 1. Find start nodes for the scenario using OPTIONAL MATCH
|
||||
MATCH (start_node:Job)
|
||||
OPTIONAL MATCH (start_node)<-[r_in:PRECEDES {scenario: $scenario_id}]-()
|
||||
WITH start_node, r_in
|
||||
WHERE r_in IS NULL
|
||||
|
||||
// 2. Find end nodes for the scenario using OPTIONAL MATCH
|
||||
MATCH (end_node:Job)
|
||||
OPTIONAL MATCH (end_node)-[r_out:PRECEDES {scenario: $scenario_id}]->()
|
||||
WITH start_node, end_node, r_out
|
||||
WHERE r_out IS NULL
|
||||
|
||||
// 3. Match paths and filter relationships efficiently using WHERE ALL
|
||||
MATCH path = (start_node)-[rels:PRECEDES*]->(end_node)
|
||||
WHERE ALL(r IN rels WHERE r.scenario = $scenario_id)
|
||||
|
||||
// 4. For each job in the path, calculate its effective duration and cost
|
||||
WITH path, nodes(path) AS jobs_on_path
|
||||
UNWIND jobs_on_path AS job
|
||||
OPTIONAL MATCH (:Scenario {id: $scenario_id})-[m:MODIFIES]->(job)
|
||||
WITH
|
||||
path,
|
||||
job,
|
||||
COALESCE(m.new_duration, job.base_duration) AS effective_duration,
|
||||
COALESCE(m.new_cost, job.base_cost) AS effective_cost
|
||||
|
||||
// 5. Group by path and aggregate the pre-calculated effective values
|
||||
WITH
|
||||
path,
|
||||
COLLECT({
|
||||
name: job.name,
|
||||
bd: job.base_duration,
|
||||
ed: effective_duration,
|
||||
ec: effective_cost
|
||||
}) AS job_data
|
||||
WITH
|
||||
path,
|
||||
job_data,
|
||||
REDUCE(s = 0, x IN job_data | s + x.ed) AS total_duration,
|
||||
REDUCE(s = 0, x IN job_data | s + x.ec) AS total_cost
|
||||
|
||||
// 6. Return the calculated data for a clean table view
|
||||
RETURN
|
||||
[j IN job_data | j.name] AS path_jobs,
|
||||
[j IN job_data | j.bd] AS base_durations,
|
||||
[j IN job_data | j.ed] AS effective_durations,
|
||||
total_duration,
|
||||
total_cost
|
||||
|
||||
// 7. Order by duration
|
||||
ORDER BY total_duration DESC;
|
||||
Reference in New Issue
Block a user