Reference: Numera-Core 15m Views¶
Column-level reference for the 4 generic numera-core 15-minute power volume views. These are the migration target for users currently on the EWE wrappers — see How to migrate from EWE views.
All views in this section:
- Are views over the
fct_volume_pwr_*_aggincremental aggregates. - Are gated by the
time_series.15mfeature flag. - Apply
tran_status IN ('Validated', 'Matured')andBusiness Case IS NOT NULLupstream. - Apply no EWE-specific BU or portfolio filters — you apply those in your query.
- Guarantee 96 rows per
(combo, delivery_date_utc). See Gap-filling. - Require consumers to filter by
delivery_date_utcorbegin_utcfor partition pruning.
For the EWE wrapper equivalents, see EWE views.
fct_volume_pwr_15m¶
15-minute fixed-price volumes aggregated by business case and grid.
Path (numera-core): models/endur/volume/15m/volume_pwr_15m/fct_volume_pwr_15m.sql
Grain: business_case + grid + begin_utc (at output); the intermediate aggregate retains dim_deal_attribute_id for portfolio joins.
Source: fct_volume_pwr_15m_agg (incremental) — pivots fct_volume_15m to BC+grid grain with 96-slot volume and volume-weighted price arrays.
Columns:
| Column | Type | Description |
|---|---|---|
dim_deal_attribute_id |
INTEGER | FK to dim_deal_attribute for portfolio/instrument context |
dim_tran_info_id |
INTEGER | FK to dim_tran_info (transaction metadata SCD) |
dim_point_of_receipt_location_id |
INTEGER | FK to dim_point_of_receipt_location (buy-side delivery point) |
dim_point_of_delivery_location_id |
INTEGER | FK to dim_point_of_delivery_location (sell-side delivery point) |
dim_deal_financial_id |
INTEGER | FK to dim_deal_financial |
dim_party_internal_bu_le_attribute_id |
INTEGER | FK to internal BU / legal entity |
dim_party_external_bu_le_attribute_id |
INTEGER | FK to external BU / legal entity |
delivery_date_utc |
DATE | Delivery date (UTC) |
begin_utc / end_utc |
TIMESTAMP_TZ | Period bounds (UTC) |
begin_cet / end_cet |
TIMESTAMP_TZ | Period bounds (Europe/Berlin) |
grid |
VARCHAR | Power control area |
business_case |
VARCHAR | Trading strategy/desk |
volume_buy_mw |
NUMBER | Buy volume (MW). 0 on gap rows. |
volume_sell_mw |
NUMBER | Sell volume (MW). 0 on gap rows. |
buy_vwap_price_eur_per_mwh |
NUMBER | VWAP buy price (EUR/MWh) |
sell_vwap_price_eur_per_mwh |
NUMBER | VWAP sell price (EUR/MWh) |
volume_x_price |
NUMBER | volume_mwh × price for the period, in EUR. Provided as a precomputed cash-flow term. |
VWAP roll-ups: weight by volume_buy_mw / volume_sell_mw
To aggregate VWAP across periods, use
SUM(volume_buy_mw × buy_vwap_price_eur_per_mwh) / NULLIF(SUM(volume_buy_mw), 0)
(and the analogous expression for sell). Do not divide SUM(volume_x_price) by SUM(volume_buy_mw) — that returns one-quarter of the true VWAP because volume_buy_mw = volume_mwh × 4. The raw volume_mwh is not exposed on the view.
fct_volume_pwr_15m_deal¶
Deal-grain variant of fct_volume_pwr_15m.
Path: models/endur/volume/15m/volume_pwr_15m/fct_volume_pwr_15m_deal.sql
Grain: business_case + grid + deal_id + begin_utc
Additional column:
| Column | Type | Description |
|---|---|---|
deal_id |
INTEGER | Endur deal identifier |
All other columns match fct_volume_pwr_15m.
fct_volume_pwr_floating_15m¶
15-minute floating / index-priced volumes aggregated by business case, grid, BU, and index.
Path: models/endur/volume/15m/volume_pwr_15m/fct_volume_pwr_floating_15m.sql
Grain: business_case + grid + internal_business_unit + external_business_unit + power_index_name + begin_utc
Source: fct_volume_pwr_floating_15m_agg, which pivots floating-side fct_volume_15m rows. The index price is looked up from core_endur_index_pricing_15m_daily when you query, by index and delivery day.
Upstream filter: instrument_sub_type = 'PWR Index' (applied in the agg).
Columns:
| Column | Type | Description |
|---|---|---|
dim_deal_attribute_id |
INTEGER | FK to dim_deal_attribute |
dim_tran_info_id |
INTEGER | FK to dim_tran_info |
dim_deal_financial_id |
INTEGER | FK to dim_deal_financial |
dim_point_of_receipt_location_id |
INTEGER | FK |
dim_point_of_delivery_location_id |
INTEGER | FK |
dim_party_internal_bu_le_attribute_id |
INTEGER | FK to internal BU |
dim_party_external_bu_le_attribute_id |
INTEGER | FK to external BU |
delivery_date_utc |
DATE | Delivery date (UTC) |
begin_utc / end_utc |
TIMESTAMP_TZ | Period bounds (UTC) |
begin_cet / end_cet |
TIMESTAMP_TZ | Period bounds (Europe/Berlin) |
grid |
VARCHAR | Power control area |
business_case |
VARCHAR | Trading strategy/desk |
internal_business_unit |
VARCHAR | Internal BU name |
external_business_unit |
VARCHAR | External BU name |
power_index_name |
VARCHAR | Index name (e.g. PWR EPEX_DE_INTRADAY 15min) |
volume_buy_mw |
NUMBER | Buy volume (MW). 0 on gap rows. |
volume_sell_mw |
NUMBER | Sell volume (MW). 0 on gap rows. |
power_index_price_eur_per_mwh |
NUMBER | Index price (EUR/MWh): the index's published 15-minute price for the period. NULL where the index has no 15-minute price for that delivery day. |
No VWAP columns. The floating variant exposes power_index_price_eur_per_mwh instead.
Index price:
- The price comes from the index's own reference source, which is set on the index definition in Endur. Each index has one reference source, so the price is the same for every row on that index and period.
- The price is looked up when you query, so it always shows the current price that Numera holds for that index and delivery day. When an index price is revised, the new value appears the next time you query.
- The price is a single value per index and period. It is not summed or weighted across the deals or business units in the row.
- Where no 15-minute price exists, the column is
NULL, not0. The EWE wrappers show0in the same case. The monthly market-value indices (PWR_MMW_*) never have 15-minute prices. See How to query floating index volumes.
fct_volume_pwr_floating_15m_deal¶
Deal-grain variant of fct_volume_pwr_floating_15m.
Path: models/endur/volume/15m/volume_pwr_15m/fct_volume_pwr_floating_15m_deal.sql
Grain: parent grain + deal_id.
Additional column:
| Column | Type | Description |
|---|---|---|
deal_id |
INTEGER | Endur deal identifier. May be NULL on gap rows. |
power_index_price_eur_per_mwh follows the same rules as the parent view. It comes from the index's own reference source, and it is NULL where the index has no 15-minute price. Every deal on the same index and period shows the same price.
Cancelled deals in other volume views¶
The four views above apply the tran_status IN ('Validated', 'Matured') allow-list. Other numera-core volume views do not use that allow-list; ten of them instead exclude deals whose current status is Cancelled and keep all other statuses: fct_volume_15m, fct_volume_15m_deal, fct_volume_factor_deal, fct_volume_pwr_daily, fct_volume_pwr_15m_agg, fct_volume_pwr_floating_15m_agg, fct_volume_gas_daily, fct_volume_daily, fct_volume_daily_old and fct_schedule. The version-history views fct_schedule_history and fct_volume_history_daily are unchanged and still list every version of a deal. See Cancelled and withdrawn deals for the exact rule.
Surrogate-key columns are the join point¶
Unlike the EWE wrappers, the numera-core views deliberately expose surrogate-key columns (dim_deal_attribute_id, dim_party_*_id, dim_point_of_*_location_id, dim_tran_info_id). These are the join points to dimensional context — portfolio, instrument, counterparty, location.
See How to join dimensional views for worked examples.
Output shape vs EWE wrappers¶
| Aspect | EWE wrappers | Numera-core views |
|---|---|---|
| Gap-fill (96 rows / day) | ✓ | ✓ |
delivery_date_utc, begin_utc, end_utc, begin_cet, end_cet |
✓ | ✓ |
volume_buy_mw, volume_sell_mw |
✓ | ✓ |
buy_vwap_price_eur_per_mwh, sell_vwap_price_eur_per_mwh (fixed) |
✓ | ✓ |
power_index_price_eur_per_mwh (floating) |
✓ | ✓ |
| Index price where the index has no 15-minute price | 0 |
NULL |
grid, business_case |
✓ | ✓ |
Surrogate-key columns (dim_*_id) |
— | ✓ |
volume_x_price helper |
— | ✓ (fixed-price variants) |
| EWE BU/portfolio filter pre-applied | ✓ (short-term desk) | — |
Related¶
- How to migrate from EWE views — view-by-view mapping
- How to join dimensional views — using the surrogate-key columns
- EWE views — the wrapper layer