Verwenden von Aggregationen in Power BI DesktopUse aggregations in Power BI Desktop

Mit Aggregationen können Sie die Größe von Tabellen in Power BI reduzieren, damit Sie sich auf die wichtigen Daten konzentrieren und die Abfrageleistung verbessern können.Aggregations in Power BI let you reduce table sizes so you can focus on important data and improve query performance. Aggregationen ermöglichen die interaktive Analyse von Big Data auf eine Weise, die andernfalls nicht möglich ist. Somit können die Kosten zur Nutzung großer Datasets für die Entscheidungsfindung drastisch gesenkt werden.Aggregations enable interactive analysis over big data in ways that aren't possible otherwise, and can dramatically reduce the cost of unlocking large datasets for decision making.

Aggregationen bieten unter anderem folgende Vorteile:Some advantages of using aggregations include:

  • Bessere Abfrageleistung für Big Data:Better query performance over big data. Jede Interaktion mit Power BI-Visuals übermittelt DAX-Abfragen an das Dataset.Every interaction with Power BI visuals submits DAX queries to the dataset. Zwischengespeicherte aggregierte Daten nutzen einen Bruchteil der Ressourcen, die für Detaildaten benötigt werden. Somit können Sie sich Zugriff auf andernfalls nicht verfügbare Big Data-Datasets verschaffen.Cached aggregated data uses a fraction of the resources required for detail data, so you can unlock big data that would otherwise be inaccessible.
  • Optimierte Datenaktualisierung:Optimized data refresh. Durch die kleineren Cachegrößen werden die Aktualisierungszeiten verkürzt, sodass Benutzer Daten schneller erhalten.Smaller cache sizes reduce refresh times, so data gets to users faster.
  • Ausgeglichene Architekturen:Balanced architectures. Der In-Memory-Cache von Power BI kann aggregierte Abfragen verarbeiten, im DirectQuery-Modus gesendete Abfragen einschränken und Ihnen dabei helfen, Parallelitätslimits einzuhalten.The Power BI in-memory cache can handle aggregated queries, limiting queries sent in DirectQuery mode and helping you meet concurrency limits. Bei den verbleibenden Detailabfragen handelt es sich zumeist um gefilterte Abfragen auf Transaktionsebene, die von Data Warehouse- und Big Data-Systemen normalerweise gut verarbeitet werden können.The remaining detail-level queries tend to be filtered, transactional-level queries, which data warehouses and big-data systems normally handle well.

Aggregationen in Microsoft Power BI Desktop

Dimensionale Datenquellen wie Data Warehouse- und Data Mart-Instanzen können beziehungsbasierte Aggregationen.Dimensional data sources, like data warehouses and data marts, can use relationship-based aggregations. Bei auf Hadoop basierenden Big Data-Quellen basieren Aggregationen oft auf GroupBy-Spalten.Hadoop-based big-data sources often base aggregations on GroupBy columns. In diesem Artikel werden typische Unterschiede bei der Modellierung in Power BI für jede Art von Datenquelle beschrieben.This article describes typical Power BI modeling differences for each type of data source.

Erstellen einer aggregierten TabelleCreate an aggregated table

So erstellen Sie eine aggregierte Tabelle:To create an aggregated table:

  1. Richten Sie abhängig von Ihrer Datenquelle und Ihrem Modell eine neue Tabelle mit den gewünschten Feldern ein.Set up a new table with the fields you want, depending on your data source and model.
  2. Definieren Sie die Aggregationen mithilfe des Dialogfelds Aggregationen verwalten.Define the aggregations by using the Manage aggregations dialog.
  3. Ändern Sie gegebenenfalls den Speichermodus für die aggregierte Tabelle.If applicable, change the storage mode for the aggregated table.

Aggregationen verwaltenManage aggregations

Sobald Sie die neue Tabelle mit den gewünschten Feldern erstellt haben, klicken Sie im Bereich Felder einer beliebigen Power BI Desktop-Ansicht mit der rechten Maustaste auf die Tabelle, und wählen Sie dann Aggregationen verwalten aus.After you create the new table that has the fields you want, in the Fields pane of any Power BI Desktop view, right-click the table, and select Manage aggregations.

„Aggregationen verwalten“ auswählen

Im Dialogfeld Aggregationen verwalten wird für jede Spalte in der Tabelle eine Zeile angezeigt, in der Sie das Aggregationsverhalten festlegen können.The Manage aggregations dialog shows a row for each column in the table, where you can specify the aggregation behavior. Im folgenden Beispiel werden Abfragen der Detailtabelle Sales intern an die Aggregationstabelle Sales Agg umgeleitet.In the following example, queries to the Sales detail table are internally redirected to the Sales Agg aggregation table.

Das Dropdownmenü Zusammenfassung des Dialogfelds Aggregationen verwalten zeigt die folgenden Werte an:The Summarization drop-down in the Manage aggregations dialog offers the following values:

  • AnzahlCount
  • GroupByGroupBy
  • MaxMax
  • MinMin
  • SumSum
  • Count table rowsCount table rows

Screenshot: Dialogfeld „Aggregationen verwalten“

Die GroupBy-Einträge in diesem Beispiel für eine beziehungsbasierte Aggregation sind optional.In this relationship-based aggregation example, the GroupBy entries are optional. Mit Ausnahme von DISTINCTCOUNT wirken sie sich nicht auf das Aggregationsverhalten aus und dienen hauptsächlich zur besseren Lesbarkeit.Except for DISTINCTCOUNT, they don't affect aggregation behavior, and are primarily for readability. Ohne die GroupBy-Einträge würden die Aggregationen immer noch basierend auf den Beziehungen gefunden werden.Without the GroupBy entries, the aggregations would still get hit, based on the relationships. Dies unterscheidet sich vom Big Data-Beispiel später in diesem Artikel, bei dem die GroupBy-Einträge erforderlich sind.This is different from the big data example later in this article, where the GroupBy entries are required.

Klicken Sie auf Alle übernehmen, nachdem Sie die gewünschten Aggregationen definiert haben.After defining the aggregations you want, select Apply All.

ÜberprüfungenValidations

Das Dialogfeld Aggregationen verwalten erzwingt die folgenden relevanten Überprüfungen:The Manage aggregations dialog enforces the following notable validations:

  • Die Detailspalte muss den gleichen Datentyp wie die Aggregationsspalte aufweisen. Ausgenommen sind die Zusammenfassungsfunktionen „Count“ und „Count table rows“.The Detail Column must have the same datatype as the Aggregation Column, except for the Count and Count table rows Summarization functions. Die Funktionen „Count“ und „Count table rows“ sind nur für Integeraggregationsspalten verfügbar und erfordern keinen übereinstimmenden Datentyp.Count and Count table rows are only available for integer aggregation columns, and don't require a matching datatype.
  • Verkettete Aggregationen über drei oder mehr Tabellen sind nicht zulässig.Chained aggregations covering three or more tables aren't allowed. Aggregationen der Tabelle A können beispielsweise nicht auf eine Tabelle B verweisen, die Aggregationen enthält, die wiederum auf eine Tabelle C verweisen.For example, aggregations on Table A can't refer to a Table B that has aggregations referring to a Table C.
  • Doppelte Aggregationen, bei denen zwei Einträge die gleiche Zusammenfassungsfunktion verwenden und auf die gleiche Detailtabelle und Detailspalte verweisen, sind nicht zulässig.Duplicate aggregations, where two entries use the same Summarization function and refer to the same Detail Table and Detail Column, aren't allowed.
  • Die Detailtabelle muss den DirectQuery-Speichermodus verwenden, nicht den Speichermodus „Import“.The Detail Table must use DirectQuery storage mode, not Import.
  • Das Gruppieren nach einer Fremdschlüsselspalte, die von einer inaktiven Beziehung verwendet wird, und die Verwendung der USERELATIONSHIP-Funktion für Aggregationstreffer werden nicht unterstützt.Grouping by a foreign key column used by an inactive relationship, and relying on the USERELATIONSHIP function for aggregation hits, isn't supported.

Die meisten Überprüfungen werden durch das Deaktivieren von Dropdownwerten und das Anzeigen einer Erklärung in einer QuickInfo erzwungen. Dies wird im folgenden Bild veranschaulicht.Most of the validations are enforced by disabling dropdown values and showing explanatory text in the tooltip, as shown in the following image.

Überprüfungen in einer QuickInfo

Aggregationstabellen sind ausgeblendetAggregation tables are hidden

Benutzer mit schreibgeschütztem Zugriff auf das Dataset können keine Aggregationstabellen abfragen.Users with read-only access to the dataset can't query aggregation tables. Dadurch werden Sicherheitsbedenken bei Verwendung mit der Sicherheit auf Zeilenebene (RLS, row-level security) vermieden.This avoids security concerns when used with row-level security (RLS). Benutzer und Abfragen verwenden die Detailtabelle, nicht die Aggregationstabelle. Sie müssen nicht wissen, dass es die Aggregationstabelle gibt.Consumers and queries refer to the detail table, not the aggregation table, and don't need to know about the aggregation table.

Daher werden Aggregationen in der Berichtsansicht ausgeblendet.For this reason, aggregation tables are hidden from Report view. Wenn die Tabelle nicht bereits ausgeblendet ist, wird sie über das Dialogfeld Aggregationen verwalten ausgeblendet, wenn Sie auf Alle übernehmen klicken.If the table isn't already hidden, the Manage aggregations dialog will set it to hidden when you select Apply all.

SpeichermodiStorage modes

Das Aggregationsfeature interagiert mit den Speichermodi auf Tabellenebene.The aggregation feature interacts with table-level storage modes. Power BI-Tabellen können die folgenden Speichermodi nutzen: DirectQuery, Import oder Dual.Power BI tables can use DirectQuery, Import, or Dual storage modes. Im DirectQuery-Modus wird das Back-End direkt abgefragt, während die Daten im Import-Modus im Arbeitsspeicher zwischengespeichert und die Abfragen an die zwischenspeicherten Daten gesendet werden.DirectQuery queries the backend directly, while Import caches data in memory and sends queries to the cached data. Alle Import- und nicht-mehrdimensionalen DirectQuery-Datenquellen in Power BI können Aggregationen verwenden.All Power BI Import and non-multidimensional DirectQuery data sources can work with aggregations.

Wählen Sie die aggregierte Tabelle in der Modellansicht in Power BI Desktop aus, um ihren Speichermodus auf „Import“ festzulegen und die Abfragen dadurch zu beschleunigen.To set the storage mode of an aggregated table to Import to speed up queries, select the aggregated table in Power BI Desktop Model view. Erweitern Sie Erweitert im Bereich Eigenschaften, und wählen Sie im Dropdownmenü Speichermodus die Option Import aus.In the Properties pane, expand Advanced, drop down the selection under Storage mode, and select Import. Beachten Sie, dass diese Aktion nicht rückgängig gemacht werden kann.Note that this action is irreversible.

Festlegen des Speichermodus

Weitere Informationen zu Tabellenspeichermodi finden Sie unter Verwalten des Speichermodus in Power BI Desktop.For more information about table storage modes, see Manage storage mode in Power BI Desktop.

Sicherheit auf Zeilenebene für AggregationenRLS for aggregations

RLS-Ausdrücke (Row Level Security, Sicherheit auf Zeilenebene) sollten die Aggregationstabelle und die Detailtabelle filtern, damit sie ordnungsgemäß für Aggregationen funktionieren.To work correctly for aggregations, RLS expressions should filter both the aggregation table and the detail table.

Im folgenden Beispiel funktioniert der RLS-Ausdruck der Tabelle Geography für Aggregationen, weil in den Beziehungen zu den Tabellen Sales und Sales Agg nach „Geography“ gefiltert wird.In the following example, the RLS expression on the Geography table works for aggregations, because Geography is on the filtering side of relationships to both the Sales table and the Sales Agg table. Die RLS wird erfolgreich auf Abfragen für die Aggregationstabelle und andere Abfragen angewendet.Queries that hit the aggregation table and those that don't will both have RLS successfully applied.

Erfolgreiche RLS für Aggregationen

Ein RLS-Ausdruck in der Tabelle Product würde nur die Detailtabelle Sales filtern, nicht die aggregierte Tabelle Sales Agg.An RLS expression on the Product table filters only the detail Sales table, not the aggregated Sales Agg table. Da die Aggregationstabelle eine weitere Darstellung der Daten in der Detailtabelle ist, wäre es nicht sicher, Abfragen aus der Aggregationstabelle zu beantworten, wenn der RLS-Filter nicht angewendet werden kann.Since the aggregation table is another representation of the data in the detail table, it would be insecure to answer queries from the aggregation table if the RLS filter can't be applied. Es wird davon abgeraten, nur die Detailtabelle zu filtern, weil Benutzerabfragen mit dieser Rolle nicht von Aggregationstreffern profitieren.Filtering only the detail table isn't recommended, because user queries from this role won't benefit from aggregation hits.

Ein RLS-Ausdruck, der nur die Aggregationstabelle Sales Agg filtert und nicht die Detailtabelle Sales, ist nicht zulässig.An RLS expression that filters only the Sales Agg aggregation table and not the Sales detail table isn't allowed.

RLS nur für Aggregationstabellen ist unzulässig

Für Aggregationen, die auf GroupBy-Spalten basieren, kann ein RLS-Ausdruck für die Detailtabelle dazu verwendet werden, die Aggregationstabelle zu filtern, da alle GroupBy-Spalten in der Aggregationstabelle auch in der Detailtabelle enthalten sind.For aggregations based on GroupBy columns, an RLS expression applied to the detail table can be used to filter the aggregation table, because all the GroupBy columns in the aggregation table are covered by the detail table. Im Gegensatz dazu kann ein RLS-Filter für die Aggregationstabelle nicht auf die Detailseite angewendet werden. Dies ist also unzulässig.On the other hand, an RLS filter on the aggregation table can't be applied to the detail table, so is disallowed.

Aggregationen basierend auf BeziehungenAggregation based on relationships

Dimensionale Modelle verwenden üblicherweise Aggregationen, die auf Beziehungen basieren.Dimensional models typically use aggregations based on relationships. Power BI-Datasets aus Data Warehouse- und Data Mart-Instanzen weisen ein Stern- oder Schneeflockenschema auf, bei dem Beziehungen zwischen Dimensionstabellen und Faktentabellen bestehen.Power BI datasets from data warehouses and data marts resemble star/snowflake schemas, with relationships between dimension tables and fact tables.

Im folgenden Modell einer einzelnen Datenquelle verwenden die Tabellen den DirectQuery-Speichermodus.In the following model from a single data source, the tables are using DirectQuery storage mode. Die Faktentabelle Sales enthält Milliarden von Zeilen.The Sales fact table contains billions of rows. Wenn Sie den Speichermodus von Sales für das Zwischenspeichern auf Import festlegen, erfordert dies einen sehr hohen Arbeitsspeicher- und Verwaltungsaufwand.Setting the storage mode of Sales to Import for caching would consume considerable memory and management overhead.

Detailtabellen in einem Modell

Erstellen Sie stattdessen die Aggregationstabelle Sales Agg.Instead, create the Sales Agg aggregation table. Die Zeilenanzahl in der Tabelle Sales Agg sollte mit der Summe von SalesAmount übereinstimmen (gruppiert nach CustomerKey, DateKey und ProductSubcategoryKey).In the Sales Agg table, the number of rows equals the sum of SalesAmount grouped by CustomerKey, DateKey, and ProductSubcategoryKey. Die Tabelle Sales Agg besitzt eine höhere Granularität als Sales. Diese Tabelle enthält also deutlich weniger Zeilen und ist dadurch deutlich einfacher zu verwalten.The Sales Agg table is at a higher granularity than Sales, so instead of billions, it might contain millions of rows, which are much easier to manage.

Wenn die folgenden Dimensionstabellen am häufigsten für Abfragen mit hohem Unternehmenswert verwendet werden, kann die Tabelle Sales Agg mithilfe von 1:n- oder n:1-Beziehungen gefiltert werden.If the following dimension tables are the most commonly used for the queries with high business value, they can filter Sales Agg, using one-to-many or many-to-one relationships.

  • GeografieGeography
  • KundeCustomer
  • Datum (Date)Date
  • Product SubcategoryProduct Subcategory
  • ProduktkategorieProduct Category

Die folgende Abbildung zeigt dieses Modell.The following image shows this model.

Aggregationstabelle in einem Modell

In der folgenden Tabelle werden die Aggregationen der Sales Agg-Tabelle gezeigt.The following table shows the aggregations for the Sales Agg table.

Aggregationen für die Sales Agg-Tabelle

Hinweis

Die Tabelle Sales Agg verfügt wie jede andere Tabelle über die Flexibilität, auf verschiedene Weisen geladen werden zu können.The Sales Agg table, like any table, has the flexibility of being loaded in a variety of ways. Die Aggregation kann in der Quelldatenbank mit ETL- oder ELT-Vorgängen oder mit dem M-Ausdruck für die Tabelle erfolgen.The aggregation can be performed in the source database using ETL/ELT processes, or by the M expression for the table. Die aggregierte Tabelle kann den Speichermodus „Import“ mit oder ohne inkrementeller Aktualisierung in Power BI Premium verwenden, oder ihr Modus kann auf „DirectQuery“ festgelegt werden, um mit Columnstore-Indizes schnellere Abfragen zu ermöglichen.The aggregated table can use Import storage mode, with or without incremental refresh in Power BI Premium, or it can use DirectQuery and be optimized for fast queries using columnstore indexes. Diese Flexibilität ermöglicht ausgeglichene Architekturen, in denen die Abfragelast verteilt wird, um Leistungsengpässe zu vermeiden.This flexibility enables balanced architectures that can spread query load to avoid bottlenecks.

Wenn der Speichermodus der aggregierten Tabelle Sales Agg in Import geändert wird, wird ein Dialogfeld angezeigt, das darauf hinweist, dass der Speichermodus Dual für die zugehörigen Dimensionstabellen festgelegt werden kann.Changing the storage mode of the aggregated Sales Agg table to Import opens a dialog box saying that the related dimension tables can be set to storage mode Dual.

Dialogfeld „Speichermodus“

Wenn der Speichermodus „Dual“ für die Dimensionstabellen festgelegt wird, können sie je nach Unterabfrage den Speichermodus „Import“ oder „DirectQuery“ verwenden.Setting the related dimension tables to Dual lets them act as either Import or DirectQuery, depending on the subquery. Im Beispiel:In the example:

  • Abfragen, die Metriken aus der Tabelle Sales Agg aggregieren, deren Modus auf „Import“ festgelegt ist, und die GroupBy-Attribute aus den verwandten Dual-Tabellen können aus dem In-Memory-Cache zurückgegeben werden.Queries that aggregate metrics from the Import-mode Sales Agg table, and group by attribute(s) from the related Dual tables, can be returned from the in-memory cache.
  • Abfragen, die Metriken aus der Tabelle Sales aggregieren, deren Modus auf „DirectQuery“ festgelegt ist, und GroupBy-Attribute aus den verwandten Dual-Tabellen können im DirectQuery-Modus zurückgegeben werden.Queries that aggregate metrics from the DirectQuery Sales table, and group by attribute(s) from the related Dual tables, can be returned in DirectQuery mode. Die Abfragelogik und der GroupBy-Vorgang wird an die Quelldatenbank übergeben.The query logic, including the GroupBy operation, is passed down to the source database.

Weitere Informationen zum Speichermodus „Dual“ finden Sie unter Verwalten des Speichermodus in Power BI Desktop.For more information about Dual storage mode, see Manage storage mode in Power BI Desktop.

Reguläre im Vergleich zu eingeschränkten BeziehungenRegular vs. limited relationships

Für auf Beziehungen basierende Aggregationstreffer werden reguläre Beziehungen benötigt.Aggregation hits based on relationships require regular relationships.

Reguläre Beziehungen umfassen die folgenden Kombinationen von Speichermodi, bei denen beide Tabellen aus einer einzelnen Quelle stammen:Regular relationships include the following storage mode combinations, where both tables are from a single source:

Tabelle auf der n-SeiteTable on the many sides Tabelle auf der 1-SeiteTable on the 1 side
DualDual DualDual
ImportierenImport Import oder DualImport or Dual
DirectQueryDirectQuery DirectQuery oder DualDirectQuery or Dual

Eine quellenübergreifende Beziehung wird nur dann als regulär eingestuft, wenn für beide Tabellen der Speichermodus „Import“ festgelegt ist.The only case where a cross-source relationship is considered regular is if both tables are set to Import. M:n-Beziehungen werden immer als eingeschränkt eingestuft.Many-to-many relationships are always considered limited.

Informationen zu quellenübergreifenden Aggregationstreffern, die nicht von Beziehungen abhängen, finden Sie unter Aggregationen basierend auf GroupBy-Spalten.For cross-source aggregation hits that don't depend on relationships, see Aggregations based on GroupBy columns.

Beispiele für Abfragen von auf Beziehungen basierenden AggregationenRelationship-based aggregation query examples

Die folgende Abfrage findet die Aggregation, weil Spalten in der Date-Tabelle der Granularität entsprechen, die zum Finden der Aggregation erforderlich ist.The following query hits the aggregation, because columns in the Date table are at the granularity that can hit the aggregation. Für die Spalte SalesAmount wird die Aggregation Sum verwendet.The SalesAmount column uses the Sum aggregation.

Erfolgreiche Abfrage einer auf Beziehungen basierenden Aggregation

Die folgende Abfrage führt nicht zu einem Aggregationstreffer.The following query doesn't hit the aggregation. Obwohl die Summe von SalesAmount angefordert wurde, führt die Abfrage einen GroupBy-Vorgang für eine Spalte in der Product-Tabelle durch, die nicht die Granularität aufweist, die zum Finden der Aggregation nötig ist.Despite requesting the sum of SalesAmount, the query is performing a GroupBy operation on a column in the Product table, which isn't at the granularity that can hit the aggregation. Wenn Sie die Beziehungen im Modell betrachten, kann eine Unterkategorie der Tabelle „Product“ mehrere Product-Zeilen enthalten.If you observe the relationships in the model, a product subcategory can have multiple Product rows. Die Abfrage wäre also nicht in der Lage, zu ermitteln, welche Product-Zeile aggregiert werden soll.The query wouldn't be able to determine which product to aggregate to. In diesem Fall kehrt die Abfrage zu DirectQuery zurück und übermittelt eine SQL-Abfrage an die Datenquelle.In this case, the query reverts to DirectQuery and submits a SQL query to the data source.

Abfrage, für die keine Aggregation verwendet werden kann

Aggregationen können nicht nur für einfache Berechnungen eingesetzt werden (wie z.B. das Berechnen einer Summe).Aggregations aren't just for simple calculations that perform a straightforward sum. Sie können auch bei komplexen Berechnungen nützlich sein.Complex calculations can also benefit. Eine komplexe Berechnung wird in mehrere Unterabfragen aufgeteilt: SUM, MIN, MAX und COUNT. Jede Unterabfrage wird ausgewertet, um zu bestimmen, ob die Aggregation gefunden werden kann.Conceptually, a complex calculation is broken down into subqueries for each SUM, MIN, MAX, and COUNT, and each subquery is evaluated to determine if it can hit the aggregation. Dies gilt aufgrund einer Optimierung des Abfrageplans nicht immer.This logic doesn't hold true in all cases due to query-plan optimization, but in general it should apply. Das folgende Beispiel findet die Aggregation:The following example hits the aggregation:

Komplexe Aggregationsabfrage

Die Funktion COUNTROWS kann von Aggregationen profitieren.The COUNTROWS function can benefit from aggregations. Die folgende Abfrage findet die Aggregation, weil eine Count table rows-Aggregation in der Sales-Tabelle definiert wurde.The following query hits the aggregation because there is a Count table rows aggregation defined for the Sales table.

COUNTROWS-Aggregationsabfrage

Die Funktion AVERAGE kann von Aggregationen profitieren.The AVERAGE function can benefit from aggregations. Die folgende Abfrage findet die Aggregation, weil AVERAGE intern in SUM geteilt durch COUNT gefaltet wird.The following query hits the aggregation because AVERAGE internally gets folded to a SUM divided by a COUNT. Da für die Spalte UnitPrice Aggregationen für SUM und COUNT definiert sind, wird die Aggregation gefunden.Since the UnitPrice column has aggregations defined for both SUM and COUNT, the aggregation is hit.

AVERAGE-Aggregationsabfrage

In einigen Fällen kann die Funktion DISTINCTCOUNT von Aggregationen profitieren.In some cases, the DISTINCTCOUNT function can benefit from aggregations. Die folgenden Abfrage findet die Aggregation, weil es einen GroupBy-Eintrag für CustomerKey gibt, wodurch CustomerKey in der Aggregationstabelle eindeutig bleibt.The following query hits the aggregation because there is a GroupBy entry for CustomerKey, which maintains the distinctness of CustomerKey in the aggregation table. Dieses Verfahren kann immer noch dem Leistungsschwellenwert entsprechen, bei dem mehr als zwei bis fünf Millionen eindeutige Werte sich auf die Abfrageleistung auswirken können.This technique might still hit the performance threshold where more than two to five million distinct values can affect query performance. Es kann sich jedoch in Szenarios als nützlich erweisen, bei denen Milliarden Zeilen in der Detailtabelle vorhanden sind, aber nur zwei bis fünf Millionen verschiedene Werte in der Spalte enthalten sind.However, it can be useful in scenarios where there are billions of rows in the detail table, but two to five million distinct values in the column. In diesem Fall kann DISTINCTCOUNT schneller sein als das Überprüfen der Tabelle mit Milliarden Zeilen, auch wenn diese im Arbeitsspeicher zwischengespeichert werden würde.In this case, the DISTINCTCOUNT can perform faster than scanning the table with billions of rows, even if it were cached into memory.

DISTINCTCOUNT-Aggregationsabfrage

Die DAX-Zeitintelligenzfunktionen sind aggregationsfähig.DAX time-intelligence functions are aggregation aware. Die folgende Abfrage führt die Aggregation aus, da die DATESYTD-Funktion eine Tabelle mit CalendarDay-Werten generiert, und die Aggregationstabelle weist eine Granularität auf, die von den „GroupBy“-Spalten in der Date-Tabelle berücksichtigt wird.The following query hits the aggregation because the DATESYTD function generates a table of CalendarDay values, and the aggregation table is at a granularity that is covered for group-by columns in the Date table. Hier handelt es sich um ein Beispiel für einen Tabellenwertfilter für die CALCULATE-Funktion, die Aggregationen verarbeiten kann.This is an example of a table-valued filter to the CALCULATE function, which can work with aggregations.

SUMMARIZECOLUMNS-Aggregationsabfrage

Aggregationen basierend auf GroupBy-SpaltenAggregation based on GroupBy columns

Hadoop-basierte Big Data-Modelle unterscheiden sich von dimensionalen Modellen.Hadoop-based big data models have different characteristics than dimensional models. Zur Vermeidung von Verknüpfungen zwischen großen Tabellen verwenden Big Data-Modelle oft keine Beziehungen, aber sie denormalisieren Dimensionsattribute in Faktentabellen.To avoid joins between large tables, big data models often don't use relationships, but denormalize dimension attributes to fact tables. Sie können auf solche Big Data-Modelle für interaktive Analysen zugreifen, indem Sie auf GroupBy-Spalten basierende Aggregationen verwenden.You can unlock such big data models for interactive analysis by using aggregations based on GroupBy columns.

Die folgende Tabelle enthält die numerische Spalte Movement, die aggregiert werden soll.The following table contains the Movement numeric column to be aggregated. Alle anderen Spalten bezeichnen Attribute, nach denen gruppiert werden kann.All the other columns are attributes to group by. Die Tabelle enthält IoT-Daten und eine sehr hohe Anzahl an Zeilen.The table contains IoT data and a massive number of rows. Der Speichermodus ist „DirectQuery“.The storage mode is DirectQuery. Abfragen der Datenquelle, die das gesamte Dataset aggregieren, sind aufgrund des hohen Volumens sehr langsam.Queries on the data source that aggregate across the whole dataset are slow because of the sheer volume.

Eine IoT-Tabelle

Fügen Sie eine Aggregationstabelle hinzu, die nach den meisten Attributen gruppiert ist, aber Attribute mit hoher Kardinalität ausschließt (z. B. „longitude“ und „latitude“), um eine interaktive Analyse dieses Datasets zu ermöglichen.To enable interactive analysis on this dataset, you can add an aggregation table that groups by most of the attributes, but excludes the high-cardinality attributes like longitude and latitude. Dadurch wird die Anzahl der Zeilen deutlich verringert und ist nun klein genug, um gut in den In-Memory-Cache zu passen.This dramatically reduces the number of rows, and is small enough to comfortably fit into an in-memory cache.

Tabelle „Driver Activity Agg“

Sie können die Aggregationszuordnungen für die Tabelle Driver Activity Agg im Dialogfeld Aggregationen verwalten definieren.You define the aggregation mappings for the Driver Activity Agg table in the Manage aggregations dialog.

Dialogfeld „Manage Aggregations“ für die Tabelle „Driver Activity Agg“

Bei Aggregationen, die auf GroupBy-Spalten basieren, sind die GroupBy-Einträge nicht optional.In aggregations based on GroupBy columns, the GroupBy entries aren't optional. Ohne sie werden die Aggregationen nicht gefunden.Without them, the aggregations won't get hit. Dies unterscheidet sich von der Verwendung von Aggregationen, die auf Beziehungen basieren, da die GroupBy-Einträge bei diesen optional sind.This is different from using aggregations based on relationships, where the GroupBy entries are optional.

In der folgenden Tabelle werden die Aggregationen der Driver Activity Agg-Tabelle gezeigt.The following table shows the aggregations for the Driver Activity Agg table.

Aggregationstabelle „Driver Activity Agg“

Sie können den Speichermodus „Import“ für die aggregierte Tabelle Driver Activity Agg festlegen.You can set the storage mode of the aggregated Driver Activity Agg table to Import.

Beispiel für eine GroupBy-AggregationsabfrageGroupBy aggregation query example

Die folgende Abfrage findet die Aggregation, weil die Spalte Activity Date in der Aggregationstabelle enthalten ist.The following query hits the aggregation, because the Activity Date column is covered by the aggregation table. Die COUNTROWS-Funktion verwendet die Aggregation Count table rows.The COUNTROWS function uses the Count table rows aggregation.

Erfolgreiche GroupBy-Aggregationsabfrage

Insbesondere für Modelle, die Filterattribute in Faktentabellen enthalten, kann es sich als nützlich erweisen, Count table rows-Aggregationen zu verwenden.Especially for models that contain filter attributes in fact tables, it's a good idea to use Count table rows aggregations. Power BI kann Abfragen des Datasets mit COUNTROWS durchführen, auch wenn dies nicht explizit vom Benutzer angefordert wurde.Power BI may submit queries to the dataset using COUNTROWS in cases where it is not explicitly requested by the user. Das Dialogfeld „Filter“ zeigt z.B. die Zeilenanzahl für jeden Wert an.For example, the filter dialog shows the count of rows for each value.

Filterdialogfeld

Kombinierte AggregationsmethodenCombined aggregation techniques

Sie können die Methoden mit Beziehungen und GroupBy-Spalten für Aggregationen kombinieren.You can combine the relationships and GroupBy columns techniques for aggregations. Aggregationen, die auf Beziehungen basieren, erfordern möglicherweise, dass die denormalisierten Dimensionstabellen in mehrere Tabellen aufgeteilt werden.Aggregations based on relationships may require the denormalized dimension tables to be split into multiple tables. Wenn dies für bestimmte Dimensionstabellen zu kostspielig oder umständlich ist, können Sie die erforderlichen Attribute für diese Dimensionen in der Aggregationstabelle replizieren und für andere Beziehungen verwenden.If this is costly or impractical for certain dimension tables, you can replicate the necessary attributes in the aggregation table for those dimensions, and use relationships for others.

Im folgenden Modell werden beispielsweise die Attribute Month, Quarter, Semester und Year in der Tabelle Sales Agg repliziert.For example, the following model replicates Month, Quarter, Semester, and Year in the Sales Agg table. Zwischen der Sales Agg- und der Date-Tabelle besteht keine Beziehung, aber es gibt Beziehungen zu Customer und ProductSubcategory.There is no relationship between Sales Agg and the Date table, but there are relationships to Customer and Product Subcategory. Sales Agg befindet sich im Speichermodus „Import“.The storage mode of Sales Agg is Import.

Kombinierte Aggregationsmethoden

In der folgenden Tabelle werden die Einträge angezeigt, die Sie im Dialogfeld Manage aggregations (Aggregationen verwalten) für die Tabelle Sales Agg festgelegt haben.The following table shows the entries set in the Manage aggregations dialog for the Sales Agg table. Die GroupBy-Einträge, bei denen Date die Detailtabelle ist, müssen Aggregationen für Abfragen finden, die nach den Date-Attributen gruppieren.The GroupBy entries where Date is the detail table are mandatory, to hit aggregations for queries that group by the Date attributes. Die GroupBy-Einträge für CustomerKey und ProductSubcategoryKey wirken sich wie im vorherigen Beispiel nicht darauf aus, ob Aggregationen gefunden werden, da Beziehungen vorhanden. DISTINCTCOUNT ist dabei eine Ausnahme.As in the previous example, the GroupBy entries for CustomerKey and ProductSubcategoryKey don't affect aggregation hits, except for DISTINCTCOUNT, because of the presence of relationships.

Einträge für die Aggregationstabelle „Sales Agg“

Beispiele für Abfragen kombinierter AggregationenCombined aggregation query examples

Die folgende Abfrage findet die Aggregation, weil die Aggregationstabelle CalendarMonth enthält und der Zugriff auf CategoryName über 1:n-Beziehungen möglich ist.The following query hits the aggregation, because the aggregation table covers CalendarMonth, and CategoryName is accessible via one-to-many relationships. Für die Spalte SalesAmount wird die SUM-Aggregation verwendet.SalesAmount uses the SUM aggregation.

Abfragebeispiel, in dem die Aggregation gefunden wird

Die folgende Abfrage findet die Aggregation nicht, weil die Aggregationstabelle CalendarDay nicht enthält.The following query doesn't hit the aggregation, because the aggregation table doesn't cover CalendarDay.

Screenshot: Text einer Abfrage, die den Wert „CalendarDay“ enthält

Die folgenden Zeitintelligenzabfrage findet die Aggregation nicht, weil die DATESYTD-Funktion eine Tabelle aus CalendarDay-Werten generiert und die Aggregation CalendarDay nicht enthält.The following time-intelligence query doesn't hit the aggregation, because the DATESYTD function generates a table of CalendarDay values, and the aggregation table doesn't cover CalendarDay.

Screenshot: Text einer Abfrage, die die Funktion „DATESYTD“ enthält

AggregationsrangfolgeAggregation precedence

Durch eine Aggregationsrangfolge können mehrere Aggregationstabellen von einer einzelnen Unterabfrage berücksichtigt werden.Aggregation precedence allows multiple aggregation tables to be considered by a single subquery.

Bei dem folgenden Beispiel handelt es sich um ein zusammengesetztes Modell, das mehrere Quellen enthält:The following example is a composite model containing multiple sources:

  • Die Tabelle Driver Activity befindet sich im DirectQuery-Modus und enthält mehr als eine Billion Zeilen mit IoT-Daten, die aus einem Big Data-System stammen.The Driver Activity DirectQuery table contains over a trillion rows of IoT data sourced from a big-data system. Sie verarbeitet Drillthroughabfragen zum Anzeigen einzelner IoT-Lesevorgänge in kontrollierten Filterkontexten.It serves drillthrough queries to view individual IoT readings in controlled filter contexts.
  • Die Tabelle Driver Activity Agg ist eine Zwischenaggregationstabelle im DirectQuery-Modus.The Driver Activity Agg table is an intermediate aggregation table in DirectQuery mode. Sie enthält mehr als eine Milliarde Zeilen in Azure SQL Data Warehouse und ihre Quelle wird mithilfe von ColumnStore-Indizes optimiert.It contains over a billion rows in Azure SQL Data Warehouse and is optimized at the source using columnstore indexes.
  • Die Import-Tabelle Driver Activity Agg2 weist eine hohe Granularität auf, weil es nur wenige GroupBy-Attribute gibt und die Kardinalität gering ist.The Driver Activity Agg2 Import table is at a high granularity, because the group-by attributes are few and low cardinality. Die Anzahl der Zeilen kann nur wenige Tausend betragen, sodass sie problemlos in einen In-Memory-Cache passt.The number of rows could be as low as thousands, so it can easily fit into an in-memory cache. Diese Attribute werden von einem Dashboard einer wichtigen Führungsperson verwendet, weshalb darauf verweisende Abfragen so schnell wie möglich ausgeführt werden sollen.These attributes happen to be used by a high-profile executive dashboard, so queries referring to them should be as fast as possible.

Hinweis

DirectQuery-Aggregationstabellen, die eine andere Datenquelle als die Detailtabelle verwenden, werden nur unterstützt, wenn die Aggregationstabelle aus SQL Server, Azure SQL oder Azure SQL Data Warehouse stammt.DirectQuery aggregation tables that use a different data source from the detail table are only supported if the aggregation table is from a SQL Server, Azure SQL, or Azure SQL Data Warehouse source.

Der Speicherbedarf dieses Modells ist relativ gering, obwohl es ein großes Dataset verfügbar macht.The memory footprint of this model is relatively small, but it unlocks a huge dataset. Es stellt eine ausgeglichene Architektur dar, weil es die Abfragelast auf alle Komponenten der Architektur verteilt und diese abhängig von ihren Stärken einsetzt.It represents a balanced architecture because it spreads the query load across components of the architecture, utilizing them based on their strengths.

Tabellen für ein Modell mit wenig Speicherbedarf, das ein großes Dataset zur Verfügung stellt

Im Dialogfeld Aggregationen verwalten kann das Feld Rangfolge für Driver Activity Agg2 auf 10 festgelegt werden. Dies ist ein höherer Wert als bei Driver Activity Agg.The Manage aggregations dialog for Driver Activity Agg2 sets the Precedence field to 10, which is higher than for Driver Activity Agg. Aufgrund der höheren Rangfolgeneinstellung berücksichtigen Abfragen, die Aggregationen verwenden, zuerst die Tabelle Driver Activity Agg2.The higher precedence setting means queries that use aggregations will consider Driver Activity Agg2 first. Unterabfragen, deren Granularität es nicht ermöglicht, dass sie von Driver Activity Agg2 beantwortet werden könnten, berücksichtigen stattdessen Driver Activity Agg.Subqueries that aren't at the granularity that can be answered by Driver Activity Agg2 will consider Driver Activity Agg instead. Detailabfragen, die von keiner der Aggregationstabellen beantwortet werden können, werden an Driver Activity weitergeleitet.Detail queries that cannot be answered by either aggregation table will be directed to Driver Activity.

Die in der Spalte Detailtabelle angegebene Tabelle ist Driver Activity und nicht Driver Activity Agg, weil verkettete Aggregationen nicht zulässig sind.The table specified in the Detail Table column is Driver Activity, not Driver Activity Agg, because chained aggregations are not allowed.

Screenshot: Dialogfeld „Aggregationen verwalten“, „Rangfolge“ hervorgehoben

In der folgenden Tabelle werden die Aggregationen der Driver Activity Agg2-Tabelle gezeigt.The following table shows the aggregations for the Driver Activity Agg2 table.

Aggregationstabelle „Driver Activity Agg2“

Erkennen, ob Abfragen Aggregationen findenDetect whether queries hit or miss aggregations

Der SQL Server Profiler kann ermitteln, ob Abfragen von der In-Memory-Cache-Speicher-Engine zurückgegeben werden oder von DirectQuery an die Datenquelle gepusht werden.SQL Profiler can detect whether queries are returned from the in-memory cache storage engine, or pushed to the data source by DirectQuery. Sie können denselben Vorgang verwenden, um zu ermitteln, ob Aggregationen gefunden werden.You can use the same process to detect whether aggregations are being hit. Weitere Informationen finden Sie unter Abfragen, die den Cache finden.For more information, see Queries that hit or miss the cache.

Der SQL Server Profiler stellt außerdem das erweiterte Ereignis Query Processing\Aggregate Table Rewrite Query bereit.SQL Profiler also provides the Query Processing\Aggregate Table Rewrite Query extended event.

Der folgende JSON-Codeausschnitt ist ein Beispiel für die Ausgabe des Ereignisses, wenn eine Aggregation verwendet wird.The following JSON snippet shows an example of the output of the event when an aggregation is used.

  • matchingResult gibt an, dass für die Unterabfrage eine Aggregation verwendet wurde.matchingResult shows that the subquery used an aggregation.
  • dataRequest gibt die GroupBy-Spalten und aggregierten Spalten an, die von der Unterabfrage verwendet wurden.dataRequest shows the GroupBy column(s) and aggregated column(s) the subquery used.
  • mapping gibt die Spalten in der Aggregationstabelle an, die zugeordnet wurden.mapping shows the columns in the aggregation table that were mapped to.

Ausgabe eines Ereignisses, wenn Aggregationen verwendet wurden

Synchronisieren von CachesKeep caches in sync

Aggregationen, bei denen die Speichermodi „DirectQuery“, „Import“ und/oder „Dual“ kombiniert werden, können unterschiedliche Daten zurückgeben, es sei denn, der In-Memory-Cache wird dauerhaft mit den Quelldaten synchronisiert.Aggregations that combine DirectQuery, Import, and/or Dual storage modes may return different data unless the in-memory cache is kept in sync with the source data. Die Abfrageausführung versucht beispielsweise nicht, Datenprobleme zu maskieren, indem DirectQuery-Ergebnisse entsprechend den zwischengespeicherten Werten gefiltert werden.For example, query execution won't attempt to mask data issues by filtering DirectQuery results to match cached values. Bei Bedarf können Sie auf etablierte Verfahren zum Umgang mit derartigen Problemen an der Quelle zurückgreifen.There are established techniques to handle such issues at the source, if necessary. Leistungsoptimierungen sollten nur auf eine Weise verwendet werden, die Ihre Geschäftsanforderungen nicht gefährdet.Performance optimizations should be used only in ways that don't compromise your ability to meet business requirements. Es liegt in Ihrer Verantwortung, Ihre eigenen Datenflüsse zu kennen und den Entwurf entsprechend anzupassen.It's your responsibility to know your data flows and design accordingly.

Weitere SchritteNext steps

Weitere Informationen über zusammengesetzte Modelle finden Sie unter:For more information about composite models, see:

Weitere Informationen über DirectQuery finden Sie unter:For more information about DirectQuery, see: