Stitching Data: UI Joins and Cross-Source Math
Introduction: Baking the Cake
In the previous lesson, you prepared your ingredients: Query A (the high-velocity time-series data from server_load) and Query B (the static lookup data from server_owners). You ensured they shared the identical "Join Key": hostname.
Now, it's time to move from the Queries tab to the Transformations tab.
This is where the magic happens. We are going to stitch these two separate data sources together, enrich our metrics with context, and clean up the result so it looks like a single, professional dataset. By doing this in the UI rather than SQL, you keep your dashboard fast and your logic easy to debug.
Step 1: The "Join by Field" Transformation
The first step in merging Query A and Query B is the Join by field transformation. Think of this as the UI equivalent of a SQL JOIN.
To get started, move to the Transformations tab (located next to Queries), click the Add transformation button, and search for "Join by field". When you select this transformation, Grafana looks at all the data currently loaded. Because you followed the "Join-Ready" rules (identical names and types), Grafana can automatically align the rows.

Step 2: Configuring the Join
Once the transformation is added, you need to define how the data points should connect.
- Select the Mode: Usually, you'll want "OUTER (TIME SERIES)". This ensures that even if a server is missing metadata in Query B, you still see its load metrics from Query A.
- Select the Field: Choose the common identifier. In our server load example, you would select
hostname.
Choosing Your Join Mode: INNER vs. OUTER

