IF und Filter sind unterschiedlich! Seien Sie vorsichtig (DAX) (2024)

DAX verfügt über viele Funktionen zum Schreiben bedingter Ausdrücke. Beispielsweise möchten Sie möglicherweise die Summe der Verkaufsbeträge für alle „roten“ Produkte berechnen. Sie können dies erreichen, indem Sie SUMX oder Calculate sowie Funktionen wie IF oder Filter verwenden, um einen bedingten Ausdruck dafür zu schreiben, dass die Produktfarbe gleich „Rot“ ist. Auf den ersten Blick könnte man meinen, dass diese Funktionen in der Ergebnismenge gleich sind, aber es gibt einen Unterschied, der nicht übersehen werden sollte. In diesem Beitrag erkläre ich, welche Art von Problem auftreten kann, wenn Sie diese Funktionen nicht mit Bedacht nutzen. Wenn Sie mehr über Power BI erfahren möchten; lesenPower BI-Buch vom Rookie zum Rockstar.

Voraussetzung

Um dieses Beispiel auszuführen, benötigen Sie eine Kopie der AdventureWorksDW-Datenbank in SQL Server, oder Sie können die Excel-Version hier herunterladen:

    WENN

    „IF“ ist eine bedingte Filterausdrucksfunktion für DAX. Sie können einfach einen bedingten Ausdruck schreiben, der die Teile Then und Else enthält. Mit dieser Syntax funktioniert es einfach;

    IF(, , )

    Filter

    „Filter“ ist eine Funktion, die Datensätze basierend auf einem benutzerdefinierten Filter filtert. Sie können beispielsweise nur Produkte mit der Farbe „Rot“ filtern. Hier ist ein Beispiel für einen Filterausdruck;

    FILTER( , )

    Für dieses Beispiel müssen Sie FactInternetSales und DimProduct in Ihr Power BI-Modell integrieren. Die Beziehung zwischen diesen Tabellen sollte automatisch von Power BI erkannt werden. Es sollte auf ProductKey zwischen zwei Tabellen basieren. So sieht die Beziehung aus;

    Es gibt mehrere Möglichkeiten, die bedingte Summe in DAX zu berechnen. Sie können SUMX oder CALCULATE verwenden. Beide Funktionen berechnen einen Ausdruck (in diesem Fall wäre es die Summe der Verkaufsbeträge von FactInternetSales), basierend auf einem Filter (der unser bedingter Ausdruck wäre, um „rote“ Produkte zu finden). In diesem Beispiel werde ich SUMX verwenden, aber das gleiche Konzept gilt auch für die Berechnungsfunktion. So können Sie SUMX zur Berechnung der Summe „roter“ Produkte verwenden:

    Methode 1 – SumX mit FILTER

    Bei der ersten Methode kann ich den SUMX-Ausdruck verwenden und den Datensatz so filtern, dass er nur „rote“ Produkte enthält. Erstellen Sie mit diesem Ausdruck eine neue Kennzahl in FactInternetSales.

    Summe der roten Produkte – mit Filter = SUMX( FILTER(FactInternetSales, RELATED(DimProduct[Color])='Red'),FactInternetSales[SalesAmount])

    Wie Sie im obigen Ausdruck sehen können, habe ich eine einfache FILTER-Funktion verwendet, um alles in FactInternetSales zu filtern, wenn Farbe oder Produkt „Rot“ ist. Ich habe die RELATED-Funktion verwendet, weil Color eine Spalte in DimProduct ist und die Related Function die Beziehung von Many (FactInternetSales) zu One (DimProduct) durchläuft und es uns ermöglicht, die Filterung basierend auf einer Spalte in einer zugehörigen Tabelle durchzuführen.

    Methode 2 – SumX mit IF

    Mit SUMX und der IF-Bedingung können wir zusammen dasselbe Ergebnis erzielen. In diesem Fall kommt die Bedingung als IF-Anweisung im Ausdrucksteil von SUMX. Hier ist der Code der neuen Maßnahme;

    Summe der roten Produkte – mit IF = SUMX( FactInternetSales,IF(RELATED(DimProduct[Color])='Red',FactInternetSales[SalesAmount],0) )

    Anstatt Daten mit der FILTER-Funktion zu filtern, habe ich in diesem Ausdruck einen bedingten Ausdruck verwendet, um zu identifizieren, ob die Farbe des Produkts „Rot“ ist oder nicht. Wenn es „Rot“ ist, verwende ich SalesAmount für die Summenberechnung, andernfalls verwende ich Null (bedeutet, dass keine Zusammenfassung für andere Produktfarben erfolgt).

    Methode 3 – Berechnen mit einfachem bedingtem Ausdruck

    Es gibt viele andere Methoden zur Berechnung der bedingten Summe, aber ich füge nur diese hinzu, weil sie anders aussieht; Wenn ich die Funktion „Berechnen“ mit einem einfachen Ausdruck verwende, um die Farbe des Produkts als neues Maß zu überprüfen;

    Summe der roten Produkte – Einfachen Ausdruck berechnen = CALCULATE( SUM(FactInternetSales[SalesAmount]), DimProduct[Color]='Red')

    Das Schreiben von DimProduct[Color]=“Red“ auf diese Weise ähnelt dem Schreiben einer Bedingung für jeden Ergebnissatz. Das Endergebnis ist die Summe der roten Produkte.

    Testergebnisse – ähnlich

    Wenn Sie beide Kennzahlen als Tabellenvisual in Power BI einbinden, sehen Sie, dass die Ergebnisse beider identisch sind, und der Gesamtverkaufsbetrag für Produkte mit der Farbe „Rot“ wird korrekt angezeigt.

    Unterschiedliche Ergebnisse

    Das Ergebnis für die Kennzahl ist vollkommen ähnlich. Wenn Sie jedoch eine dieser Kennzahlen für einen Datensatz verwenden, werden Sie feststellen, dass das Ergebnis des Datensatzes unterschiedlich ist und das Ergebnis erheblich verändert. Wenn Sie beispielsweise „Summe roter Produkte – mit Filter“ nur in einer Tabelle mit „Farbe“ von DimProduct verwenden, sehen Sie Folgendes:

    Wenn Sie „Sum of Red Products – With IF“ nur in einer Tabelle mit „Color“ von DimProduct verwenden, werden Sie ein anderes Ergebnis sehen;

    In beiden Fällen ist die Gesamtsumme ähnlich. Allerdings filtert die Tabelle mit einem FILTER-Maß den Datensatz automatisch und zeigt nur den Ergebnissatz für RED-Produkte an, während die zweite Tabelle mit IF-Maß alle Produkte mit Null vor allen Farben außer Rot anzeigt. Diese beiden sind aus Benutzersicht SEHR unterschiedlich, während der endgültige Gesamtwert ähnlich ist. Der Grund dafür ist, dass IF lediglich einen bedingten Ausdruck auf den Ergebnissatz anwendet, während FILTER anders funktioniert und den Datensatz nach dem benutzerdefinierten Filterausdruck filtert. Beachten Sie, dass in diesem Beispiel kein visueller, Berichts- oder Seitenebenenfilter angewendet wird. Die Filterung erfolgte automatisch aufgrund der FILTER-Funktion.

    Wenn Sie das Ergebnis der letzten Methode in eine Tabelle eintragen (Summe der roten Produkte – Einfachen Ausdruck berechnen), sehen Sie, dass die Berechnung in jeder Zeile der Ergebnismenge erfolgt. Der Datensatz wird nicht gefiltert, aber der Filter wird auf die Berechnung des Endergebnisses für jede Zeile angewendet.

    Wie in vielen anderen Situationen; Es hängt davon ab, ob! Interessieren Sie sich nur für das Endergebnis (in diesem Beispiel die Summe der Verkaufsbeträge für „rote“ Produkte)? Wenn ja, liefert FILTER schnellere Ergebnisse, da zunächst der Datensatz gefiltert und dann SUM darauf angewendet wird. Wenn Sie jedoch eine detaillierte Ansicht der Datensätze anzeigen möchten, filtert die FILTER-Funktion auch den Datensatz, was möglicherweise nicht das ist, was Sie möchten. In diesen Fällen würde IF Ihnen die richtige Antwort geben. Wenn Sie den Prozentsatz für jede Zeile berechnen möchten, generiert die Berechnungsmethode möglicherweise ein zuverlässigeres Ergebnis. Beachten Sie, dass an diesen Funktionen nichts auszusetzen ist, sie funktionieren genau so, wie sie sollten. Wenn Sie ihr tatsächliches Verhalten jedoch nicht kennen, kann dies zu Verwirrung bei Ihnen und Ihren Benutzern führen. Setzen Sie sie also mit Bedacht ein und übersehen Sie nicht ihre Unterschiede.

    Herunterladen

    Sie können die Power BI-Demodatei hier herunterladen:

      Speichern

      Speichern

      IF und Filter sind unterschiedlich! Seien Sie vorsichtig (DAX) (6)IF und Filter sind unterschiedlich! Seien Sie vorsichtig (DAX) (7)IF und Filter sind unterschiedlich! Seien Sie vorsichtig (DAX) (8)IF und Filter sind unterschiedlich! Seien Sie vorsichtig (DAX) (9)

      Reza Rad

      Trainer, Berater, Mentor

      Reza Rad ist Microsoft Regional Director, Autor, Trainer, Redner und Berater. Er hat einen BSc in Computertechnik; Er verfügt über mehr als 20 Jahre Erfahrung in den Bereichen Datenanalyse, BI, Datenbanken, Programmierung und Entwicklung, hauptsächlich mit Microsoft-Technologien. Aufgrund seines Engagements für Microsoft BI ist er seit 12 Jahren (von 2011 bis heute) Microsoft Data Platform MVP. Reza ist ein aktiver Blogger und Mitbegründer von RADACAD. Reza ist außerdem Mitbegründer und Mitorganisator der Difinity-Konferenz in Neuseeland, des Power BI Summit und des Data Insight Summit.
      Reza ist Autor von mehr als 14 Büchern über Microsoft Business Intelligence, die meisten dieser Bücher werden in der Kategorie Power BI veröffentlicht. Darunter sind Bücher wie „Power BI DAX Simplified“, „Pro Power BI Architecture“, „Power BI from Rookie to Rock Star“, die Buchreihe „Power Query“, „Row-Level Security in Power BI“ usw.
      Er ist ein internationaler Redner bei Microsoft Ignite, Microsoft Business Applications Summit, Data Insight Summit, PASS Summit, SQL Saturday und SQL-Benutzergruppen. Und er ist ein von Microsoft zertifizierter Trainer.
      Rezas Leidenschaft ist es, Ihnen bei der Suche nach der besten Datenlösung zu helfen. Er ist ein Daten-Enthusiast.
      Seine Artikel zu verschiedenen Aspekten von Technologien, insbesondere zu MS BI, finden Sie in seinem Blog: https://radacad.com/blog.

      IF und Filter sind unterschiedlich! Seien Sie vorsichtig (DAX) (2024)

      References

      Top Articles
      Latest Posts
      Article information

      Author: Lakeisha Bayer VM

      Last Updated:

      Views: 6254

      Rating: 4.9 / 5 (49 voted)

      Reviews: 88% of readers found this page helpful

      Author information

      Name: Lakeisha Bayer VM

      Birthday: 1997-10-17

      Address: Suite 835 34136 Adrian Mountains, Floydton, UT 81036

      Phone: +3571527672278

      Job: Manufacturing Agent

      Hobby: Skimboarding, Photography, Roller skating, Knife making, Paintball, Embroidery, Gunsmithing

      Introduction: My name is Lakeisha Bayer VM, I am a brainy, kind, enchanting, healthy, lovely, clean, witty person who loves writing and wants to share my knowledge and understanding with you.