Abstraction

Separation Between Meaning and Implementation

Definition

Abstraction is the ability of a data model to hide technical complexity and expose to the user only clear, stable, and understandable concepts, independent of how they are internally implemented.

An abstract model allows thinking in terms of meanings,
not tables, columns, or formulas.

In Power BI, abstraction ensures that users interact with:

without needing to understand the physical structure of the model.

Nature

Semantic, cognitive, and architectural.

Abstraction does not eliminate complexity;
it encapsulates it.

It emerges when:

Function

To reduce cognitive friction between the user and the data.

In practice, abstraction enables:

Consequence

A model without abstraction exposes its mechanics;
an abstract model exposes its intent.

Signals of Abstraction

Signals of Lack of Abstraction

This is not transparency; it is unnecessary exposure.

Conceptual Example in Power BI

Without abstraction (❌)

The user builds visuals using direct columns:

Each visual implements its own logic.

Result:
👉 inconsistency and errors.

With abstraction (✅)

The model exposes clear measures:

Net Sales := SUM(FactSales[Amount]) - SUM(FactSales[Discount]) + SUM(FactSales[Tax])

The user only uses Net Sales.

Result:
👉 coherence, stability, and simplicity.

Abstraction and Model Layers

Abstraction is reinforced when:

Each layer fulfills its role without leaking into the next.

Interactions

Without abstraction, the other properties become fragile.

Samples

🔹 Sample 1 — Measures as interface (semantic API)

Without abstraction (❌)
Users build visuals with columns:

Each visual decides how to calculate.

👉 Result: inconsistent metrics.

With abstraction (✅)
The model exposes a single conceptual measure:

Net Sales := SUM(FactSales[Amount]) - SUM(FactSales[Discount]) + SUM(FactSales[Tax])

📌 Result:
Users work with Net Sales, not internal logic.


🔹 Sample 2 — Hide columns, expose meaning

Without abstraction (❌)
The model exposes:

Users must “guess” what to use.

With abstraction (✅)

📌 Result:
The model feels simple, even when complex.


🔹 Sample 3 — Abstraction of business rules

Without abstraction (❌)
Logic is repeated in each visual:

IF( FactSales[Status] = "Closed", FactSales[Amount], 0 )

With abstraction (✅)
The rule lives in a measure:

Closed Sales := CALCULATE( SUM(FactSales[Amount]), FactSales[Status] = "Closed" )

📌 Result:
The rule is single, stable, and reusable.


🔹 Sample 4 — Abstraction against structural change

Today:

Tomorrow:

Without abstraction (❌)
All reports break.

With abstraction (✅)
Only the measure is adjusted:

Net Sales := SUM(FactInvoice[NetAmount])

📌 Result:
Users do not perceive the change.


🔹 Sample 5 — Context abstraction

Without abstraction (❌)
Users manually apply filters in each visual.

With abstraction (✅)
Context lives inside the measure:

Active Customer Sales := CALCULATE( [Net Sales], DimCustomer[IsActive] = TRUE() )

📌 Result:
Meaning is encapsulated, not distributed.


🔹 Sample 6 — Antipattern vs Pattern (Abstraction)

❌ Antipattern — Overly transparent model

✅ Pattern — Abstract model

📌 Rule of thumb:
If users need to know how something is calculated in order to use it, abstraction is missing.

Synthesis

The user should not think about how something is calculated.
They should think about what it means.