What problem does it solve? CKAN's DataStore SQL cannot join across tables, so each query hits only one resource. This Skill provides the join keys, naming normalization rules, and ready-made recipes needed to combine Montréal's open datasets (trees, crime, permits, 311, fire, collisions) into unified analyses. ## Core Features & Use Cases - Join Key Reference: Documents borough, coordinate, and date fields across all major datasets, including inconsistencies like Ahuntsic - Cartierville vs Ahuntsic-Cartierville and crime data using PDQ districts instead of boroughs. - Four Join Recipes: Borough comparison, Haversine-based proximity joins, temporal correlation, and multi-dataset safety profiles, each with working Python code against the CKAN API. - Borough Normalization: A reusable normalize_borough function with alias mapping to reconcile naming differences across datasets. - Use Case: To answer "Which borough has the most trees per 311 request?", query each dataset with GROUP BY borough, normalize the borough names, and merge the results client-side. ## Quick Start Ask the agent to compare tree counts and 311 request volumes by borough using the cross-dataset join recipes.