top of page

Measures vs. Calculated Columns

Es gibt in Power BI Entscheidungen, die sehen klein aus und rächen sich groß. Measures vs. Calculated Columns ist genau so ein Fall. Beides lässt sich mit DAX bauen. Beides kann auf den ersten Blick funktionieren. Und genau deshalb wird die Entscheidung in vielen Modellen nicht sauber getroffen, sondern eher nach Bauchgefühl.


Ergebnis: unnötiger Speicherverbrauch, längere Refresh-Zeiten, kompliziertere Modelle und am Ende Reports, die sich schwerer erklären lassen als nötig. Die gute Nachricht: Die Unterscheidung ist gar nicht kompliziert. Man muss sie nur sauber denken.


Measures vs. Calculated Columns

Die kurze Antwort, die erstaunlich oft reicht

Wenn du einen Wert pro Zeile dauerhaft im Modell speichern musst, bist du im Bereich Calculated Column.Wenn du eine Kennzahl abhängig vom aktuellen Filterkontext berechnen willst, bist du fast immer bei einem Measure.


Oder noch direkter:

  • Calculated Column = wird beim Refresh berechnet und als Spalte im Modell abgelegt.

  • Measure = wird zur Abfragezeit berechnet, also dann, wenn ein Visual den Wert wirklich braucht.


Das klingt banal. In der Praxis ist genau diese Trennung aber der Unterschied zwischen einem schlanken Modell und einem Bericht, der bei jedem Ausbau träger wird.


Was eine Calculated Column wirklich kostet

Eine Calculated Column ist nicht einfach nur eine Formel im Modell. Sie erzeugt eine zusätzliche physische Spalte in deinem semantischen Modell. Und jede zusätzliche Spalte kostet Speicher. Wie teuer das wird, hängt nicht nur vom Datentyp ab, sondern stark von der Kardinalität, also von der Zahl unterschiedlicher Werte. Gerade Spalten mit vielen unterschiedlichen Ausprägungen werden in VertiPaq schnell teuer, weil die Dictionary-Struktur dann größer wird.


Das ist der Punkt, den viele unterschätzen: Ist doch nur eine kleine Hilfsspalte klingt harmlos, bis diese Hilfsspalte in einer Faktentabelle mit zig Millionen Zeilen landet.


Und damit nicht genug: Diese Spalte muss beim Refresh auch berechnet werden. In Import-Modellen wird bei einem Refresh die neue Modellversion aufgebaut, während die alte noch für Abfragen verfügbar bleibt. Microsoft weist deshalb ausdrücklich darauf hin, dass bei einem Full Refresh im Extremfall etwa doppelt so viel Speicher benötigt wird wie für das fertige Modell selbst. Jede unnötige Calculated Column verschärft diesen Effekt.


Deshalb die Daumenregel: Eine Calculated Column muss sich ihren Platz im Modell verdienen. Nicht fachlich nett. Nicht vielleicht irgendwann praktisch. Sondern wirklich notwendig.


Measures sind nicht gratis – aber oft die bessere Last

Measures verbrauchen natürlich auch Ressourcen. Nur eben anders. Ein Measure wird nicht zeilenweise im Modell gespeichert, sondern bei Bedarf im aktuellen Kontext ausgewertet. Es verschiebt die Last also von Speicher und Refresh in Richtung Abfragezeit. Genau deshalb ist ein Measure für Kennzahlen in sehr vielen Fällen die sauberere Lösung: Du hältst das Modell schlanker und berechnest nur das, was das Visual gerade wirklich braucht.


Das heißt aber nicht, dass jedes Measure automatisch performant ist. Ein schlecht geschriebenes Measure kann Visuals langsam machen, unnötig komplexe Filterkontexte erzeugen oder viele Iterationen auslösen. Nur: Diese Probleme löst du in der Regel gezielter als ein aufgeblähtes Datenmodell. Einen dicken Speicherfußabdruck schleppst du dagegen bei jedem Refresh, bei jeder Veröffentlichung und oft in jedem weiteren Ausbau mit.


Praktisch heißt das: Für Kennzahlen wie Umsatz, Marge, Conversion Rate, Durchschnittswerte, Vorjahresvergleiche oder Anteile ist das Measure fast immer der richtige Startpunkt. Nicht die Spalte.


Der eigentliche Kern: Kontext

Wer den Unterschied zwischen Measures und Calculated Columns nur als Performance-Thema sieht, greift zu kurz. Der eigentliche Unterschied liegt im Kontext.


Eine Calculated Column wird mit einem Row Context berechnet. Sie schaut auf die aktuelle Zeile. Ein Measure wird im Filter Context ausgewertet. Es reagiert auf Slicer, Filter, Zeilen- und Spaltenköpfe im Visual, Beziehungen und explizite DAX-Filterlogik. Und hier passieren die meisten Fehler.


Typischer Irrtum 1: „Ich rechne das schnell als Spalte aus“

Beispiel: Jemand will den Anteil eines Produkts am Gesamtumsatz und baut eine Calculated Column. Das Problem: Eine Spalte kennt beim Berechnen erst einmal die aktuelle Zeile, nicht die dynamische Berichtssituation. Der Anteil am Gesamtumsatz ist aber typischerweise kein Zeilenmerkmal, sondern eine Kennzahl, die sich je nach Filterung ändert. Nach Region. Nach Zeitraum. Nach Kundengruppe. Nach Produktkategorie.

Genau dafür sind Measures gebaut.


Typischer Irrtum 2: „Measures können alles ersetzen“

Auch falsch. Es gibt Dinge, für die du eine Spalte brauchst, weil Power BI sie als Feld braucht: für Achsen, Slicer, Legenden, Gruppierungen, Sortierungen oder Beziehungen. Microsoft unterscheidet das sehr klar: Measures landen typischerweise im Values-Bereich, Calculated Columns dienen als reguläre Felder in Rows, Axis, Legend oder Group.


Wenn du also zum Beispiel eine Klassifikation brauchst wie:

  • A-/B-/C-Kunde

  • Produktklasse

  • Buchungsstatus

  • Ampelgruppe für Selektion oder Gruppierung

…dann kann eine Spalte sinnvoll oder sogar nötig sein.


Nur auch hier gilt: Wenn diese Logik bereits in Power Query oder idealerweise im Quellsystem erzeugt werden kann, ist das oft besser als eine DAX-Calculated-Column im Modell. 


Die Frage, die du dir vor jeder neuen Spalte stellen solltest

Nicht: Kann ich das als Spalte bauen? Sondern: Muss dieser Wert als Feld im Modell existieren?

Wenn die Antwort nein ist, ist ein Measure meist die bessere Wahl.


Ein paar praktische Beispiele:

Beispiel 1: Umsatz pro Zeile

Sales[Quantity] * Sales[Net Price]

Das lässt sich wunderbar als Calculated Column bauen. Viele machen das.Aber brauchst du den Wert wirklich als gespeicherte Spalte?


Wenn du am Ende nur Summen, Durchschnitte oder andere Aggregationen davon im Report zeigen willst, reicht sehr oft ein Measure wie SUMX(Sales, Sales[Quantity] * Sales[Net Price]). Dann speicherst du nicht Millionen Zeilen zusätzlicher Werte, sondern berechnest die Kennzahl dynamisch im passenden Kontext. Die Unterscheidung zwischen Zeilenkontext in Iterationen und Filterkontext im Visual ist dabei zentral.


Beispiel 2: Kundenklasse als Slicer

Wenn Nutzer zwischen Klein, Mittel und Groß filtern sollen, brauchst du ein Feld. Also eine Spalte oder besser eine vorgelagerte Modellierungslösung. Ein Measure kann nicht sinnvoll als Slicer-Feld dienen.


Beispiel 3: Verkettete Beschriftung

Produktkategorie & " - " & Unterkategorie

Das ist ein klassischer Fall, in dem eine Spalte legitim sein kann, weil du das Ergebnis als Achse, Beschriftung oder Gruppierung verwenden willst. Microsoft zeigt genau solche Szenarien für Calculated Columns.


Beispiel 4: Prozentanteil, YTD, Vorjahr, Rolling Average

Das sind Measures. Fast immer.Weil diese Werte nur im jeweiligen Filterkontext fachlich korrekt sind.


Warum viele Modelle trotzdem zu viele Calculated Columns haben

Weil Columns sich am Anfang oft einfacher anfühlen. Du siehst das Ergebnis sofort in der Tabelle. Du kannst die Spalte irgendwo reinziehen. Das Modell wirkt greifbar. Measures verlangen mehr Denken in Filterkontext, CALCULATE, Iteratoren und Beziehungen. Aber genau da liegt die Falle: Ein einfacher Start ist nicht dasselbe wie eine gute Modellentscheidung.


Das erinnert stark an das, was wir auch bei Self-Service immer wieder sehen: Was für den Moment bequem ist, ist langfristig nicht automatisch robust. Inhaltlich passt das übrigens sehr gut zu unserem Beitrag „Was ist Self-Service und warum ist das so schwer?“ – denn auch hier geht es am Ende um saubere Verantwortungsgrenzen statt um schnelle Workarounds.


Moderne Nuancen: DirectQuery, Composite, Direct Lake

Die klassische Empfehlung „Measures bevorzugen, Columns nur wenn nötig“ gilt weiter. In modernen Speicher- und Modellierungsmodi wird sie eher noch wichtiger. In DirectQuery sind Calculated Columns eingeschränkt: Sie müssen auf row-level-Ausdrücke beschränkt sein, die zur Quelle faltbar sind; viele DAX-Funktionen stehen dort gar nicht sinnvoll zur Verfügung.


In Direct Lake ist es noch deutlicher: Für Direct-Lake-Storage-Mode-Tabellen werden Calculated Columns aktuell nicht unterstützt. Das zwingt Teams dazu, Modellierungsentscheidungen stärker nach vorne zu ziehen – also in Lakehouse, Warehouse, SQL-View oder Power Query. Heißt übersetzt:Wer heute noch reflexhaft alles mit DAX-Spalten erschlägt, baut nicht nur für Import-Modelle suboptimal, sondern schränkt sich auch strategisch für moderne Fabric-Szenarien ein.

Nicht jede Logik gehört in den Bericht. Vieles gehört früher, sauberer und wiederverwendbarer ins Datenprodukt.


Eine pragmische Entscheidungsregel aus Projekten

Wenn ich in einem Modell eine neue Berechnung brauche, gehe ich in dieser Reihenfolge vor:

  1. Kann die Logik in die Quelle oder in Power Query?

    Wenn es eine stabile, zeilenbasierte Transformation ist: lieber dort.

  2. Brauche ich das Ergebnis als Feld zum Filtern, Gruppieren, Sortieren oder für Beziehungen?

    Dann kann eine Spalte sinnvoll sein.

  3. Brauche ich eigentlich nur eine Kennzahl im aktuellen Berichtskontext?

    Dann ist es ein Measure.

  4. Liegt die Berechnung auf einer großen Faktentabelle?

    Dann bin ich mit Calculated Columns besonders streng, weil Speicher- und Refresh-Kosten schnell spürbar werden.

  5. Ändert sich das fachliche Ergebnis je nach Filterung?

    Dann ist eine Spalte fast sicher die falsche Wahl.


Drei Sätze, die du dir merken kannst

Measures für Kennzahlen. Columns für Felder.Und zeilenbasierte Standardlogik möglichst upstream. Das ist nicht akademisch. Das spart in echten Projekten Speicher, Refresh-Zeit und spätere Umbauten.


Gerade wenn Reports wachsen, mehrere Teams daran arbeiten und irgendwann Governance wichtig wird, werden solche Entscheidungen plötzlich sichtbar. Dann hängt an einer kleinen DAX-Spalte eben nicht nur eine Formel, sondern auch Modellqualität. Das berührt direkt Themen aus Freigabeprozess für Reports und auch aus Dashboard-Design in Power BI: 10 Regeln, die du sofort siehst: Gute Reports sind nicht nur hübsch oder fachlich korrekt. Sie sind auch sauber modelliert.

Fazit: Der Unterschied, der dein Modell schlank hält

Calculated Columns sind nicht falsch. Measures sind nicht automatisch besser. Aber sie haben unterschiedliche Aufgaben – und wer diese Aufgaben vermischt, bezahlt dafür.

Mit Speicher. Mit Refresh-Zeit. Mit schwer erklärbaren Ergebnissen.Und oft mit einem Modell, das früher oder später neu gedacht werden muss.


Darum die klare Empfehlung: Starte gedanklich immer beim Measure. Wechsle nur dann zur Calculated Column, wenn du das Ergebnis wirklich als Feld im Modell brauchst. Und selbst dann prüfe zuerst, ob diese Logik nicht sauberer in Power Query oder direkt in der Datenquelle aufgehoben ist.


Das ist keine dogmatische Regel. Das ist einfach die Entscheidung, die dir in sehr vielen Fällen Performance spart.

Der nächste sinnvolle Schritt

Power BI entfaltet seinen Nutzen erst dann vollständig, wenn Dashboards sauber aufgebaut, Datenmodelle durchdacht und Kennzahlen klar definiert sind.Genau diese Grundlagen entscheiden darüber, ob Berichte genutzt oder ignoriert werden.


Wenn du Power BI strukturiert aufsetzen oder bestehende Lösungen verbessern willst, unterstützen wir dich mit:


So wird aus einem funktionierenden Bericht eine belastbare Analytics-Lösung.

bottom of page