DAX CALCULATETABLE vs. FILTER-Funktion

Sowohl als auch sind leistungsstarke Tools zum Bearbeiten und Analysieren von Daten in DAX-Abfragen, weisen jedoch einige wichtige Unterschiede auf, die es zu verstehen gilt.

In diesem Blog gehen wir auf die Funktion CALCULATETABLE und ihren Abfrageplan in DAX Studio ein und verstehen, wie sie sich von der Funktion FILTER unterscheidet . Am Ende werden Sie besser verstehen, wie Sie die richtige Funktion für Ihre Datenanalyseanforderungen auswählen.

Zur Veranschaulichung verwenden wir den folgenden DAX-Code.

DAX CALCULATETABLE vs. FILTER-Funktion

Wenn Sie diesen Code ausführen, erhalten Sie eine Tabelle mit Marke und Farbe.

DAX CALCULATETABLE vs. FILTER-Funktion

Auf der Registerkarte „Abfragepläne“ erhalten Sie einen Code, der dem CrossApply- Operator in der Formel-Engine entspricht .

DAX CALCULATETABLE vs. FILTER-Funktion

Gleichzeitig können Sie sehen, dass der Code nur die Produktfarbe und -marke auf der Registerkarte „Server-Timings“ abruft .

DAX CALCULATETABLE vs. FILTER-Funktion

Inhaltsverzeichnis

DAX Studio Server-Timings-Ergebnis für CALCULATETABLE

Filtern wir beispielsweise die Produktfarbe so, dass nur Rot und/oder Schwarz angezeigt wird.

Sie können dies tun, indem Sie die FILTER-Funktion verwenden. Wenn Sie es ausführen, zeigen die Server-Timings an, dass das FILTER-Argument nicht auf den xmSQL-Code angewendet wird .

DAX CALCULATETABLE vs. FILTER-Funktion

Wenn Sie jedoch die Funktion CALCULATETABLE verwenden, zeigt die Abfrage auf der Registerkarte „Server-Timings“ an, dass die Ergebnisse nach Produktfarbe gefiltert wurden.

DAX CALCULATETABLE vs. FILTER-Funktion

BERECHNBARER Abfrageplan in DAX Studio

Schauen wir uns den Abfrageplan für jede Funktion an.

Die CALCULATETABLE befindet sich in der ersten Zeile des logischen Abfrageplans, da es sich um eine Funktion der obersten Ebene im Code handelt und daher nicht von irgendwelchen Anforderungen abhängt.

DAX CALCULATETABLE vs. FILTER-Funktion

Wenn Sie den Abfrageplan einer CALCULATETABLE-Funktion lesen, beginnen Sie nicht mit dem ersten Argument. Sie müssen zunächst den verwendeten Filterkontext verstehen. Gehen wir also zu Zeile 5.

Sie können sehen, dass der VertiPaq- Operator aufgrund des angewendeten Filters die Spalte „Produktfarbe“ benötigt. Anschließend wird diese Spalte gescannt und mithilfe der Filterkombination „Not IsEmpty“ die Produktfarbe anhand jeder Zeile überprüft.

Nachdem der Filterkontext vorbereitet wurde, wird das Argument ausgeführt.

Wenn Sie im Nachhinein die FILTER-Funktion verwenden, sehen Sie einen anderen Abfrageplan, sodass das CROSSJOIN-Argument vor der Identifizierung des Filterkontexts ausgeführt wird.

DAX CALCULATETABLE vs. FILTER-Funktion

Der Nachteil dieses Ansatzes besteht darin, dass die Filterbedingung nicht an die Speicher-Engine übertragen wird. Sie können die WHERE- Klausel nicht in xmSQL verwenden, was die Formel-Engine stark belastet.

Und wenn Sie mit mehreren Tabellen arbeiten, ist die Filterkombination der CROSSJOIN-Funktion sehr umfangreich. Dies verlangsamt die Leistung des DAX-Codes. Daher empfiehlt es sich in den meisten Fällen, die Funktion CALCULATETABLE zu verwenden.

Anstatt also alle Berechnungen in der Formel-Engine durchzuführen, können Sie die Filterbedingung in die WHERE-Klasse des XMSQL-Codes einfügen.

Kontextübergang für ähnliche DAX-Funktionen

Server-Timings

Dieses Konzept ist auch auf die CALCULATE-Funktion anwendbar. Nehmen wir den folgenden DAX-Code als Beispiel.

DAX CALCULATETABLE vs. FILTER-Funktion

Eine Kennzahl ist automatisch von einer CALCULATE-Funktion umgeben.

Wenn Sie diesen Code ausführen, erhalten Sie eine Tabelle mit dem Gesamtverkaufsbetrag für jede Farbe.

DAX CALCULATETABLE vs. FILTER-Funktion

Auf der Registerkarte „Server-Timings“ können Sie sehen, dass der Code zwei Abfragen ausführt. Die erste Abfrage berechnet die Summe des Verkaufsbetrags aus der Tabelle „Sales“ in Bezug auf die Tabelle „Products“.

DAX CALCULATETABLE vs. FILTER-Funktion

Andererseits ruft die zweite Abfrage die Produktfarbe erneut aus der Tabelle „Products“ ab. Es entspricht der Funktion im DAX-Code.

DAX CALCULATETABLE vs. FILTER-Funktion

Die Formel-Engine platziert die Datencaches der beiden Abfragen nebeneinander. Es beginnt mit dem Abrufen der Werte aus dem zweiten Datencache und führt dann eine Suche im ersten Datencache durch.

Abfrageplan

Auf der Registerkarte „Abfrageplan“ scannt der logische Abfrageplan die Produktfarbe aufgrund des Arguments.

Dann summiert VertiPaq den Gesamtverkaufsbetrag abhängig von der Produktfarbe. Es führt den Kontextübergang durch, der den Produktfarbwert in einen äquivalenten Filterkontext umwandelt.

DAX CALCULATETABLE vs. FILTER-Funktion

Der durch den Kontextübergang erstellte Filter wird im Abfrageplan in eine DependOnCols- Eigenschaft übersetzt. Nachdem VertiPaq die zur Berechnung des Gesamtumsatzes erforderlichen Spalten gescannt hat, multipliziert es die Verkaufsmenge mit dem Nettopreis.

Als Ergebnis werden dann die Gesamtumsätze in Form eines Währungsdatentyps zurückgegeben. Und schließlich gibt ADDCOLUMNS eine Tabelle mit zwei Spalten zurück, die die Farbe und den Gesamtverkaufsbetrag enthalten.

Abschluss

Der Abfrageplan kann einen erheblichen Einfluss auf die Leistung einer Abfrage haben, da unterschiedliche Abfragepläne unterschiedliche Effizienzgrade aufweisen können.

Wenn Sie die Funktionen CALCULATETABLE und FILTER in einer DAX-Abfrage verwenden, kann der Abfrageplan je nach dem spezifischen Szenario und einer Vielzahl von Faktoren, wie z. B. dem spezifischen verwendeten Formelausdruck und den Fähigkeiten der Abfrage-Engine, unterschiedlich sein.

Im Allgemeinen empfiehlt es sich, die Leistung verschiedener Abfragepläne zu testen und zu vergleichen, um den effizientesten Ansatz für ein bestimmtes Szenario zu ermitteln.

Alles Gute,

Leave a Comment

Streudiagramm-Visualisierungen mit Charticulator

Streudiagramm-Visualisierungen mit Charticulator

In diesem Tutorial erfahren Sie, wie Sie mit Charticulator eine Streudiagramm-Visualisierung für Ihren LuckyTemplates-Bericht erstellen und entwerfen.

PowerApps-Suchfeld: So fügen Sie es hinzu und passen es an

PowerApps-Suchfeld: So fügen Sie es hinzu und passen es an

Erfahren Sie, wie Sie ein PowerApps-Suchfeld von Grund auf erstellen und es an das Gesamtthema Ihrer App anpassen.

Power Automate String-Funktionen: Substring und IndexOf

Power Automate String-Funktionen: Substring und IndexOf

Erlernen Sie ganz einfach zwei komplizierte Power Automate String-Funktionen, die in Microsoft Flows verwendet werden können – die Funktionen substring und indexOf.

Power Query M: Abwechselndes 0-1-Muster in der Datumstabelle

Power Query M: Abwechselndes 0-1-Muster in der Datumstabelle

Dieses Tutorial konzentriert sich auf die Power Query M-Funktion „number.mod“, um ein abwechselndes 0-1-Muster in der Datumstabelle zu erstellen.

Prognosetechnik: Erkundung der Prognoselogik in LuckyTemplates-Modellen

Prognosetechnik: Erkundung der Prognoselogik in LuckyTemplates-Modellen

In diesem Tutorial führe ich eine Prognosetechnik durch, bei der ich meine tatsächlichen Ergebnisse mit meinen Prognosen vergleiche und sie kumulativ betrachte.

Speichern Sie E-Mail-Anhänge in SharePoint mit Power Automate

Speichern Sie E-Mail-Anhänge in SharePoint mit Power Automate

In diesem Blog erfahren Sie, wie Sie mit Power Automate E-Mail-Anhänge automatisch in SharePoint speichern und E-Mails anschließend löschen.

Führen Sie eine Bis-Loop-Steuerung in Power Automate durch

Führen Sie eine Bis-Loop-Steuerung in Power Automate durch

Erfahren Sie, wie die Do Until Schleifensteuerung in Power Automate funktioniert und welche Schritte zur Implementierung erforderlich sind.

Berechnen eines gleitenden Durchschnitts in LuckyTemplates mithilfe von DAX

Berechnen eines gleitenden Durchschnitts in LuckyTemplates mithilfe von DAX

In diesem Tutorial erfahren Sie, wie Sie mithilfe der ALLSELECTED-Funktion einen dynamischen gleitenden Durchschnitt in LuckyTemplates berechnen können.

Berechnen Sie dynamisch eine laufende oder kumulative LuckyTemplates-Summe

Berechnen Sie dynamisch eine laufende oder kumulative LuckyTemplates-Summe

Durch diesen Artikel erhalten wir ein klares und besseres Verständnis für die dynamische Berechnung einer laufenden oder kumulativen Gesamtsumme in LuckyTemplates.

Power Automate auf jede Aktion in Workflows anwenden

Power Automate auf jede Aktion in Workflows anwenden

Erfahren und verstehen Sie die Bedeutung und ordnungsgemäße Verwendung der Power Automate-Aktionssteuerung „Auf jede anwenden“ in unseren Microsoft-Workflows.