Trace a served value back to its source line
Numbers checked against the live data on
Join the row's release_id to open_ef.release and its source_row_id to open_ef.source_row: you get the edition, the file, the position in the file and every field of the original line. DESNZ's butane combustion factor, 1.74533 kg CO2e per litre, comes from line 11 of ghg-conversion-factors-2026-flat-format.xlsx in the 2026 release, where the publisher printed 1.74533 per litres.
The query#
Show the SQL
SELECT f.value_co2e_native,
f.source_key,
r.version AS release_version,
r.released_on,
sr.artifact,
sr.row_index,
sr.raw ->> 'id' AS publisher_row_id,
sr.raw ->> 'uom' AS raw_unit,
sr.raw ->> 'value' AS raw_value,
f.license_code
FROM open_ef.factors_flat f
JOIN open_ef.release r ON r.id = f.release_id
JOIN open_ef.source_row sr ON sr.id = f.source_row_id
WHERE f.library = 'desnz'
AND f.slug = 'ef-desnz-gaseous_fuels_butane-gb-l-combustion-d74d3fe6'
AND f.is_default_indicator
AND f.is_latest_activity_year;
| value_co2e_native | source_key | release_version | released_on | artifact | row_index | publisher_row_id | raw_unit | raw_value | license_code |
|---|---|---|---|---|---|---|---|---|---|
| 1.74533 | efv1-f0d3b2528b05f5f6de25891ce4df3e30 | 2026 | 2026-06-11 | ghg-conversion-factors-2026-flat-format.xlsx | 11 | 1_100_1000_8_1 | litres | 1.74533 | ogl-3.0 |
The served l is the publisher's litres, and the number is unchanged. When a served value differs from the raw one (a unit conversion, a GWP restatement, a price-level adjustment), this is the query that shows both sides.
What each link proves#
| column | where it points | what you learn |
|---|---|---|
slug |
the factor | the durable pointer to cite; it survives new releases |
source_key |
the published value | the exact published number you used; a new release gives it a new key, but a price re-seed or a GWP pass moves the served value with the key unchanged, so diff price_index_ratio and value_co2e_normalized beside it |
value_id |
open_ef.emission_factor_value |
the value row itself, with columns the view leaves out, such as publisher_valid_to |
release_id |
open_ef.release |
the edition (version, released_on, source_url) and its licence |
source_row_id |
open_ef.source_row |
the file (artifact), the position (row_index) and the line verbatim (raw) |
raw is JSON with every field of the line, uncoerced. Its keys are the publisher's own column names, so they differ from one library to the next: list them with jsonb_object_keys(raw) before you pick one.
Watch out#
Watch out.
row_indexis a position in the artifact as it was read, not a guaranteed spreadsheet row number. To find the line in the publisher's own file, use a field the publisher printed, such as DESNZ'sidabove.
Watch out. For a matrix source such as EXIOBASE, one
source_rowis the extracted (region, product) slice, not a single cell. A spend factor served for several activity years points at the same source line from every year: the price-level adjustment is ours, andprice_index_ratioon the row undoes it.
Why it works. Nothing is interpreted before it is stored:
source_rowlands each line before any cleaning, so the path from a served number to the publisher's print is a join, not a reconstruction. What the view does not serve iscontent_hash, the change detector on the raw line. Read it onopen_ef.source_rowif you mirror the data and want to spot a silent edit.
Related#
- Identifiers and stability
- How factors are cleaned
- Table reference: source_row and release
- Cite a factor and DESNZ's import notes