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: 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: 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: 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: Wenn Sie jetzt Ihre Daten aktualisieren, passen die Berechnungen wieder:
Kommentar hinterlassen