UNNEST without OFFSET feels fine... until you need attribution.
If you just need one value out of an array, UNNEST and filter by key usually works perfectly. That’s why a lot of people use it for event_params in GA4 and move on.
I did too.
But the moment you care about sequence, plain UNNEST stops being enough.
Why?
Because it gives you the values, but not their position.
And in attribution or journey analysis, position is often the whole point.
If you can’t tell which touchpoint was first and which was last, you can’t reliably answer questions like:
- Which source introduced the user?
- Which touchpoint closed the conversion?
- Which event happened early vs late in the path?
That’s where UNNEST ... WITH OFFSET matters.
It gives every array element its index: 0, 1, 2...
With that, you can:
- identify the first element
- identify the last element
- compare early vs late touchpoints
- build path-based attribution logic without losing order
Because if your attribution logic ignores sequence, your model may look mathematically correct while being built on scrambled inputs.

Want all my best GA4-BQ queries in one place? I turned them into a Chrome extension — top SQL queries you can search and copy in seconds.
Go here to install it for FREE.
Prefer the web version? It’s here.


