Skip to content

Concepts

Background on the data, vocabulary, and conventions used by the 15-minute power volume views.

15-minute granularity

Power markets settle on 15-minute intervals (quarter-hours).

  • 96 periods per day24 hours × 4 = 96.
  • Period boundaries:00, :15, :30, :45.
  • Period identity — every period is identified by its begin_utc (the UTC start timestamp). end_utc = begin_utc + 15 minutes.

A day always contains exactly 96 UTC periods, regardless of daylight saving. See Time zones and DST.

Delivery date vs trade date

delivery_date_utc is the UTC calendar date the power is delivered, not the date the deal was traded. Two trades booked on different days for the same delivery hour land on the same delivery_date_utc.

Business case

business_case categorises trading activity by strategy or desk. Common values: Intraday, Day-Ahead, Balancing. Sourced from the Endur Business Case transaction info field.

Grid / power control area

grid is the German power control area where electricity is delivered:

  • TenneT
  • 50Hertz
  • Amprion
  • TransnetBW

For Buy deals, grid is sourced from dim_point_of_receipt_location.power_control_area. For Sell deals, it's dim_point_of_delivery_location.power_control_area.

Buy / sell volumes

Volumes are exposed as two separate columns: volume_buy_mw and volume_sell_mw (both in MW). Net position is volume_buy_mw - volume_sell_mw. A single row never has both non-zero — each upstream deal contributes to one side based on its buy_sell flag.

Volumes are reported in MW (power), not MWh (energy). Multiply by 0.25 hours per period if you need energy.

VWAP vs index price

There are two price worlds, one for each fact family:

Fact family Price column Meaning
Fixed-price (fct_volume_pwr_15m, fct_ewe_volume_pwr_by_business_case*) buy_vwap_price_eur_per_mwh, sell_vwap_price_eur_per_mwh VWAP: volume-weighted average of the deal prices contributing to that period.
Floating / index (fct_volume_pwr_floating_15m, fct_ewe_volume_pwr_floating_by_business_case*) power_index_price_eur_per_mwh Index price for the period (e.g. EPEX intraday), sourced from core_endur_index_pricing_15m_daily.

VWAP is computed as:

VWAP = SUM(volume × price) / SUM(volume)

across all deals contributing to a single (combo, period) cell. If no buy volume contributes, buy_vwap_price_eur_per_mwh is 0 (not NULL). Same for sell. See Gap-filling for why.

Don't average VWAPs naively

AVG(buy_vwap_price_eur_per_mwh) over a day double-counts low-volume periods. To roll up VWAP correctly, re-compute from underlying volumes:

SUM(volume_buy_mw * buy_vwap_price_eur_per_mwh) / NULLIF(SUM(volume_buy_mw), 0)

Internal / external business unit

For floating volumes, the views surface both sides of the BU relationship:

  • internal_business_unit — the EWE entity booking the deal (e.g. EWE TR SHORT TERM BU).
  • external_business_unit — the counterparty's BU (e.g. ECC INTD BU, NORD POOL AS BU).

These come from sat_party_internal_bu_le_attribute and sat_party_external_bu_le_attribute joined via the deal attribute surrogate keys.

Instrument sub-type

The floating views filter to instrument_sub_type = 'PWR Index' — power deals priced against a published index rather than a fixed agreed price.

tran_status

All customer-facing 15m views pre-filter to tran_status IN ('Validated', 'Matured'). You don't need to filter on tran_status yourself. Pending or cancelled deals are excluded upstream.

Cancelled and withdrawn deals

A deal does not stay Validated or Matured forever — it can be cancelled, withdrawn, or otherwise moved out of those statuses. When that happens, the deal's volume is removed from every fct_volume_pwr_* and fct_ewe_volume_pwr_* view from the next load onward.

This is a data-correctness guarantee, not a timing artefact: a deal that leaves Validated/Matured status will not leave behind residual volume in the 15-minute views, even though its delivery dates may be weeks in the past. The total volume you see for any (business_case, grid, delivery_date_utc) combination always reflects only the deals that are currently in scope.

You never need to account for this yourself, and you will never see "leftover" rows from a cancelled deal:

  • You don't filter on status — the views already exclude out-of-status deals.
  • You don't see internal bookkeeping rows — the mechanism the pipeline uses to clear a removed deal's volume is purely internal and is filtered out before any customer view. Querying a view returns only real, in-scope volume.

If a deal returns to Validated/Matured status later, its volume reappears automatically on the next load — no manual action required.

Why this matters

Earlier in the pipeline's history, a cancelled deal could leave stale volume behind that inflated daily totals and broke the reconciliation checks. The current pipeline removes a deal's volume structurally the moment it leaves scope, so totals stay correct between loads.

Power index name

For floating deals, power_index_name identifies the published index used for settlement, e.g. PWR EPEX_DE_INTRADAY 15min. One floating deal generally pins to one index.