Die DAX-Funktionen Distinct() und Values() geben beide eindeutige Werte einer Spalte zurück. Trotzdem unterscheiden sich beide Funktionen. Im heutigen Artikel zeigen wir Ihnen, welches Detail man übersehen kann.
Distinct in SQL
Vielleicht kennen Sie den DISTINCT-Befehl aus SQL: Wenn Sie wissen wollen, wie viele Aufträge im System sind, Ihnen aber nur die Positionstabelle zur Verfügung steht: Select Distinct(SalesOrderId) From SalesOrderDetail Dadurch erhalten Sie alle eindeutigen SalesOrderId Werte zurück.
Distinct in DAX
In DAX geht das genauso. Möchten wir ermitteln, wie viele Positionen im Schnitt ein Auftrag hat, können wir folgende Formel definieren:
Values()
Die Funktion Values() gibt ebenfalls eine eindeutige Liste von Werten einer Spalte zurück. Values() hat zusätzlich die Eigenschaft, dass wenn die Liste genau einen Eintrag enthält, der Rückgabewert nicht eine Liste mit einem Eintrag ist, sondern der Eintrag selbst – wir in unserem Blog-Beitrag ausführlich beschrieben. Trotzdem macht Values() bei mehr als einem Wert irgendwie das gleiche wie Distinct(). D.h. in Anlehnung an das obige Beispiel können wir auch schreiben:
Das Ergebnis ist identisch…
Automatische Dimensionserweiterung
Nehmen wir an, wir haben eine Dimensionstabelle mit den Schlüsseln A und B sowie eine Faktentabelle mit den Fremdschlüsseln A, B, C. Das bedeutet, dass wir eigentlich eine Inkonsistenz haben, da C in der Dimensionstabelle nicht vorkommt: Verknüpfen Sie jetzt die beiden Tabellen über die Spalten DimKey. Erstellen wir eine Pivot-Tabelle und werten die Anzahl Fakten pro Dimension aus, erhalten wir folgendes Ergebnis: ![Pivot-Tabelle mit generiertem Dimensioneintrag "Leer"](./139imagethumb-9.png "Pivot-Tabelle mit generiertem Dimensioneintrag "Leer"") Würde die Pivot-Tabelle nur vorhandene Zeilen der Dimension als Grundlage nehmen und davon ausgehend die Fakten gezählt werden, wäre das Gesamtergebnis falsch. Die Zeilen mit DimKey C in der Faktentabelle würden unter den Tisch fallen. Daher wird in den Dimensionen im Falle einer Inkonsistenz der Daten (fehlende Schlüssel) automatisch eine Zeile mit Wert Blank() hinzugefügt. Gesehen haben Sie das sicher schon oft.
Der Unterschied zwischen Distinct() und Values()
Auf der Dimension formulieren wir zwei Measures:
Das Ergebnis: VALUES() zählt also die BLANK-Zeile in der Dimension mit, DISTINCT nicht.
Gegenprüfung
Löschen Sie einfach mal die Verknüpfung zwischen den beiden Tabellen, so dass keine Beziehung mehr besteht: Die BLANK-Zeile ist jetzt nicht mehr vorhanden, da es keinen Grund mehr gibt, wenn die Verknüpfung fehlt.
Kommentar hinterlassen