Aktive und inaktive Beziehungen im Vergleich – LeitfadenActive vs inactive 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 aktive oder inaktive Modellbeziehungen erstellt werden sollten.It provides you with guidance on when to create active or inactive model relationships. Standardmäßig werden durch aktive Beziehungen Filter an andere Tabellen weitergegeben.By default, active relationships propagate filters to other tables. Inaktive Beziehungen dagegen geben Filter nur dann weiter, wenn die Beziehung über einen DAX-Ausdruck aktiviert (verwendet) wird.Inactive relationship, however, only propagate filters when a DAX expression activates (uses) the relationship.

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.

Aktive BeziehungenActive relationships

Im Allgemeinen wird empfohlen, nach Möglichkeit aktive Beziehungen zu definieren.Generally, we recommend defining active relationships whenever possible. Aktive Beziehungen erweitern den Umfang und das Potenzial der Nutzung Ihres Modells durch Berichtsautoren und durch Benutzer, die mit Q&A arbeiten.They widen the scope and potential of how your model can be used by report authors, and users working with Q&A.

Betrachten wir ein Beispiel eines Importmodells zum Analysieren der Pünktlichkeit von Flügen.Consider an example of an Import model designed to analyze airline flight on-time performance (OTP). Das Modell umfasst eine Tabelle Flight. Hierbei handelt es sich um eine Faktentabelle, in der ein Flug pro Zeile gespeichert wird.The model has a Flight table, which is a fact-type table storing one row per flight. Jede Zeile enthält das Flugdatum, die Flugnummer, den Abflug- und den Ankunftsflughafen sowie die eventuelle Verspätung (in Minuten).Each row records the flight date, flight number, departure and arrival airports, and any delay time (in minutes). Darüber hinaus gibt es eine Airport-Tabelle. Hierbei handelt es sich um eine Dimensionstabelle, in der pro Zeile ein Flughafen gespeichert ist.There's also an Airport table, which is a dimension-type table storing one row per airport. Jede Zeile beschreibt den Flughafencode und -namen und das Land.Each row describes the airport code, airport name, and the country.

Nachfolgend wird ein partielles Modelldiagramm der beiden Tabellen gezeigt.Here's a partial model diagram of the two tables.

Diagramm eines Modells mit den beiden Tabellen „Flight“ und „Airport“.

Es gibt zwei Modellbeziehungen zwischen den Tabellen Flight und Airport.There are two model relationships between the Flight and Airport tables. In der Tabelle Flight beziehen sich die Spalten DepartureAirport und ArrivalAirport auf die Spalte Airport der Tabelle Airport.In the Flight table, the DepartureAirport and ArrivalAirport columns relate to the Airport column of the Airport table. In einem Design mit Sternschema wird die Tabelle Airport als Dimension mit unterschiedlichen Rollen beschrieben.In star schema design, the Airport table is described as a role-playing dimension. In diesem Modell sind dies die zwei Rollen Abflughafen und Ankunftsflughafen.In this model, the two roles are departure airport and arrival airport.

Während dieser Entwurf für Designs mit relationalem Sternschema gut funktioniert, ist dies bei einem Power BI-Modell nicht der Fall.While this design works well for relational star schema designs, it doesn't for Power BI models. Das liegt daran, dass Modellbeziehungen Pfade für die Filterweitergabe sind, und diese Pfade müssen deterministisch sein.It's because model relationships are paths for filter propagation, and these paths must be deterministic. Aus diesem Grund kann ein Modell nicht über mehrere aktive Beziehungen zwischen zwei Tabellen verfügen.For this reason, a model cannot have multiple active relationships between two tables. Daher ist – wie in diesem Beispiel beschrieben – eine Beziehung aktiv, während die andere inaktiv ist (dargestellt durch die gestrichelte Linie).Therefore—as described in this example—one relationship is active while the other is inactive (represented by the dashed line). Im Beispiel ist die Beziehung zur Spalte ArrivalAirport aktiv.Specifically, it's the relationship to the ArrivalAirport column that's active. Dies bedeutet, dass auf die Tabelle Airport angewendete Filter automatisch auf die Spalte ArrivalAirport der Tabelle Flight übertragen werden.This means filters applied to the Airport table automatically propagate to the ArrivalAirport column of the Flight table.

Mit diesem Modellentwurf gehen einige schwer wiegende Einschränkungen hinsichtlich der Berichtserstellung für die Daten einher.This model design imposes severe limitations on how the data can be reported. Insbesondere ist es nicht möglich, die Tabelle Airport so zu filtern, dass automatisch Flugdetails für einen Abflughafen isoliert werden.Specifically, it's not possible to filter the Airport table to automatically isolate flight details for a departure airport. Da für die Berichtserstellung eine gleichzeitige Filterung (oder Gruppierung) nach Abflug- und Ankunftsflughafen erforderlich ist, werden zwei aktive Beziehungen benötigt.As reporting requirements involve filtering (or grouping) by departure and arrival airports at the same time, two active relationships are needed. Die Übersetzung dieser Anforderung in einem Power BI-Modellentwurf bedeutet, dass das Modell zwei Flughafentabellen umfassen muss.Translating this requirement into a Power BI model design means the model must have two airport tables.

Nachfolgend wird der verbesserte Modellentwurf gezeigt.Here's the improved model design.

Diagramm eines Modells mit den vier Tabellen „Date“, „Flight“, „Departure Airport“ und „Arrival Airport“.

Das Modell enthält jetzt zwei Flughafentabellen: Departure Airport und Arrival Airport.The model now has two airport tables: Departure Airport and Arrival Airport. Die Modellbeziehungen zwischen diesen Tabellen und der Tabelle Flight sind aktiv.The model relationships between these tables and the Flight table are active. Beachten Sie außerdem, dass die Spaltennamen in den Tabellen Departure Airport und Arrival Airport das Präfix Departure oder Arrival enthalten.Notice also that the column names in the Departure Airport and Arrival Airport tables are prefixed with the word Departure or Arrival.

Der verbesserte Modellentwurf unterstützt das Generieren des folgenden Berichtsdesigns.The improved model design supports producing the following report design.

Diagramm einer Berichtsseite mit zwei Slicern und einem Tabellenvisual.

Die Berichtsseite filtert „Melbourne“ als Abflughafen heraus, und das Tabellenvisual führt eine Gruppierung nach Ankunftsflughäfen durch.The report page filters by Melbourne as the departure airport, and the table visual groups by arrival airports.

Hinweis

Für Importmodelle vergrößert die zusätzliche Tabelle das Modell und führt zu längeren Aktualisierungszeiten.For Import models, the additional table has resulted in an increased model size, and longer refresh times. Dies widerspricht den im Artikel Verfahren zur Datenreduktion für die Importmodellierung beschriebenen Empfehlungen.As such, it contradicts the recommendations described in the Data reduction techniques for Import modeling article. In diesem Beispiel hat jedoch die Anforderung, nur aktive Beziehungen zu verwenden, Vorrang vor diesen Empfehlungen.However, in the example, the requirement to have only active relationships overrides these recommendations.

Außerdem ist es üblich, dass Dimensionstabellen im Vergleich zu Faktentabellen eine geringere Zeilenanzahl aufweisen.Further, it's common that dimension-type tables contain low row counts relative to fact-type table row counts. Das Modell ist deshalb wahrscheinlich nicht übermäßig größer, und die Aktualisierungszeiten sind nicht übermäßig länger.So, the increased model size and refresh times aren't likely to be excessively large.

Methodik der UmgestaltungRefactoring methodology

Nachfolgend wird eine Methodik zum Umgestalten eines Modells von einer einzelnen Dimensionstabelle mit unterschiedlichen Rollen zu einem Entwurf mit einer Tabelle pro Rolle vorgestellt.Here's a methodology to refactor a model from a single role-playing dimension-type table, to a design with one table per role.

  1. Entfernen Sie alle inaktiven Beziehungen.Remove any inactive relationships.

  2. Erwägen Sie eine Umbenennung der Dimensionstabelle mit unterschiedlichen Rollen, um ihre Rolle besser zu beschreiben.Consider renaming the role-playing dimension-type table to better describe its role. Im Beispiel bezieht sich die Tabelle Airport auf die Spalte ArrivalAirport der Tabelle Flight, sodass sie in Arrival Airport umbenannt wurde.In the example, the Airport table is related to the ArrivalAirport column of the Flight table, so it's renamed as Arrival Airport.

  3. Erstellen Sie eine Kopie der Tabelle mit unterschiedlichen Rollen, und geben Sie ihr einen Namen, der ihre Rolle widerspiegelt.Create a copy of the role-playing table, providing it with a name that reflects its role. Wenn es sich um eine wichtige Tabelle handelt, wird die Definition einer berechneten Tabelle empfohlen.If it's an Import table, we recommend defining a calculated table. Bei einer DirectQuery-Tabelle können Sie die Power Query-Abfrage duplizieren.If it's a DirectQuery table, you can duplicate the Power Query query.

    Im Beispiel wurde die Tabelle Departure Airport durch Verwendung der folgenden Definition einer berechneten Tabelle erstellt.In the example, the Departure Airport table was created by using the following calculated table definition.

    Departure Airport = 'Arrival Airport'
    
  4. Erstellen Sie eine aktive Beziehung, um die neue Tabelle in Beziehung zu setzen.Create an active relationship to relate the new table.

  5. Erwägen Sie das Umbenennen der Spalten in den Tabellen, um ihre Rolle exakt widerzuspiegeln.Consider renaming the columns in the tables so they accurately reflect their role. Im Beispiel erhielten alle Spalten das Präfix Departure oder Arrival.In the example, all columns are prefixed with the word Departure or Arrival. Diese Namen stellen sicher, dass die Berichtsvisuals standardmäßig selbstbeschreibend sind und eindeutige Bezeichnungen aufweisen.These names ensure report visuals, by default, will have self-describing and non-ambiguous labels. Außerdem wird die Q&A-Nutzung verbessert, da Benutzer auf einfache Weise Fragen stellen können.It also improves the Q&A experience, allowing users to easily write their questions.

  6. Erwägen Sie das Hinzufügen von Beschreibungen zu Tabellen mit mehreren Rollen.Consider adding descriptions to role-playing tables. (Im Bereich Fields wird eine Beschreibung in einer QuickInfo angezeigt, wenn ein Berichtsautor mit dem Cursor auf die Tabelle zeigt.) Auf diese Weise können Sie zusätzliche Details zur Filterweitergabe für Ihre Berichtsautoren bereitstellen.(In the Fields pane, a description appears in a tooltip when a report author hovers their cursor over the table.) This way, you can communicate any additional filter propagation details to your report authors.

Inaktive BeziehungenInactive relationships

Unter bestimmten Umständen können inaktive Beziehungen besondere Anforderungen an die Berichterstattung erfüllen.In specific circumstances, inactive relationships can address special reporting needs.

Betrachten wir unterschiedliche Modell- und Berichterstellungsanforderungen:Let's now consider different model and reporting requirements:

  • Ein Vertriebsmodell enthält eine Tabelle Sales mit zwei Datenspalten: OrderDate und ShipDateA sales model contains a Sales table that has two date columns: OrderDate and ShipDate
  • Jede Zeile in der Tabelle Sales erfasst einen einzelnen Auftrag.Each row in the Sales table records a single order
  • Datumsfilter werden fast immer auf die Spalte OrderDate angewendet, in der stets ein gültiges Datum gespeichert wird.Date filters are almost always applied to the OrderDate column, which always stores a valid date
  • Nur ein Measure erfordert die Weitergabe des Datumsfilters in der Spalte ShipDate, die (bis zum Versand der Bestellung) LEERE Werte enthalten kann.Only one measure requires date filter propagation to the ShipDate column, which can contain BLANKs (until the order is shipped)
  • Es ist nicht erforderlich, eine gleichzeitige Filterung (oder Gruppierung) nach Zeiträumen für Auftrags- und Versanddaten durchzuführen.There's no requirement to simultaneously filter (or group by) order and ship date periods

Nachfolgend wird ein partielles Modelldiagramm der beiden Tabellen gezeigt.Here's a partial model diagram of the two tables.

Diagramm eines Modells mit den beiden Tabellen „Sales“ und „Date“.

Es gibt zwei Modellbeziehungen zwischen den Tabellen Sales und Date.There are two model relationships between the Sales and Date tables. In der Tabelle Sales beziehen sich die Spalten OrderDate und ShipDate auf die Spalte Date der Tabelle Date.In the Sales table, the OrderDate and ShipDate columns relate to the Date column of the Date table. In diesem Modell lauten die zwei Rollen für die Tabelle Date: order date und ship date.In this model, the two roles for the Date table are order date and ship date. Die Beziehung zur Spalte OrderDate ist die aktive Beziehung.It's the relationship to the OrderDate column that's active.

Alle sechs Measures – mit Ausnahme von einem – müssen nach der Spalte OrderDate gefiltert werden.All of the six measures—except one—must filter by the OrderDate column. Das Measure Orders Shipped dagegen muss nach der Spalte ShipDate gefiltert werden.The Orders Shipped measure, however, must filter by the ShipDate column.

Nachfolgend wird die Definition für das Measure Orders gezeigt.Here's the Orders measure definition. Es werden einfach die Zeilen der Tabelle Sales innerhalb des Filterkontextes gezählt.It simply counts the rows of the Sales table within the filter context. Alle Filter, die auf die Tabelle Date angewendet werden, werden auf die Spalte OrderDate übertragen.Any filters applied to the Date table will propagate to the OrderDate column.

Orders = COUNTROWS(Sales)

Nachfolgend wird die Definition für das Measure Orders Shipped gezeigt.Here's the Orders Shipped measure definition. Sie verwendet die DAX-Funktion USERELATIONSHIP, die die Filterweitergabe für eine bestimmte Beziehung nur während der Auswertung des Ausdrucks aktiviert.It uses the USERELATIONSHIP DAX function, which activates filter propagation for a specific relationship only during the evaluation of the expression. In diesem Beispiel wird die Beziehung zur Spalte ShipDate verwendet.In this example, the relationship to the ShipDate column is used.

Orders Shipped =
CALCULATE(
    COUNTROWS(Sales)
    ,USERELATIONSHIP('Date'[Date], Sales[ShipDate])
)

Dieser Modellentwurf unterstützt das Generieren des folgenden Berichtsdesigns.This model design supports producing the following report design.

Diagramm einer Berichtsseite mit einem Slicer und einem Tabellenvisual.

Die Berichtsseite führt eine Filterung nach dem 4. Quartal 2019 durch.The report page filters by quarter 2019 Q4. Das Tabellenvisual führt eine Gruppierung nach Monat durch und zeigt verschiedene Vertriebsstatistiken an.The table visual groups by month and displays various sales statistics. Die Measures Orders und Orders Shipped führen zu unterschiedlichen Ergebnissen.The Orders and Orders Shipped measures produce different results. Sie verwenden jeweils die gleiche Zusammenfassungslogik (Zählen der Zeilen der Tabelle Sales), aber eine unterschiedliche Weitergabe der Date-Tabellenfilter.They each use the same summarization logic (count rows of the Sales table), but different Date table filter propagation.

Beachten Sie, dass der Slicer „Quarter“ ein LEERES Element enthält.Notice that the quarter slicer includes a BLANK item. Dieser Slicer wird als Ergebnis einer Tabellenerweiterung angezeigt.This slicer item appears as a result of table expansion. Während jede Sales-Tabellenzeile ein Auftragsdatum enthält, ist das Versanddatum in einigen Zeilen LEER – diese Bestellungen wurden noch nicht versendet.While each Sales table row has an order date, some rows have a BLANK ship date—these orders are yet to be shipped. Bei der Tabellenerweiterung werden auch inaktive Beziehungen berücksichtigt, sodass LEERE Werte aufgrund von LEEREN Werten auf der n-Seite der Beziehung oder aufgrund von Datenintegritätsproblemen auftreten können.Table expansion considers inactive relationships too, and so BLANKs can appear due to BLANKs on the many-side of the relationship, or due to data integrity issues.

EmpfehlungenRecommendations

Zusammenfassend wird empfohlen, nach Möglichkeit aktive Beziehungen zu definieren.In summary, we recommend defining active relationships whenever possible. Aktive Beziehungen erweitern den Umfang und das Potenzial der Nutzung Ihres Modells durch Berichtsautoren und durch Benutzer, die mit Q&A arbeiten.They widen the scope and potential of how your model can be used by report authors, and users working with Q&A. Dies bedeutet, dass Dimensionstabellen mit unterschiedlichen Rollen in Ihrem Modell dupliziert werden sollten.It means that role-playing dimension-type tables should be duplicated in your model.

Unter bestimmten Umständen können Sie jedoch eine oder mehrere inaktive Beziehungen für eine Dimensionstabelle mit unterschiedlichen Rollen definieren.In specific circumstances, however, you can define one or more inactive relationships for a role-playing dimension-type table. Erwägen Sie diesen Entwurf in folgenden Fällen:You can consider this design when:

  • Es ist nicht erforderlich, Berichtsvisuals gleichzeitig nach unterschiedlichen Rollen zu filtern.There's no requirement for report visuals to simultaneously filter by different roles
  • Sie verwenden die DAX-Funktion USERELATIONSHIP, um eine bestimmte Beziehung für relevante Modellberechnungen zu aktivieren.You use the USERELATIONSHIP DAX function to activate a specific relationship for relevant model calculations

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: