In Datenbanksystemen kennt man das Konzept eines Primärschlüssel oder Fremdschlüssel. Im DAX Datenmodell werden mit Schlüsseln Tabellen verknüpft. Hat man nur eine Tabelle, bräuchte man keine Schlüssel. Wir zeigen, warum Schlüssel trotzdem notwendig sind.

Kontext Transition

Im Artikel über Kontext Transition haben wir gezeigt, dass die Funktion Calculate den Zeilen-Kontext in den Filter-Kontext überführt. Das kann sehr praktisch sein in DAX Formeln – wenn man genau weiß, was man tut! Wenn Sie sich nicht ganz sicher sind, was mit Kontext Transition gemeint ist, lesen Sie den Artikel lieber erneut.

Kuriosität

Aus einem System liegen Bestellpositionen vor. Wir haben nur die nackten Positionen importiert: Positionen   Legen Sie eine neue Spalte an und geben folgende Formel ein:

Im Artikel über Kontext-Transition haben wir gesehen, dass durch die Transition des Zeilen-Kontext in den Filter-Kontext jede Zeile genau seinen eigenen Wert als Ergebnis hat. In diesem Fall ist das Ergebnis aber erstaunlicherweise anders: Positionen mit berechneter Spalte In den Zeilen 2 und 4 ist das Ergebnis anders als in der Spalte Preis.

Was ist der Zeilen-Kontext

Schon die Formulierung “in den Zeilen 2 und 4” unterstellt ein Modell, dass es nicht gibt. Die Zeilen haben weder eine Position noch eine Adresse. Würden wir die Sortierung ändern oder die Datenquelle liefert die Zeilen in anderer Reihenfolge wären diese Eigenschaften ohnehin nicht verlässlich. Tatsächlich ist es so, dass es keine Zeilennummer oder Zeilenadressen gibt. Eine Zeile definiert sich über die Werte in seinen Spalten (berechnete Spalten immer ausgenommen!). Mit anderen Worten ist ein Zeilen-Kontext nichts anderes, als wenn wir in jeder Spalte den Filter so setzen würden, dass genau der Wert der aktuellen Spalte gefiltert wird. Wenn wir aber genau das für die Zeile mit der Artikelnummer älteres Parfum machen sehen wir sofort, wo des Ursache des scheinbaren Berechnungsfehlers liegt: Definition des Zeilenkontext Beide Zeilen sind inhaltlich exakt identisch und werden von SUM() nach der Kontext Transition zusammengezählt.

Primärschlüssel

Importieren Sie daher immer den Schlüssel einer Zeile mit. In unserem Fall wird es vermutlich eine Bestellnummer oder BestellId sein und natürlich eine Positionsnummer. Haben Sie keine Schlüssel in der Datenquelle, vergeben Sie in Power Query einen künstlichen Schlüssel: Index-Spalte in PowerQuery Wenn Sie jetzt Ihre Daten aktualisieren, passen die Berechnungen wieder: Berechnete Spalte nach Einfügen eines Primärschlüssels