Leitfaden zu bidirektionalen BeziehungenBi-directional relationship guidance

Dieser Artikel ist an Modellierer von Daten gerichtet, die mit Power BI Desktop arbeiten.This article targets you as a data modeler working with Power BI Desktop. Er bietet Empfehlungen dazu, wann bidirektionale Modellbeziehungen erstellt werden sollten.It provides you with guidance on when to create bi-directional model relationships. Eine bidirektionale Beziehung ist eine Beziehung, in der in beide Richtungen gefiltert wird.A bi-directional relationship is one that filters in both directions.

Hinweis

Dieser Artikel enthält jedoch keine Einführung zu Modellbeziehungen.An introduction to model relationships is not covered in this article. Wenn Sie sich bisher noch wenig mit Beziehungen, ihren Eigenschaften und ihrer Konfiguration beschäftigt haben, sollten Sie sich zuerst den Artikel Modellieren von Beziehungen in Power BI Desktop durchlesen.If you're not completely familiar with relationships, their properties or how to configure them, we recommend that you first read the Model relationships in Power BI Desktop article.

Außerdem sollten Sie mit dem Sternschemadesign gut vertraut sein.It's also important that you have an understanding of star schema design. Weitere Informationen finden Sie im Artikel Informationen zum Sternschema und der Wichtigkeit für Power BI.For more information, see Understand star schema and the importance for Power BI.

Im Allgemeinen empfiehlt es sich, die Verwendung von bidirektionalen Beziehungen zu minimieren.Generally, we recommend minimizing the use of bi-directional relationships. Diese können sich negativ auf die Abfrageleistung von Modellen auswirken und möglicherweise verwirrende Ergebnisse für Ihre Berichtsbenutzer erzeugen.They can negatively impact on model query performance, and possibly deliver confusing experiences for your report users.

Es gibt drei Szenarien, in denen eine bidirektionale Filterung bestimmte Anforderungen erfüllen kann:There are three scenarios when bi-directional filtering can solve specific requirements:

Besondere ModellbeziehungenSpecial model relationships

Bidirektionale Beziehungen spielen beim Erstellen der folgenden beiden besonderen Modellbeziehungen eine wichtige Rolle:Bi-directional relationships play an important role when creating the following two special model relationship types:

  • 1:1-Beziehung: Alle 1:1-Beziehungen müssen bidirektional sein, eine anderweitige Konfiguration ist nicht möglich.One-to-one: All one-to-one relationships must be bi-directional—it isn't possible to configure otherwise. Im Allgemeinen empfiehlt es sich nicht, diese Arten von Beziehungen zu erstellen.Generally, we don't recommend creating these types of relationships. Eine vollständige Erläuterung und alternative Entwürfe finden Sie im Leitfaden zu 1:1-Beziehungen.For a complete discussion and alternative designs, see One-to-one relationship guidance.
  • m:n-Beziehung: Wenn zwei Dimensionstabellen miteinander in Beziehung gesetzt werden sollen, ist eine Überbrückungstabelle erforderlich.Many-to-many: When relating two dimension-type tables, a bridging table is required. Um sicherzustellen, dass Filter über diese Überbrückungstabelle hinweg weitergegeben werden, ist ein bidirektionaler Filter erforderlich.A bi-directional filter is required to ensure filters propagate across the bridging table. Weitere Informationen finden Sie im Leitfaden zu m:n-Beziehungen (Herstellen von m:n-Beziehungen zwischen Dimensionen).For more information, see Many-to-many relationship guidance (Relate many-to-many dimensions).

Slicerelemente „mit Daten“Slicer items "with data"

Bidirektionale Beziehungen können Slicer bereitstellen, die Elemente auf das Vorhandensein von Daten beschränken.Bi-directional relationships can deliver slicers that limit items to where data exists. (Wenn Sie mit PivotTables in Excel und Slicern vertraut sind: Es handelt sich um das Standardverhalten beim Abrufen von Daten aus einem Power BI-Dataset oder einem Analysis Services-Modell.) Um dieses Konzept zu verstehen, sehen Sie sich zunächst das folgende Modellschaubild an.(If you're familiar with Excel PivotTables and slicers, it's the default behavior when sourcing data from a Power BI dataset, or an Analysis Services model.) To help explain what it means, first consider the following model diagram.

Diagramm mit einem Modell, das drei Tabellen enthält

Die erste Tabelle heißt Customer und enthält drei Spalten: Country-Region, Customer und CustomerCode.The first table is named Customer, and it contains three columns: Country-Region, Customer, and CustomerCode. Die zweite Tabelle heißt Product und enthält drei Spalten: Color, Product und SKU.The second table is named Product, and it contains three columns: Color, Product, and SKU. Die dritte Tabelle heißt Sales und enthält vier Spalten: CustomerCode, OrderDate, Quantity und SKU.The third table is named Sales, and it contains four columns: CustomerCode, OrderDate, Quantity, and SKU. Bei den Tabellen Customer und Product handelt es sich um Dimensionstabellen, und jede Tabelle verfügt über eine 1:n-Beziehung mit der Tabelle Sales.The Customer and Product tables are dimension-type tables, and each has a one-to-many relationship to the Sales table. Jede Beziehung filtert nur in eine Richtung.Each relationship filters in a single direction.

Um die Funktionsweise der bidirektionalen Filterung besser zu beschreiben, wurde das Modellschaubild so angepasst, dass die Tabellenzeilen angezeigt werden.To help describe how bi-directional filtering works, the model diagram has been modified to reveal the table rows. Alle Beispiele in diesem Artikel basieren auf diesen Daten.All examples in this article are based on this data.

Hinweis

Im Modellschaubild in Power BI Desktop können Tabellenzeilen nicht angezeigt werden.It's not possible to display table rows in the Power BI Desktop model diagram. In diesem Artikel wurde das nur getan, um die die Beispiele besser verständlich zu machen.It's done in this article to support the discussion with clear examples.

Diagramm des Modells, in dem nun die Tabellenzeilen angezeigt werden

In der folgenden Aufzählung werden die Details zu den Zeilen der drei Tabellen erläutert:The row details for the three tables are described in the following bulleted list:

  • Die Tabelle Customer hat zwei Zeilen:The Customer table has two rows:
    • CustomerCode: CUST-01, Customer: Customer-1, Country-Region: United StatesCustomerCode CUST-01, Customer Customer-1, Country-Region United States
    • CustomerCode: CUST-02, Customer: Customer-2, Country-Region: AustraliaCustomerCode CUST-02, Customer Customer-2, Country-Region Australia
  • Die Tabelle Product enthält drei Zeilen:The Product table has three rows:
    • SKU: CL-01, Product: T-shirt, Color: GreenSKU CL-01, Product T-shirt, Color Green
    • SKU: CL-02, Product: Jeans, Color: BlueSKU CL-02, Product Jeans, Color Blue
    • SKU: AC-01, Product: Hat, Color: BlueSKU AC-01, Product Hat, Color Blue
  • Die Tabelle Sales enthält drei Zeilen:The Sales table has three rows:
    • OrderDate: January 1 2019, CustomerCode: CUST-01, SKU: CL-01, Quantity: 10OrderDate January 1 2019, CustomerCode CUST-01, SKU CL-01, Quantity 10
    • OrderDate: February 2 2019, CustomerCode: CUST-01, SKU: CL-02, Quantity: 20OrderDate February 2 2019, CustomerCode CUST-01, SKU CL-02, Quantity 20
    • OrderDate: March 3 2019, CustomerCode: CUST-02, SKU: CL-01, Quantity: 30OrderDate March 3 2019, CustomerCode CUST-02, SKU CL-01, Quantity 30

Betrachten Sie nun die folgende Berichtsseite.Now consider the following report page.

Diagramm mit der Berichtsseite, die drei Visuals enthält

Die Seite besteht aus zwei Slicern und einem Kartenvisual.The page consists of two slicers and a card visual. Der erste Slicer gilt für Country-Region und enthält zwei Elemente: Australia und United States.The first slicer is for Country-Region and it has two items: Australia and United States. Zurzeit wird nach „Australia“ segmentiert.It currently slices by Australia. Der zweite Slicer gilt für Product und enthält drei Elemente: Hat, Jeans und T-shirt.The second slicer is for Product, and it has three items: Hat, Jeans, and T-shirt. Es sind keine Elemente ausgewählt (was bedeutet, dass keine Produkte gefiltert werden).No items are selected (meaning no products are filtered). Das Kartenvisual zeigt eine Menge von 30 an.The card visual displays a quantity of 30.

Wenn Berichtsbenutzer nach „Australia“ segmentieren, sollten Sie den Slicer Product so begrenzen, dass Elemente angezeigt werden, die sich auf Verkäufe in Australien beziehen.When report users slice by Australia, you might want to limit the Product slicer to display items where data relates to Australian sales. Das ist gemeint, wenn von der Anzeige von Slicerelementen „mit Daten“ die Rede ist.It's what's meant by showing slicer items "with data". Sie können dieses Verhalten erreichen, indem Sie die Beziehung zwischen den Tabellen Product und Sales so konfigurieren, dass eine Filterung in beide Richtungen erfolgt.You can achieve this behavior by configuring the relationship between the Product and Sales table to filter in both directions.

Diagramm mit einem Modell, in dem die Beziehung zwischen den Tabellen „Product“ und „Sales“ jetzt bidirektional ist

Der Slicer Product listet jetzt ein einziges Element auf: T-shirt.The Product slicer now lists a single item: T-shirt. Dieses Element repräsentiert das einzige Produkt, das an australische Kunden verkauft wurde.This item represents the only product sold to Australian customers.

Diagramm mit der Berichtsseite, die drei Visuals enthält, mit „Product“ als Legende. Die Details werden im folgenden Abschnitt erläutert.

Zunächst sollten Sie gründlich darüber nachdenken, ob dieser Entwurf für Ihre Berichtsbenutzer funktioniert.We first suggest you consider carefully whether this design works for your report users. Für einige Berichtsbenutzer kann dieses Verhalten verwirrend sein.Some report users find the experience confusing. Sie verstehen nicht, warum Slicerelemente dynamisch ein- oder ausgeblendet werden, wenn sie mit anderen Slicern interagieren.They don't understand why slicer items dynamically appear or disappear when they interact with other slicers.

Wenn Sie sich dafür entscheiden, Slicerelemente „mit Daten“ anzuzeigen, empfiehlt sich die Konfiguration von bidirektionalen Beziehungen nicht.If you do decide to show slicer items "with data", we don't recommend you configure bi-directional relationships. Bidirektionale Beziehungen erfordern mehr Verarbeitung und können daher die Abfrageleistung beeinträchtigen – insbesondere dann, wenn die Anzahl von bidirektionalen Beziehungen in Ihrem Modell steigt.Bi-directional relationships require more processing and so they can negatively impact on query performance—especially as the number of bi-directional relationships in your model increases.

Es gibt eine bessere Möglichkeit, dasselbe Ergebnis zu erzielen: Anstatt bidirektionale Filter zu verwenden, können Sie auf den Slicer Product selbst einen Filter auf Visualebene anwenden.There's a better way to achieve the same result: Instead of using bi-directional filters, you can apply a visual-level filter to the Product slicer itself.

Nehmen wir nun an, dass die Beziehung zwischen den Tabellen Product und Sales nicht mehr in beide Richtungen filtert.Let's now consider that the relationship between the Product and Sales table no longer filters in both directions. Darüber hinaus wurde der Tabelle Sales die folgende Measuredefinition hinzugefügt.And, the following measure definition has been added to the Sales table.

Total Quantity = SUM(Sales[Quantity])

Um die Slicerelemente für Product „mit Daten“ anzuzeigen, muss die Tabelle einfach mit dem Measure Total Quantity und der Bedingung „is not blank“ gefiltert werden.To show the Product slicer items "with data", it simply needs to be filtered by the Total Quantity measure using the "is not blank" condition.

Diagramm mit dem Filterbereich für den Product-Slicer, der jetzt nach „Total Quantity is not blank“ gefiltert ist

Analysen zwischen DimensionenDimension-to-dimension analysis

Ein anderes Szenario, an dem bidirektionale Beziehungen beteiligt sind, behandelt eine Faktentabelle wie eine Überbrückungstabelle.A different scenario involving bi-directional relationships treats a fact-type table like a bridging table. Auf diese Weise wird die Analyse von Daten aus einer Dimensionstabelle im Filterkontext einer anderen Dimensionstabelle unterstützt.This way, it supports analyzing dimension-type table data within the filter context of a different dimension-type table.

Überlegen Sie, wie sich anhand des Beispielmodells in diesem Artikel die folgenden Fragen beantworten lassen:Using the example model in this article, consider how the following questions can be answered:

  • Wie viele Farben wurden an australische Kunden verkauft?How many colors were sold to Australian customers?
  • In wie vielen Ländern wurden Jeans gekauft?How many countries purchased jeans?

Beide Fragen können beantwortet werden, ohne dass die Daten in der Faktentabelle zur Überbrückung zusammengefasst werden müssen.Both questions can be answered without summarizing data in the bridging fact-type table. Allerdings muss eine Weitergabe der Filter von einer Dimensionstabelle in die andere erfolgen.They do, however, require that filters propagate from one dimension-type table to the other. Sobald die Filter Daten über die Faktentabelle weitergeben, lässt sich eine Zusammenfassung der Spalten einer Dimensionstabelle mithilfe der DAX-Funktion DISTINCTCOUNT – sowie eventuell der DAX-Funktionen MIN und MAX – erreichen.Once filters propagate via the fact-type table, summarization of dimension-type table columns can be achieved using the DISTINCTCOUNT DAX function—and possibly the MIN and MAX DAX functions.

Da sich die Faktentabelle wie eine Überbrückungstabelle verhält, können Sie den Leitfaden zu m:n-Beziehungen befolgen, um zwei Dimensionstabellen in Beziehung zu setzen.As the fact-type table behaves like a bridging table, you can follow the many-to-many relationship guidance to relate two dimension-type tables. Hierfür muss mindestens eine Beziehung für eine Filterung in beide Richtungen konfiguriert sein.It will require configuring at least one relationship to filter in both directions. Weitere Informationen finden Sie im Leitfaden zu m:n-Beziehungen (Herstellen von m:n-Beziehungen zwischen Dimensionen).For more information, see Many-to-many relationship guidance (Relate many-to-many dimensions).

Wie in diesem Artikel bereits erläutert, wirkt sich dieser Entwurf wahrscheinlich negativ auf die Leistung aus, und die Benutzer sind möglicherweise durch Slicerelemente „mit Daten“ verwirrt.However, as already described in this article, this design will likely result in a negative impact on performance, and the user experience consequences related to slicer items "with data". Daher empfehlen wir stattdessen die Aktivierung der bidirektionalen Filterung in einer Measuredefinition mithilfe der DAX-Funktion CROSSFILTER.So, we recommend that you activate bi-directional filtering in a measure definition by using the CROSSFILTER DAX function instead. Die CROSSFILTER-Funktion kann verwendet werden, um während der Auswertung eines Ausdrucks die Filterrichtung zu ändern oder sogar die Beziehung zu deaktivieren.The CROSSFILTER function can be used to modify filter directions—or even disable the relationship—during the evaluation of an expression.

Sehen Sie sich die folgende Measuredefinition an, die der Tabelle Sales hinzugefügt wurde.Consider the following measure definition added to the Sales table. In diesem Beispiel wurde die Modellbeziehung zwischen den Tabellen Customer und Sales zur Filterung in nur einer Richtung konfiguriert.In this example, the model relationship between the Customer and Sales tables has been configured to filter in a single direction.

Different Countries Sold =
CALCULATE(
    DISTINCTCOUNT(Customer[Country-Region]),
    CROSSFILTER(
        Customer[CustomerCode],
        Sales[CustomerCode],
        BOTH
    )
)

Während der Auswertung des Measureausdrucks Different Countries Sold erfolgt für die Beziehung zwischen den Tabellen Customer und Sales eine Filterung in beide Richtungen.During the evaluation of the Different Countries Sold measure expression, the relationship between the Customer and Sales tables filters in both directions.

Das folgende Tabellenvisual zeigt Statistiken zu jedem verkauften Produkt an.The following table visual present statistics for each product sold. Die Spalte Quantity enthält einfach die Summe aller Mengenwerte.The Quantity column is simply the sum of quantity values. Die Spalte Different Countries Sold repräsentiert die eindeutige Anzahl von country-region-Werten aller Kunden, die das Produkt gekauft haben.The Different Countries Sold column represents the distinct count of country-region values of all customers who have purchased the product.

Diagramm eines Tabellenvisuals mit zwei Produkten

Nächste SchritteNext steps

Weitere Informationen zu diesem Artikel finden Sie in den folgenden Ressourcen:For more information related to this article, check out the following resources: