Abstammung im DAX – R-Marketing

Teilen auf Facebook
Teilen auf twittern
Teilen auf verlinktin
Teilen auf Telegramm
Teilen auf WhatsApp

Inhalt

Niveau: DazwischenliegendFortschrittlich

Ich habe das Thema Lineage im DAX in der Vergangenheit mehrmals behandelt (in anderen Artikeln). Heute dachte ich daran, einen einzigen Artikel zu schreiben, der der Linie gewidmet ist.

Woher willst du wissen?, Power BI verfügt über verschiedene Betriebsmodi, einige davon erfordern kein Laden von Daten in das Datenmodell. Dieser Artikel bezieht sich nicht auf Betriebsarten, die keine Daten laden; bezieht sich speziell auf die Verwendung von Power BI, wenn Daten in das Datenmodell geladen werden.

Was bedeutet die Abstammung??

Die Abstammung wird in . ausgesprochen 3 Silben: Abstammung (höre es hier gesprochen). Das Wort Abstammung am häufigsten verwendet, wenn es um die Blutlinie geht, was bedeutet "der lineare Abstieg eines Vorfahren"; Abstammung oder Extraktion". Mit dieser Definition im Hinterkopf, Abstammung in DAX bezieht sich auf virtuelle Tabellen (erstellt bei Laufzeitausführung innerhalb einer Formel) die eine Verbindung zu ihrer Herkunft behalten (sie bewahren ihre Abstammung). Dieses Konzept der Abstammung existiert in traditionellen Datenbanktools wie SQL und, Daher, es ist ziemlich einzigartig für DAX.

Physische Tabellen und Beziehungen in DAX

Bevor wir zum Thema Abstammung übergehen, Es lohnt sich, sich einen Moment Zeit zu nehmen, um über physische Tabellen und Beziehungen nachzudenken, da das Verständnis ihrer Funktionsweise entscheidend für das Verständnis der Abstammung ist. Beim Hochladen von Daten in Power BI oder Power Pivot, Daten werden mit einem von mehreren verschiedenen Ansätzen in physische Tabellen geladen, einschließlich Power Query, Daten und neue Tabelle eingeben (Power BI), Power-Abfrage, Verknüpfte Tabellen oder Power Pivot-Daten. Belastung (Excel). Während des Ladevorgangs, Daten werden zuerst komprimiert und dann in den RAM innerhalb der Vertipaq Storage Engine geladen.

Sobald die Daten geladen sind, es ist möglich, Beziehungen zwischen Tabellen wie unten gezeigt zu erstellen.

image_thumb-14-1353366

Diese Beziehungen sind im DAX sehr wichtig; sind diejenigen, die es den Daten aus den verschiedenen Tabellen ermöglichen, sich so zu verhalten, als ob sie in einer einzigen Tabelle wären. Die Art und Weise, wie Beziehungen funktionieren, kann trügerisch komplex sein und kann für Neueinsteiger in die DAX-Sprache ziemlich verwirrend sein.. Die wichtigsten zu verstehenden Konzepte sind

  • Kardinalität
    • Beziehungen sind immer 1 zu viel (es gibt auch einen Beziehungstyp von 1 ein 1, aber seine Verwendung ist nicht üblich).
    • Es gibt keine Unterstützung für viele oder viele Beziehungen im DAX.
  • Filterausbreitung
    • Beziehungen lassen Filter von der Seite fließen 1 von der Beziehung zur multiplen Seite der Beziehung, aber nicht umgekehrt.
    • Sie können die bidirektionale Kreuzfilterung für eine Beziehung aktivieren, aber trotzdem, das sprengt den Rahmen dieses Artikels.

super-charge-power-bi-ad_1-1024x128-6595595

Filtern Sie den Spread in Aktion

Demonstrieren Sie die oben genannten Kernpunkte besser an einem Beispiel. Verwenden des oben gezeigten Adventure Works-Datenmodells, Ich habe folgendes erstellt 2 Maße:

Gesamtumsatz = SUM (Der Umsatz[Erweiterter Betrag])

Produktanzahl = LÄNDER (Produkte)

Einzeltabellenfilterung

Die Matrix unten enthält die Produkte[Kategorie] Produkttabellenspalte in Zeilen in einer Matrix platziert und [Anzahl der Produkte] zum Lagerbereich hinzugefügt.

image_thumb-15-7764407

Die Produkte[Kategorie] Spalte und [Anzahl der Produkte] Messen Sie beide aus der Produkttabelle. Die Produkte[Kategorie] Spalte filtert die Tabelle Produkte und dann die Kennzahl "Anzahl".’ wie viele reihen. Technisch, der prozess funktioniert wie folgt:

  • Ein Filter wird erstellt und auf die Produkte angewendet[Kategorie] Säule. In diesem Fall, der Filter kommt von Rows in the Matrix, aber es könnte von einem Segmentierer kommen, anderes visuelles Element, der Filterkarte oder innerhalb einer RECHNUNGS-Funktion.
  • Nach dem Filtern der Spalte (und der ganze tisch), das [Anzahl der Produkte] zählt, wie viele Zeilen in der gefilterten Kopie der Tabelle für jede Zeile im Array vorhanden sind.

Mehrere Tabellen von einer auf viele filtern

Etwas komplexer wird es, wenn Spalten und Kennzahlen aus unterschiedlichen Tabellen stammen. Im Bild unten die [Gesamtumsatz] Die Kennzahl bezieht sich auf die Verkaufstabelle, aber die Filter (Matrixzeilen) kommen aus der Produkttabelle.

image_thumb-16-5092548

Technisch, der Prozess funktioniert jetzt wie folgt:

  • Ein Filter wird erstellt und auf die Produkte angewendet[Kategorie] Säule (Zeilen in der Matrix).
  • Denn es gibt eine physikalische Beziehung von 1 zu vielen unter den Produkten
    Tisch und Verkaufstisch, Der Filter “es breitet sich aus” aus der Produkttabelle
    zum Verkaufstisch. Alle Produkte, die zu jedem Produkt gehören[Kategorie]
    in der Verkaufstabelle, Daher, werden auch für jede Zeile der Matrix gefiltert.
  • Messen [Gesamtumsatz] Dann wird es für jede Zeile in der Matrix ausgewertet und
    gibt nur Verkäufe für die gefilterten Produkte zurück, die Datensätze in der
    Verkaufstisch.

Notiz: Es gibt 189 Komponenten in der Tabelle Produkte, die keine Verkäufe für diese Produkte haben. Das kann passieren, Natürlich.

Tabellen filtern nicht automatisch rückwärts

Beziehungen werden immer automatisch von einer Beziehungsseite zur vielen Seite gefiltert, wie oben gezeigt, aber sie lecken nicht in die andere richtung. Um den Punkt zu beweisen, Ich habe die Produkte entfernt[Kategorie] Matrixspalte unten und aggregierter Umsatz[Auftragsdatum] stattdessen.

image_thumb-17-6887968

Technisch, der Prozess funktioniert jetzt wie folgt:

  • Ein Filter wird erstellt und auf Verkäufe angewendet[Auftragsdatum] Säule (Zeilen in der Matrix).
  • Es gibt eine körperliche Beziehung von vielen zu 1 zwischen der Verkaufstabelle und der Produkttabelle. Filter sind nicht “verbreiten” in diese Richtung und, Daher, Die Tabelle Sales wird gefiltert, die Tabelle Products jedoch nicht.
  • Mittel [Anzahl der Produkte] Ja [Gesamtumsatz] dann werden sie in ihren jeweiligen Tabellen ausgewertet und geben die oben gezeigten Ergebnisse zurück.

Natürlich, Die bidirektionale Kreuzfilterung kann in Power BI Desktop aktiviert werden, wodurch die Filter gezwungen werden, sich hin und her zu verbreiten, aber es gibt viele Gründe, es nicht zu tun, einschließlich potenzieller negativer Auswirkungen auf die Leistung. als potenzielle Probleme mit zirkulären Beziehungen.

Die DAX-Sprache

Tabellen und Skalarwerte

  • Wenn Sie eine Kennzahl oder eine berechnete Spalte in DAX schreiben, das Ergebnis muss immer ein skalarer Wert sein. Eine Kennzahl und eine berechnete Spalte können keine Tabelle als Endergebnis zurückgeben. Beachten Sie, dass Sie die Messergebnisse in einer Grafik wie einer Tabelle oder einem Array anzeigen können, aber der von der Kennzahl zurückgegebene Wert ist immer ein Skalarwert.
  • Sie können DAX als Abfragesprache verwenden, indem Sie ein geeignetes Abfragetool verwenden, como DAX Studio. Bei Verwendung von DAX als Abfragesprache, das Abfrageergebnis ist immer eine Tabelle. Eine DAX-Abfrage kann keinen Skalarwert zurückgeben. Beachten Sie, dass Sie einen Skalarwert als Ergebnis einer DAX-Abfrage anzeigen können, indem Sie zuerst eine einzeilige, einspaltige Tabelle erstellen und den Skalarwert in dieser Tabelle platzieren.

Tabellenfunktionen im DAX

  • Es gibt viele Funktionen, die Tabellen in DAX zurückgeben, auch wenn sie nicht als Endergebnis in einer Kennzahl oder Spalte zurückgegeben werden können. Beispiele sind ALLE, WERTE, FILTER, ABSTRAKT, um ein paar zu nennen.
  • Tabellenfunktionen bilden die Grundlage von DAX als Abfragesprache und können nativ verwendet werden, um die resultierende Tabelle in einem Abfragetool zurückzugeben.
  • Sie können Tabellenfunktionen auch mit der Funktion Neue Tabelle in Power BI verwenden, um eine neue physische Tabelle im Datenmodell zu erstellen.
  • Sie können Tabellenfunktionen innerhalb von Kennzahlen und berechneten Spalten verwenden, um das erforderliche Ergebnis zu generieren, solange das Ergebnis ein Skalarwert ist.

Sehen wir uns ein Beispiel an. Die folgende Kennzahl gibt einen Skalarwert zurück: Gesamtumsatz in Australien. Aber trotzdem, Beachten Sie, dass die Zeile 4 unten ist eine Tabellenfunktion, in diesem Fall FILTER.

image_thumb-18-2179699

Die Funktion FILTER verwendet eine Tabelle als ersten Parameter (in diesem Fall die Gebietstabelle) und wenden Sie dann einen Filter auf die Tabelle an. Später, Die Funktion CALCULATE nimmt die gefilterte Kopie der Tabelle Territory und propagiert die Filter an die Tabelle Sales (durch die Beziehung von 1 zu viel). Die Linie 4 oben ist eine virtuelle Tabelle. Die Tabelle wird während der Ausführung der Formel im Speicher erstellt. Es wird verwendet, um die betreffende Aufgabe auszuführen. Wenn die Arbeit erledigt ist, der tisch hört auf zu existieren.

Notiz: Power BI verfügt über ausgeklügelte Caching-Funktionen und virtuelle Tabellen können zur Wiederverwendung in nachfolgenden Auswertungen im Cache verbleiben.

Virtuelle Tabellen und Abstammung in DAX

Sich einigen, genug über die Beziehung geredet, Was hat das mit Abstammung zu tun? ?!

Herkunft bezieht sich auf eine virtuelle Beziehung, die zwischen virtuellen Tabellen und physischen Tabellen in DAX besteht. Ein Mal noch, ein Beispiel ist der beste Weg, dies im Detail zu erklären. Folgendes berücksichtigen:

Die Gebietstabelle in Adventure Works sieht so aus.

image_thumb-19-6209700

Beachten Sie, dass Land eine Spalte ist, kein Tisch. Es gibt keine Tabelle mit allen eindeutigen Ländern in der Datenbank.

Betrachten Sie nun das folgende Maß:

Durchschnittlicher Rechnungswert = SPLIT ([Gesamtumsatz],[Gesamtrechnungen])

Wenn diese Kennzahl einer Tabelle mit Gebiet hinzugefügt wird[Land] in Reihen, Die Ergebnisse sind unten aufgeführt.

image_thumb-20-4573286

Aber hier ist der Punkt. Die Summe von $ 748,73 es ist nicht der Durchschnitt aller Werte für jedes Land, aber es ist der Durchschnitt aller Rechnungen in allen Ländern. Das ist nicht richtig oder falsch, es ist nur eine Tatsache, dass die Summe in diesem Beispiel der Durchschnittswert der Rechnung in allen Ländern ist. Also was ist, wenn ich das wissen will durchschnittlicher Rechnungswert nach Land und dann auch die Durchschnitt der Länderwerte. Die Antwort würde so aussehen.

image_thumb-21-8124041

Mit dieser zweiten Maßnahme, die gesamtheit von $ 758,76 ist der Durchschnitt aller oben genannten Länderdurchschnitte. Es ist nicht richtig oder falsch, es unterscheidet sich nur vom ersten Takt. Wenn Sie mit X-Funktionen vertraut sind, Sie werden wissen, dass Sie die Liste der Länder überprüfen müssen, um diese Antwort zu erhalten, eins nach dem anderen, und berechnen Sie den Durchschnitt für jedes Land, bevor Sie schließlich den Durchschnitt der Durchschnitte berechnen. . AVERAGEX ist eine großartige Funktion, um dies zu tun.

Die DAX-Formel, die ich verwendet habe, um diese zweite Kennzahl oben zu erstellen, lautet wie folgt::

image_thumb-22-9659364

Der erste Parameter innerhalb einer X-Funktion ist immer eine Tabelle oder Tabellenfunktion. In diesem Fall, ist eine VALUES-Funktion, die eine Liste aller eindeutigen Länder im aktuellen Filterkontext zurückgibt (Linie 3 hoch). Diese neue von VALUES erstellte Tabelle ist eine virtuelle Tabelle, die die Abstammung der Tabelle beibehält, aus der sie erstellt wurde. Mit anderen Worten, die virtuelle Tabelle kann als eine virtuelle Beziehung mit dem Territorium betrachtet werden.[Land] Spalte, wo er geboren wurde. Sie können es so betrachten (Bitte beachten Sie, dass dies eine Illustration ist, die Ihnen zeigt, wie Sie sich den virtuellen Tisch vorstellen können; in Wirklichkeit, man kann es dort nicht sehen und es existiert nie physisch).

image_thumb-23-4812736

In der Abbildung oben, die von VALUES erstellte virtuelle Tabelle wird blau dargestellt als 1, und die virtuelle Beziehung (Abstammung) Es wird angezeigt als 2. Keine von diesen 2 Dinge sind im Datenmodell physisch sichtbar, aber trotzdem, Sie können sie sich konzeptionell wie oben gezeigt vorstellen.

Hier nochmal die Formel.

image_thumb-24-6222195

Mit dem oben dargestellten konzeptionellen Modell im Hinterkopf, die obige DAX-Formel funktioniert wie folgt:

  • AVERAGEX erstellt einen Zeilenkontext über der virtuellen Tabelle, die von VALUES in der Zeile erstellt wurde 3.
  • Da für jede Kennzahl eine implizite Berechnung erforderlich ist, das [Durchschnittlicher Rechnungswert] Die Kennzahl erstellt einen Kontextübergang und wandelt den Zeilenkontext in einen Filterkontext um.
  • Jetzt gibt es einen Filterkontext im einzigartigen Land für die erste Iteration und, aufgrund der Abstammung zwischen der virtuellen VALUES-Tabelle und der Tabelle für das physische Hauptgebiet, der Filter wird über die Territory-Tabelle an die Sales-Tabelle weitergegeben.
  • Dann, die Kennzahl wird für die einzelne Zeile in der virtuellen VALUES-Tabelle ausgewertet.
  • Der Vorgang wird für jede Zeile der virtuellen Tabelle VALUES . wiederholt. Für jeden Schritt, die implizite Berechnung nutzt die Abstammung zwischen der virtuellen Tabelle und der physischen Tabelle.
  • Nachdem alle Zeilen der virtuellen Tabelle ausgewertet wurden, AVERAGEX findet den Durchschnitt aller Werte in den vorherigen Schritten.

Involvieren

Hoffentlich können Sie sehen, dass das Konzept der Abstammung sehr mächtig ist. Das bedeutet, dass Sie nicht für alles, was Sie in Ihren Berechnungen benötigen, physikalische Dimensionstabellen laden müssen. Stattdessen, Sie können virtuelle Tabellen im Handumdrehen in Ihren Formeln erstellen und, aber trotzdem, Machen Sie diese virtuellen Tabellen genau wie eine physische Tabelle und Relationen verhalten sich.

!Funktion(F,B,e,v,n,T,S)
{Wenn(f.fbq)Rückkehr;n=f.fbq=Funktion(){n.callMethode?
n.callMethod.apply(n,Argumente):n.queue.push(Argumente)};
Wenn(!f._fbq)f._fbq = n;n.drücken=n;n.geladen=!0;n.version=’2.0′;
n.Warteschlange=[];t=b.Element erstellen(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S)}(Fenster,dokumentieren,'Skript',
„https://connect.facebook.net/en_US/fbevents.js’);
fbq('drin', ‘639916389503636’);
fbq('nachverfolgen', 'Seitenansicht');

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.

Error: Alarm: Alarm !!