Wozu einen Primärschlüssel?

    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:

    Total := CALCULATE(SUM(Bestellungen[Preis]))

    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

    Kategorien: Artikel, Power BI, Power Pivot, Power Query
    Holger Gubbels

    Holger Gubbels ist Spezialist für alles, was mit Business Intelligence zu tun hat. Der Diplom-Informatiker strukturiert und löst als Data Scientist und Berater der mogular GmbH tagtäglich komplexe Problemstellungen rund um die Datenanalyse. Als Dozent der Hochschule für Technik Stuttgart ist er ein ausgewiesener Experte seines Fachs und gewohnt, Inhalte einfach zu erläutern. Genau das macht er auch hier in seinen Beiträgen für das PowerPivotInsights Blog. Zusätzlich ist er Autor für die Computerwoche und den Springer-Verlag. Sie erreichen ihn unter hg@mogular.com

    Antwort schreiben

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.