Journey Builder SQL Patterns with Data Views
Journey metadata vs. send tracking
_Journey stores version-level journey metadata (name, status, version GUID). _JourneyActivity maps canvas nodes — email steps expose JourneyActivityObjectID, which ties to triggered send definitions on tracking views.
Email sends from Journey Builder appear in _Sent and _Job with TriggererSendDefinitionObjectID populated.
Join journey activities to sends
SELECT
j.JourneyName,
ja.ActivityName,
ja.ActivityType,
COUNT(DISTINCT s.SubscriberKey) AS Sends
FROM _Journey j
INNER JOIN _JourneyActivity ja ON j.VersionID = ja.VersionID
INNER JOIN _Sent s
ON ja.JourneyActivityObjectID = s.TriggererSendDefinitionObjectID
WHERE j.JourneyStatus = 'Running'
AND s.EventDate >= DATEADD(day, -14, GETDATE())
GROUP BY j.JourneyName, ja.ActivityName, ja.ActivityType
ORDER BY Sends DESC
Common pitfalls
- Journey versions rotate — filter on the active VersionID or recent CreatedDate when journeys are re-published.
- Non-email activities (WAIT, DECISION) will not join to _Sent — filter ActivityType or expect null send rows.
- Journey data is BU-scoped to where the journey was built.
Related reference: _Journey · _JourneyActivity · _Sent