Skip to content

EWE vs Numera-Core Layers

Two parallel layers of 15-minute power volume views exist. This page explains why and when to use each.

The two layers

Layer Examples Owner EWE BU rules
Numera-core generic fct_volume_pwr_15m, fct_volume_pwr_15m_deal, fct_volume_pwr_floating_15m, fct_volume_pwr_floating_15m_deal numera-core submodule Not applied — you apply them in your query
EWE wrapper fct_ewe_volume_pwr_by_business_case, fct_ewe_volume_pwr_by_business_case_deal, fct_ewe_volume_pwr_floating_by_business_case[_deal], and the *_unfiltered / *_quarter_* controlling variants EWE project (dbt/models/dimensional/) Baked in

Both layers expose the same column shape (begin_utc, volume_buy_mw, etc.), use the same 96-row gap-fill contract, and apply the same upstream tran_status IN ('Validated', 'Matured') filter.

The structural difference is where the EWE-specific business-unit and portfolio rules live.

What the EWE wrappers add

The four short-term desk wrappers embed a hard-coded BU/portfolio filter:

-- fct_ewe_volume_pwr_by_business_case
external_business_unit IN ('ECC INTD BU', 'NORD POOL AS BU')
   OR (external_business_unit = 'EWE TR SHORT TERM BU'
       AND external_portfolio = 'PWR_ST_PF_Netting')

The deal-grain variant tightens this to ECC + NORD POOL only. The floating variants instead apply instrument_sub_type = 'PWR Index' (which is structural, not BU-specific — see below).

The unfiltered controlling variants drop the BU clause entirely. The quarterly variants are the same as their short-term desk siblings, kept separate for the quarterly controlling cycle.

Why two layers exist

The EWE wrappers came first. They embedded the short-term desk's BU rules directly because those were the only consumers at the time. As Numera evolved to support multiple deployments, embedding any single deployment's filters in shared code broke reusability.

ADR-0015 addressed this by:

  1. Extracting the generic 15-minute fact layer into numera-core with no embedded BU filters.
  2. Keeping the EWE wrappers in the EWE project as a thin convenience layer for the short-term desk.
  3. Establishing a forward direction where customers express filters at query time against the generic layer.

Which layer should I use?

Use the generic numera-core views (fct_volume_pwr_15m*) when:

  • You're starting a new analysis. The generic layer is the strategic direction.
  • You need to express filters the EWE wrappers don't pre-apply (other BUs, other portfolios, different tran_status combinations).
  • You're doing cross-BU controlling or reporting work.
  • You want to drop the EWE-specific assumption that "this is what the short-term desk cares about" and write the filter yourself.
  • You're writing a query that should be portable across Numera deployments (this is rare for EWE-internal work, but the pattern is cleaner regardless).

Use the EWE wrappers (fct_ewe_volume_pwr_*) when:

  • You're maintaining an existing short-term desk report that already runs against them.
  • You want the short-term desk's BU rules pre-applied for you and don't want to think about them.
  • You're using the semantic views (sv_power_volumes[_floating]) — they wrap the deal-grain EWE wrappers, not the generic layer.

Migration is underway

EWE users are actively being moved off the wrappers towards the generic views. See How to migrate from EWE views for the playbook. The EWE wrappers will be deprecated once the migration completes — exact timeline pending.

What does not change between layers

The data is the same. Migration from EWE wrappers to generic views with the equivalent filter applied reproduces the EWE wrapper output row-for-row for the same date range. See the migration how-to for the validation harness.

What's preserved:

  • Column names (begin_utc, volume_buy_mw, buy_vwap_price_eur_per_mwh, …)
  • 96-row gap-fill contract
  • tran_status IN ('Validated', 'Matured') filter (applied upstream in both layers)
  • VWAP and index price semantics

What's different:

  • Generic views expose more surrogate-key columns (dim_deal_attribute_id, dim_party_*_id, dim_point_of_*_location_id, dim_tran_info_id) for joining to dimensional context. The EWE wrappers expose only the columns the short-term desk uses.
  • Generic views require you to apply BU/portfolio filters yourself — typically as a CTE or WHERE clause.