Aggregationen in Power BI DesktopAggregations in Power BI Desktop

Durch Aggregationen können Sie interaktive Analysen von Big Data in Power BI wie nie zuvor durchführen.Using aggregations in Power BI enables interactive analysis over big data in ways that previously weren't possible. Aggregationen können die Kosten zum Nutzen großer Datasets zur Entscheidungsfindung drastisch senken.Aggregations can dramatically reduce the cost of unlocking large datasets for decision making.

Aggregationen in Microsoft Power BI Desktop

Die Vorteile von Aggregationen sind die folgenden:The following list provides advantages to using aggregations:

  • Abfrageleistung bei Big Data: Bei der Interaktion der Benutzer mit Visuals in Power BI-Berichten werden DAX-Abfragen an das Dataset gesendet.Query performance over big data - as users interact with visuals on Power BI reports, DAX queries are submitted to the dataset. Durch das Zwischenspeichern von Daten auf der aggregierten Ebene werden Abfragen beschleunigt, da nur ein Bruchteil der Ressourcen verwendet wird, die auf Detailebene erforderlich sind.Boost query speeds by caching data at the aggregated level, using a fraction of the resources required at the detail level. Nutzen Sie Big Data wie noch nie zuvor.Unlock big data in a way that would otherwise be impossible.
  • Optimierte Datenaktualisierung: Durch das Zwischenspeichern von Daten auf aggregierter Ebene wird die Cachegröße gesenkt und die Aktualisierungsdauer verkürzt.Data refresh optimization - reduce cache sizes and refresh times by caching data at the aggregated level. So können Sie Ihren Benutzern Daten noch schneller zur Verfügung stellen.Speed up the time to make data available for users.
  • Ausgeglichene Architekturen: Der In-Memory-Cache von Power BI verarbeitet aggregierte Abfragen effektiv.Achieve balanced architectures - allow the Power BI in-memory cache to handle aggregated queries, which it does effectively. Schränken Sie Abfragen, die direkt an die Datenquelle gesendet wurden, im DirectQuery-Modus ein, um die Parallelitätsgrenzwerte nicht zu unter- oder überschreiten.Limit queries sent to the data source in DirectQuery mode, helping stay within concurrency limits. Abfragen, die durchkommen, sind zumeist gefilterte Abfragen auf Transaktionsebene, die von Data Warehouse- und Big Data-Systemen normalerweise gut verarbeitet werden können.Queries that do get through tend to be filtered, transactional-level queries, which data warehouses and big-data systems normally handle well.

Speicher auf TabellenebeneTable-level storage

Der Speicher auf Tabellenebene wird normalerweise mit dem Aggregationsfeature verwendet.Table-level storage is normally used with the aggregations feature. Weitere Informationen finden Sie im Artikel zum Speichermodus in Power BI Desktop.See the storage mode in Power BI Desktop article for more information.

DatenquellentypenData source types

Aggregationen werden mit Datenquellen verwendet, die dimensionale Modelle darstellen, wie z.B. Data Warehouses und Data Marts, sowie mit Hadoop-basierten Datenquellen.Aggregations are used with data sources representing dimensional models, such as a data warehouses, data marts, and Hadoop-based big-data sources. In diesem Artikel werden typische Unterschiede bei der Modellierung in Power BI für jeden Datenquellentyp beschrieben.This article describes typical modeling differences in Power BI for each type of data source.

Alle Power BI-Import- und DirectQuery-Quellen (mit einer Dimension) funktionieren mit Aggregationen.All Power BI Import and (non-multidimensional) DirectQuery sources work with aggregations.

Aggregationen basierend auf BeziehungenAggregations based on relationships

Aggregationen, die auf Beziehungen basieren, werden normalerweise mit dimensionalen Modellen verwendet.Aggregations based on relationships are typically used with dimensional models. Power BI-Datasets, die ihre Daten aus Data Warehouses und Data Marts beziehen, weisen ein Stern- oder Schneeflockenschema auf, bei dem Beziehungen zwischen Dimensionstabellen und Faktentabellen bestehen.Power BI datasets that source from data warehouses and data marts resemble star/snowflake schemas with relationships between dimension tables and fact tables.

Sehen Sie sich das folgende Modell an, das sich auf eine einzelne Datenquelle bezieht.Consider the following model, which is from a single data source. Gehen wir zunächst davon aus, dass alle Tabellen den Speichermodus „DirectQuery“ verwenden.Let’s say all the tables are using DirectQuery to start with. 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.

Tabellenmodell

Stattdessen erstellen wir die Tabelle Sales Agg als Aggregationstabelle.Instead, we create the Sales Agg table as an aggregation table. Die Granularität ist höher als bei Sales. Deshalb enthält sie deutlich weniger Zeilen.It's at a higher granularity than Sales, so it'll contain far fewer rows. Die Zeilenanzahl sollte mit der Summe von SalesAmount übereinstimmen (gruppiert nach CustomerKey, DateKey und ProductSubcategoryKey).The number of rows should equal the sum of SalesAmount grouped by CustomerKey, DateKey, and ProductSubcategoryKey. Statt Milliarden sind jetzt nur noch Millionen Zeilen enthalten, was deutlich leichter verwaltet werden kann.Instead of billions, it might be millions of rows, which are much easier to manage.

Gehen wir davon aus, dass die folgenden Dimensionstabellen am häufigsten für Abfragen mit hohem Unternehmenswert verwendet werden.Let's assume that the following dimension tables are the most commonly used for the queries with high business value. Dabei handelt es sich um Tabellen, die Sales Agg mit 1:n-Beziehungen (oder n:1-Beziehungen) filtern können.They're the tables that can filter Sales Agg using one-to-many (or many-to-one) relationships.

  • GeografieGeography
  • KundeCustomer
  • DatumDate
  • Product SubcategoryProduct Subcategory
  • Product CategoryProduct Category

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

Aggregationstabelle in einem Modell

Hinweis

Die Tabelle Sales Agg ist nur eine weitere Tabelle, weshalb sie flexibel auf unterschiedlichen Arten geladen werden kann.The Sales Agg table is just another table, so it has the flexibility of being loaded in a variety of ways. Die Aggregation kann z.B. in der Quelldatenbank mit ETL- oder ELT-Vorgängen oder mit dem M-Ausdruck für die Tabelle erfolgen.For example, aggregation can be performed in the source database using ETL/ELT processes, or by the M expression for the table. Die Tabelle kann den Speichermodus „Import“ mit oder ohne inkrementelle Aktualisierung in Power BI Premium verwenden, oder ihr Modus kann auf „DirectQuery“ festgelegt werden, um mit Columnstore-Indizes schnellere Abfragen zu ermöglichen.It can use Import storage mode with or without incremental refresh in Power BI Premium, or it can be DirectQuery and optimized for fast queries using columnstore indexes. Diese Flexibilität ermöglicht ausgeglichene Architekturen, in denen die Abfragelast verteilt wird, um Engpässe zu vermeiden.This flexibility enables balanced architectures that spread query load to avoid bottlenecks.

SpeichermodusStorage mode

Bleiben wir bei unserem Beispiel.Let's continue with the example we're using. Wir haben den Speichermodus von Sales Agg auf Import festgelegt, um Abfragen zu beschleunigen.We set the storage mode of Sales Agg to Import to speed up queries.

Festlegen des Speichermodus

Anschließend wird ein Dialogfeld angezeigt, das uns darüber informiert, dass der Speichermodus der verwandten Dimensionstabellen auf Dual festgelegt werden kann.When we do so, the following dialog appears, letting us know that the related dimension tables can be set to storage mode Dual.

Dialogfeld „Speichermodus“

Wenn der Speichermodus der verwandten Dimensionstabellen auf Dual festgelegt wird, können Sie je nach Unterabfrage entweder „Import“ oder „DirectQuery“ verwenden.Setting them to Dual allows the related dimension tables to act as either Import or DirectQuery depending on the subquery.

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

Weitere Informationen zum Speichermodus Dual finden Sie im Artikel zum Speichermodus in Power BI Desktop.For more information on the Dual storage mode, see the storage mode article.

Starke und schwache Beziehungen im VergleichStrong vs. weak relationships

Auf Beziehungen basierende Aggregationstreffer erfordern starke Beziehungen.Aggregations hits based on relationships require strong relationships.

Starke Beziehungen umfassen die folgenden Kombinationen, bei denen beide Tabellen aus einer einzelnen Quelle stammen.Strong relationships include the following 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

Der einzige Fall, bei der eine quellenübergreifende Beziehung als stark eingestuft wird, ist der, wenn beide Tabellen den Speichermodus „Import“ aufweisen.The only case where a cross-source relationship is considered strong is if both tables are Import. m:n-Beziehungen werden immer als schwach eingestuft.Many-to-many relationships are always considered weak.

Informationen zu quellenübergreifenden Aggregationstreffern, die nicht von Beziehungen abhängen, finden Sie weiter unten im Abschnitt zu Aggregationen basierend auf gruppierten Spalten.For cross-source aggregation hits that don't depend on relationships, see section below on aggregations based on group-by columns.

Aggregationstabellen sind nicht adressierbarAggregation tables are not addressable

Benutzer mit schreibgeschütztem Zugriff auf das Dataset können keine Aggregationstabellen abfragen.Users with read-only access to the dataset cannot query aggregation tables. So können bei der Verwendung mit der RLS Sicherheitsbedenken vermieden werden.This avoids security concerns when used with 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; they don't even need to know the aggregation table exists.

Aus diesem Grund sollte die Tabelle Sales Agg ausgeblendet werden.For this reason, the Sales Agg table should be hidden. Wenn das nicht der Fall ist, wird sie vom Dialogfeld „Aggregationen verwalten“ ausgeblendet, wenn Sie auf „Alle übernehmen“ klicken.If it is not, the Manage aggregations dialog will set it to hidden upon clicking the Apply all button.

Dialogfeld „Manage aggregations“ (Aggregationen verwalten)Manage aggregations dialog

Als Nächstes definieren wir die Aggregationen.Next we define the aggregations. Klicken Sie mit der rechten Maustaste auf die Tabelle Sales Agg, um das Kontextmenü zu öffnen, und wählen Sie Manage aggregations (Aggregationen verwalten).Select the Manage aggregations context menu for the Sales Agg table, by right-clicking on the table.

Auswahl: „Manage aggregations“ (Aggregationen verwalten) im Kontextmenü

Das Dialogfeld Manage aggregations (Aggregationen verwalten) wird angezeigt.The Manage aggregations dialog is displayed. Für jede Spalte in der Tabelle Sales Agg wird eine Zeile angezeigt, in der Sie das Aggregationsverhalten festlegen können.It shows a row for each column in the Sales Agg table, where we can specify the aggregation behavior. Abfragen an das Power BI-Dataset, das auf die Tabelle Sales verweist, werden intern an die Tabelle Sales Agg weitergeleitet.Queries submitted to the Power BI dataset that refers to the Sales table are internally redirected to the Sales Agg table. Consumer des Datasets müssen nicht wissen, dass die Tabelle Sales Agg existiert.Consumers of the dataset don't need to know the Sales Agg table even exists.

Dialogfeld „Manage aggregations“ (Aggregationen verwalten)

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

Aggregationstabelle

ZusammenfassungsfunktionSummarization function

Sie können in der Dropdownliste „Summarization“ (Zusammenfassung) die folgenden Werte auswählen:The Summarization drop-down offers the following values for selection.

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

ÜberprüfungenValidations

Die folgenden relevanten Überprüfungen werden vom Dialogfeld erzwungen:The following notable validations are enforced by the dialog:

  • Die ausgewählte Detailspalte muss den gleichen Datentyp wie die Aggregationsspalte aufweisen. Ausgenommen sind die Zusammenfassungsfunktionen „Count“ und „Count table rows“.The detail column selected must have the same datatype as the aggregation column except for the Count and Count table rows summarization functions. „Count“ und „Count table rows“ sind nur für Integeraggregationsspalten verfügbar und erfordern keinen übereinstimmenden Datentyp.Count and Count table rows are only offered 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. Es ist beispielsweise nicht möglich, Aggregationen für Tabelle A einzurichten, wenn diese auf Tabelle B verweist, deren Aggregationen wiederum auf Tabelle C verweisen.For example, it is not possible to set up aggregations on Table A referring to Table B that has aggregations referring to Table C.
  • Doppelte Aggregationen, bei denen zwei Einträge die gleiche Zusammenfassungsfunktion verwenden und auf die gleiche Detailtabelle bzw. -spalte verweisen, sind nicht zulässig.Duplicate aggregations where two entries use the same summarization function and refer to the same detail table/column aren't allowed.
  • Die Detailtabelle muss den Modus „DirectQuery“ aufweisen (und nicht „Import“).Detail table must be DirectQuery, not Import.

Die meisten dieser Ü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 such 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

Gruppierte SpaltenGroup by columns

In diesem Beispiel sind die drei GroupBy-Einträge optional. Sie wirken sich nicht auf das Aggregationsverhalten aus (ausgenommen ist die Beispielabfrage DISTINCTCOUNT, die in einem der folgenden Bilder veranschaulicht wird).In this example, the three GroupBy entries are optional; they do not affect aggregation behavior (except for the DISTINCTCOUNT example query, shown in the upcoming image). Sie werden der Lesbarkeit halber einbezogen.They are included primarily for readability purposes. Ohne diese GroupBy-Einträge würden die Aggregationen immer noch basierend auf den Beziehungen gefunden werden.Without these GroupBy entries, the aggregations would still get hit based on the relationships. Dieses Verhalten unterscheidet sich vom Verhalten von Aggregationen ohne Beziehungen. Dieses wird im Big Data-Beispiel weiter unten in diesem Artikel veranschaulicht.This is different behavior from using aggregations without relationships, which is covered by the big data example that follows later in this article.

Inaktive BeziehungenInactive relationships

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 is not supported.

Erkennen, ob Aggregationen von Abfragen gefunden werdenDetecting whether aggregations are hit or missed by queries

Im Artikel zum Speichermodus in Power BI Desktop erhalten Sie weitere Informationen dazu, wie Sie erkennen, ob Abfragen aus dem In-Memory-Cache (Speicher-Engine) oder von DirectQuery mit dem SQL Server Profiler (an die Datenquelle gepusht) zurückgegeben werden.For more information about how to detect whether queries are returned from the in-memory cache (storage engine), or DirectQuery (pushed to the data source) using SQL Profiler, see the storage mode article. Dieser Vorgang kann auch verwendet werden, um zu erkennen, ob Aggregationen gefunden werden.That process can also be used to detect whether aggregations are being hit, too.

Darüber hinaus wird das folgende erweiterte Ereignis im SQL Server Profiler bereitgestellt:Additionally, the following extended event is provided in SQL Profiler.

Query Processing\Aggregate Table Rewrite Query

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 an aggregation was used for the subquery.
  • dataRequest gibt die Spalten an, nach denen gruppiert wurde, sowie die aggregierten Spalten, die von der Unterabfrage verwendet wurde.dataRequest shows the group-by column(s) and aggregated column(s) used by the subquery.
  • 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

BeispielabfragenQuery 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. Die Aggregation Sum für SalesAmount wird verwendet.The Sum aggregation for SalesAmount will be used.

Beispielabfrage

Die folgende Abfrage führt nicht zu einem Aggregationstreffer.The following query doesn't hit the aggregation. Obwohl Sie die Summe von SalesAmount angefordert haben, wird ein „Gruppieren nach“-Vorgang für eine Spalte in der Product-Tabelle ausgeführt. Das entspricht nicht der Granularität, die zum Finden der Aggregation erforderlich ist.Despite requesting the sum of SalesAmount, it's performing a group by operation on a column in the Product table, which is not at the granularity that can hit the aggregation. Wenn Sie sich die Beziehungen im Modell ansehen, werden Sie feststellen, dass eine Produktunterkategorie mehrere Product-Zeilen aufweisen kann. Die Abfrage könnte nicht feststellen, für welches Produkt die Aggregation durchgeführt werden soll.If you observe the relationships in the model, a product subcategory can have multiple Product rows; 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.

Beispielabfrage

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 the aggregation can be hit. 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:

Beispielabfrage

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.

Beispielabfrage

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.

Beispielabfrage

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. Diese Vorgehensweise unterliegt immer noch dem Leistungsschwellenwert, bei dem circa zwei bis fünf Millionen eindeutige Werte die Abfrageleistung beeinflussen können.This technique is still subject to the performance threshold where over approximately two to five million distinct values can affect query performance. Sie kann jedoch bei Szenarios nützlich sein, in denen die Detailtabelle Milliarden von Zeilen und die Spalten zwei bis fünf Millionen eindeutige Werte enthält.However, it can be useful in scenarios where there are billions of rows in the detail table and 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 distinct count can perform faster than scanning the table with billions of rows, even if it were cached into memory.

Beispielabfrage

RLSRLS

RLS-Ausdrücke (Row Level Security, Sicherheit auf Zeilenebene) sollten die Aggregationstabelle und die Detailtabelle filtern, damit sie ordnungsgemäß funktionieren.Row level security (RLS) expressions should filter both the aggregation table and the detail table to work correctly. Danach funktioniert der RLS-Ausdruck für die Tabelle Geography, da in den Beziehungen zu den Tabellen Sales und Sales Agg nach „Geography“ gefiltert wird.Following the example, an RLS expression on the Geography table will work because Geography is on the filtering side of relationships to both the Sales table and the Sales Agg table. Auf Abfragen für die Aggregationstabelle und andere Abfragen wurde die Sicherheit auf Zeilenebene erfolgreich angewendet.Queries that hit the aggregation table and those that do not will have RLS successfully applied.

Aggregationen unter „Rollen verwalten“

Ein RLS-Ausdruck in der Tabelle Product würde nur die Tabelle Sales filtern, nicht die Tabelle Sales Agg.An RLS expresson on the Product table would filter only the Sales table, not the Sales Agg table. Diese Vorgehensweise wird nicht empfohlen.This is not recommended. Abfragen, die von Benutzern übermittelt werden, die über diese Rolle auf das Dataset zugreifen, profitieren nicht von Aggregationstreffern.Queries submitted by users who access the dataset using this role would not benefit from aggregation hits. Da die Aggregationstabelle eine weitere Darstellung derselben Daten in der Detailtabelle ist, wäre es nicht sicher, Abfragen aus der Aggregationstabelle zu beantworten, da der RLS-Filter nicht angewendet werden kann.Since the aggregation table is another representation of the same data in the detail table, it would be insecure to answer queries from the aggregation table because the RLS filter cannot be applied.

Ein RLS-Ausdruck für Tabelle die Sales Agg filtert nur die Aggregationstabelle, nicht die Detailtabelle.An RLS expression on the Sales Agg table itself would filter only the aggregation table and not the detail table. Diese Vorgehensweise ist nicht zulässig.This is disallowed.

Aggregationen unter „Rollen verwalten“

Aggregationen basierend auf gruppierten SpaltenAggregations based on group-by columns

Hadoop-basierte Big Data-Modelle unterscheiden sich von dimensionalen Modellen.Hadoop-based big data models have different characteristics than dimensional models. Sie verlassen sich zumeist nicht auf Beziehungen, um Joins zwischen großen Tabellen zu vermeiden.To avoid joins between large tables, they often don't rely on relationships. Stattdessen werden Dimensionsattribute oft zu Faktentabellen denormalisiert.Instead, dimension attributes are often denormalized to fact tables. Derartige Big Data-Modelle können für interaktive Analysen mit Aggregationen basierend auf gruppierten Spalten eingesetzt werden.Such big data models can be unlocked for interactive analysis using aggregations based on group-by 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 sind Attribute, nach denen gruppiert werden kann.All other columns are attributes to group by. Sie enthält IoT-Daten und eine sehr hohe Anzahl an Zeilen.It 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 (wie z.B. longitude und latitude), um eine interaktive Analyse dieses Datasets zu ermöglichen.To enable interactive analysis on this dataset, we 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. Der Speichermodus von Driver Activity Agg ist „Import“.The storage mode of Driver Activity Agg is Import.

Tabelle „Driver Activity Agg“

Als Nächstes definieren wir die Aggregationszuordnungen im Dialogfeld Manage aggregations (Aggregationen verwalten).Next, we define the aggregation mappings in the Manage aggregations dialog. Für jede Spalte in der Tabelle Driver Activity Agg wird eine Zeile angezeigt, in der Sie das Aggregationsverhalten festlegen können.It displays a row for each column in the Driver Activity Agg table, where we can specify the aggregation behavior.

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

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“

Gruppierte SpaltenGroup by columns

In diesem Beispiel sind die GroupBy-Einträge nicht optional. Ohne diese Einträge würden Aggregationen nicht gefunden werden.In this example, the GroupBy entries are not optional; without them the aggregations wouldn't get hit. Dieses Verhalten unterscheidet sich vom Verhalten beim Verwenden von Aggregationen basierend auf Beziehungen, was bereits weiter oben in diesem Artikel mit einem Beispiel zu dimensionalen Modellen veranschaulicht wurde.This is different behavior to using aggregations based on relationships, which is covered by the dimensional model example provided previously in this article.

BeispielabfragenQuery examples

Die folgende Abfrage findet die Aggregation, weil die Spalte Activity Date von der Aggregationstabelle abgedeckt wird.The following query hits the aggregation because the Activity Date column is covered by the aggregation table. Die Aggregation „Count table rows“ wird von der Funktion COUNTROWS verwendet.The Count table rows aggregation is used by the COUNTROWS function.

Beispielabfrage

Besonders 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.

Dialogfeld „Filter“

RLSRLS

Die oben beschriebenen RLS-Regeln für auf Beziehungen basierende Aggregationen (d. h. ob ein RLS-Ausdruck die Aggregationstabelle, die Detailtabelle oder beide filtern kann) gelten auch für Aggregationen, die auf GroupBy-Spalten basieren.The same RLS rules detailed above for aggregations based on relationships, regarding whether an RLS expression can filter the aggregation table, detail table or both, also apply to aggregations based on group by columns. Im Beispiel kann ein RLS-Ausdruck, der auf die Tabelle Driver Activity angewendet wird, verwendet werden, um die Tabelle Driver Activity Agg zu filtern, da alle GroupBy-Spalten in der Aggregationstabelle auch in der Detailtabelle vorhanden sind.In the example, an RLS expression applied to the Driver Activity table can be used to filter the Driver Activity Agg table because all the group by columns in the aggregation table are covered by the detail table. Ein RLS-Filter für die Tabelle Driver Activity Agg kann jedoch nicht auf die Tabelle Driver Activity angewendet werden.An RLS filter on the Driver Activity Agg table on the other hand cannot be applied to the Driver Activity table so is disallowed.

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.

Sehen Sie sich das folgende Beispiel an.Consider the following example. Dies ist ein zusammengesetztes Modell, das mehrere DirectQuery-Quellen enthält.It's a composite model containing multiple DirectQuery sources.

  • 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.
  • 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 über eine Milliarde Zeilen in Azure SQL Data Warehouse und wird an der Quelle mit Columnstore-Indizes optimiert.It contains over a billion rows in Azure SQL DW and is optimized at the source using columnstore indexes.
  • Die Tabelle Driver Activity befindet sich im DirectQuery-Modus und enthält über eine Billion Zeilen mit IoT-Daten, die aus einem Big Data-System stammen.The Driver Activity table is DirectQuery and 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.

Hinweis

DirectQuery-Aggregationstabellen, die eine andere Datenquelle für die Detailtabelle verwenden, werden nur unterstützt, wenn die Aggregationstabelle von einer SQL Server-, Azure SQL-oder Azure SQL Data Warehouse-Quelle stammt.DirectQuery aggregation tables that use a different data source to the detail table are only supported if the aggregation table is from a SQL Server, Azure SQL or Azure SQL DW 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 Modelle mit wenig Speicherbedarf, die ein großes Dataset verfügbar machen

Das Dialogfeld Manage aggregations (Aggregationen verwalten) für Driver Activity Agg2 enthält das Feld Precedence (Rangfolge) mit einem Wert von 10. Dieser ist höher als der Wert für Driver Activity Add, was bedeutet, dass „Driver Activity Agg2“ von Abfragen mit Aggregationen als erstes berücksichtigt wird.The Manage aggregations dialog for Driver Activity Agg2 shows the Precedence field is 10, which is higher than that of Driver Activity Agg, which means it will be considered first by queries using aggregations. 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 are not 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.

In der Spalte Detailtabelle ist Driver Activity und nicht Driver Activity Agg angegeben, weil verkettete Aggregationen nicht zulässig sind (weitere Informationen unter Überprüfungen weiter oben in diesem Artikel).The table specified in the Detail Table column is Driver Activity, not Driver Activity Agg because chained aggregations are not allowed (see validations earlier in this article).

Dialogfeld „Manage aggregations“ (Aggregationen verwalten)

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“

Aggregationen basierend auf GroupBy-Spalten und BeziehungenAggregations based on group-by columns combined with relationships

Sie können die beiden Methoden für Aggregationen, die in diesem Artikel beschrieben wurden, auch miteinander kombinieren.You can even combine the two techniques for aggregations described earlier in this article. 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 be split into multiple tables. Wenn dies für bestimmte Dimensionstabellen zu aufwändig oder zu unpraktisch ist, können die erforderlichen Attribute in der Aggregationstabelle für bestimmte Dimensionen repliziert werden, und für andere können Beziehungen verwendet werden.If this is costly or impractical for certain dimension tables, the necessary attributes can be replicated in the aggregation table for certain dimension(s) and relationships used for others.

Im folgenden Modell werden Month, Quarter, Semester und Year in der Tabelle Sales Agg repliziert.The following model replicates Month, Quarter, Semester, and Year in the Sales Agg table. Es gibt keine Beziehung zwischen den Tabellen Sales Agg und Date.There is no relationship between Sales Agg and the Date table. Es gibt Beziehungen zu Customer und Product Subcategory.There are relationships to Customer and Product Subcategory. Sales Agg befindet sich im Speichermodus „Import“.The storage mode of Sales Agg is Import.

Kombinieren von 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. Wie auch im vorherigen Beispiel wirken sich die GroupBy-Einträge für CustomerKey und ProductSubcategoryKey nicht darauf aus, ob Aggregationen gefunden werden, da Beziehungen vorhanden sind (DISTINCTCOUNT wieder ausgenommen).As in the previous example, the GroupBy entries for CustomerKey and ProductSubcategoryKey do not affect aggregation hits because of the presence of relationships (again with the exception of DISTINCTCOUNT).

Aggregationstabelle „Sales Agg“

BeispielabfragenQuery examples

Die folgende Abfrage findet die Aggregation, weil CalendarMonth von der Aggregation abgedeckt wird und weil auf CategoryName über eine 1:n-Beziehung zugegriffen werden kann.The following query hits the aggregation because CalendarMonth is covered by the aggregation table, and CategoryName is accessible via one-to-many relationships. Die Aggregation „Sum“ für SalesAmount wird verwendet.The Sum aggregation for SalesAmount is used.

Beispielabfrage

Die folgende Abfrage findet die Aggregation nicht, weil die Spalte „CalendarDay“ nicht von der Aggregationstabelle abgedeckt wird.The following query doesn't hit the aggregation because CalendarDay is not covered by the aggregation table.

Beispielabfrage

Die folgende Zeitintelligenzabfrage findet die Aggregation nicht, weil die Funktion DATESYTD eine Tabelle aus CalendarDay-Werten generiert, die nicht von der Aggregationstabelle abgedeckt wird.The following time-intelligence query will not hit the aggregation because the DATESYTD function generates a table of CalendarDay values, which is not covered by the aggregation table.

Beispielabfrage

Bedeutung der Synchronisierung von CachesCaches should be kept in sync

Aggregationen, die die Modi „DirectQuery“ und „Import“ miteinander kombinieren und/oder den Speichermodus „Dual“ haben, geben unterschiedliche Daten zurück, wenn der In-Memory-Cache nicht mit den Quelldaten synchron ist.Aggregations that combine DirectQuery and Import and/or Dual storage mode may return different data if the in-memory cache is not kept in sync with the source data. Bei der Abfrageausführung wird nicht versucht, Datenprobleme, zu maskieren, indem z.B. DirectQuery-Ergebnisse entsprechend den zwischengespeicherten Werten gefiltert werden.Query execution won't attempt to mask data issues by, for example, filtering DirectQuery results to match cached values. Diese Features sind Leistungsoptimierungen und sollten nur entsprechend der Unternehmensanforderungen eingesetzt werden.These features are performance optimizations and should be used only in ways that do not compromise your ability to meet business requirements. Sie sind dafür zuständig, Ihre Datenflüsse zu kennen, und müssen deshalb den Entwurf entsprechend anpassen.It's your responsibility to know your data flows, so please design accordingly. 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.

Nächste SchritteNext steps

Die folgenden Artikeln enthalten weitere Informationen über zusammengesetzte Modelle sowie Details zu DirectQuery.The following articles describe more about composite models, and also describe DirectQuery in detail.

Artikel zu DirectQuery:DirectQuery articles: