-
Notifications
You must be signed in to change notification settings - Fork 0
3 Specialized Graph Analysis
swhitenstall edited this page Jan 30, 2025
·
3 revisions

// Meeting Analysis
MATCH (m:Meeting)
OPTIONAL MATCH (p:Person)-[:ATTENDED]->(m)
WITH m.workgroup as workgroup,
m.date as meeting_date,
count(DISTINCT p) as attendee_count
RETURN workgroup,
count(*) as meeting_count,
min(meeting_date) as first_meeting,
max(meeting_date) as last_meeting,
avg(attendee_count) as avg_attendance
ORDER BY meeting_count DESC;
// Alternative detailed view
MATCH (m:Meeting)
OPTIONAL MATCH (p:Person)-[:ATTENDED]->(m)
RETURN m.workgroup as workgroup,
m.date as meeting_date,
count(DISTINCT p) as attendee_count,
collect(p.name) as attendees
ORDER BY m.date DESC;// Meeting Frequency Over Time
MATCH (m:Meeting)
WITH date(m.date) as meeting_date,
m.workgroup as workgroup
RETURN workgroup,
meeting_date.quarter as quarter,
meeting_date.year as year,
count(*) as meeting_count
ORDER BY year, quarter;
// Decision Timeline
MATCH (m:Meeting)-[:MADE_DECISION]->(d:Decision)
WITH date(m.date) as decision_date,
d.effect as effect_type,
count(*) as decision_count
RETURN decision_date,
effect_type,
decision_count
ORDER BY decision_date;
// Action Item Tracking
MATCH (m:Meeting)-[:HAS_ACTION]->(a:ActionItem)
WHERE a.dueDate IS NOT NULL
WITH a.dueDate as original_date,
a.status as status
RETURN original_date as due_date,
status,
count(*) as action_count
ORDER BY original_date;
// Action Items with Status Distribution
MATCH (m:Meeting)-[:HAS_ACTION]->(a:ActionItem)
RETURN a.status as status,
count(*) as action_count,
collect(a.dueDate) as due_dates
ORDER BY action_count DESC;
// Action Items by Meeting
MATCH (m:Meeting)-[:HAS_ACTION]->(a:ActionItem)
RETURN m.date as meeting_date,
count(*) as action_count,
collect({
text: a.text,
status: a.status,
dueDate: a.dueDate
}) as actions
ORDER BY m.date DESC;// Missing Required Properties
MATCH (m:Meeting)
WHERE m.date IS NULL
OR m.workgroup IS NULL
OR m.host IS NULL
RETURN 'Meeting' as Node_Type,
m.id as ID,
[k in keys(m) WHERE m[k] IS NULL] as Null_Properties;
// Comprehensive Property Check
MATCH (n)
WITH n, labels(n)[0] as Node_Type
WITH n, Node_Type,
CASE Node_Type
WHEN 'Meeting' THEN ['date', 'workgroup', 'host']
WHEN 'Person' THEN ['name']
WHEN 'ActionItem' THEN ['text', 'status', 'assignee']
WHEN 'Decision' THEN ['decision', 'effect']
ELSE []
END as required_properties
WITH n, Node_Type, required_properties,
[prop in required_properties WHERE n[prop] IS NULL] as missing_properties
WHERE size(missing_properties) > 0
RETURN Node_Type,
n.id as ID,
missing_properties,
properties(n) as existing_properties;
// Empty String Properties
MATCH (n)
WITH n, labels(n)[0] as Node_Type,
[k in keys(n) WHERE n[k] = ''] as empty_properties
WHERE size(empty_properties) > 0
RETURN Node_Type,
n.id as ID,
empty_properties;These queries help you:
-
Node-Specific Analysis:
- Track meeting patterns by workgroup
- Monitor participant engagement
- Analyze document usage
-
Temporal Analysis:
- View meeting frequency trends
- Track decision-making patterns
- Monitor action item timelines
-
Data Quality:
- Find missing required properties
- Identify orphaned nodes
- Detect date format issues
- Find potential duplicates
- Check relationship integrity
Use these queries to:
- Monitor participation patterns
- Track workgroup activity
- Identify data quality issues
- Ensure data consistency