Facts

A fact is the answer to one reported question for one entity in one year, as established by the Net Purpose data collection process. The fact itself carries the final standardised value; the evidence behind it lives in supporting_facts.

Facts are split across two views with identical shapes: revenue_facts holds the revenue-breakdown questions (product and geographic revenue segments) that feed the Revenue & SDI dataset, and outcomes_facts holds everything else.

Each fact has at least one supporting fact. Where a given fact has multiple facts the total value is given by the aggregation of the fact.

AggregationDescription
NONEThere will be a supporting fact listed as is_total. This fact represents the aggregate level, other supporting facts are provided for context only.
SUMThe fact value is the sum of all the underlying segments.
AVGThe fact value is the average (mean) of the underlying segments.

All applicable questions are attempted to be collected for all entities in the Net Purpose universe. Where no data can be found a NOT FOUND fact record is created. The absence of a fact for a given enitty_id, question_id, year indicates that the question is not applicable to that entity or the data has not yet been looked for.

All views on this page except segments are versioned — filter is_current = TRUE (see Conventions).

revenue_facts and outcomes_facts

One row per fact, per version. Both views share the same columns:

ColumnTypeDescription
fact_idNUMBERPrimary key
entity_idNUMBERWho. Joins to entities
question_idNUMBERWhat. Joins to questions
canonical_question_idVARCHARThe question’s readable slug, for convenience
yearNUMBERFiscal year of the answer determined by our assignment logic
start / endDATEExact period the value covers
valueFLOATThe final standardised value
unitVARCHARUnit of the value. As a string, join to units on units.name
aggregationVARCHARHow supporting values were combined into the final value (e.g. SUM)

supporting_facts

The individual pieces of evidence behind a fact — typically the numbers as they appear in the source document, one row each.

ColumnTypeDescription
supporting_fact_idNUMBERPrimary key.
fact_idNUMBERThe fact this evidence supports
recorded_valueFLOATThe value exactly as printed in the source
recorded_unitVARCHARUnit of the recorded value, as printed, as a string.
standardized_valueFLOATThe value after unit/currency standardisation
standardized_unitVARCHARUnit of the standardised value, as a string
is_totalBOOLEANWhether this row is a disclosed total (rather than a component)
is_derivedBOOLEANWhether the value was derived rather than read directly. See comment for any derivation notes.
is_low_confidenceBOOLEANFlagged where the disclosure was ambiguous
segment_idNUMBERA descriptor of the segregation. THe type of disaggregatino depends on the metric. e.g. product_revenue is by product segments, Scope 1 CO2e emissions are by geography. Joins to segments
source_idNUMBERDocument the value was found in. Joins to sources
page_numNUMBERPage of the document
commentVARCHARAnalyst note giving context on the evidence.

segments

Segments are disaggregations of the top-level fact. The dimension of the disaggregation depends on the question, but typically is geographic. The segment_category gives high level grouping of the different types of segment.

A segment name has three parts, from general to specific: segment_category : segment_class : segment_instance.

ColumnTypeDescription
segment_idNUMBERPrimary key
segment_categoryVARCHARTop-level grouping of the segment
segment_classVARCHARMiddle grouping
segment_instanceVARCHARThe specific segment as disclosed
typeVARCHARSegment kind; most rows are plain segment

Example: trace a value to its evidence

SELECT f.entity_id,
       f.canonical_question_id,
       f.year,
       f.value          AS final_value,
       f.unit,
       sf.recorded_value,
       sf.recorded_unit,
       s.name           AS source_document,
       s.url,
       sf.page_num
FROM NET_PURPOSE.FOUNDATIONS.OUTCOMES_FACTS f
JOIN NET_PURPOSE.FOUNDATIONS.SUPPORTING_FACTS sf
  ON sf.fact_id = f.fact_id AND sf.is_current = TRUE
LEFT JOIN NET_PURPOSE.REFERENCE.SOURCES s
  ON s.source_id = sf.source_id
WHERE f.is_current = TRUE
  AND f.entity_id = 12345
  AND f.canonical_question_id = 'scope_1_co2e_emissions'
  AND f.year = 2024;