Usare le aggregazioni in Power BI DesktopUse aggregations in Power BI Desktop

Le aggregazioni in Power BI consentono di ridurre le dimensioni delle tabelle per potersi concentrare sui dati importanti e migliorare le prestazioni delle query.Aggregations in Power BI let you reduce table sizes so you can focus on important data and improve query performance. Le aggregazioni consentono l'analisi interattiva su Big Data in modi altrimenti non possibili e possono ridurre notevolmente i costi di sblocco di set di dati di grandi dimensioni per il processo decisionale.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.

Di seguito sono riportati alcuni vantaggi dell'uso delle aggregazioni:Some advantages of using aggregations include:

  • Aumento delle prestazioni delle query sui Big Data.Better query performance over big data. Ogni interazione con gli oggetti visivi di Power BI invia query DAX al set di dati.Every interaction with Power BI visuals submits DAX queries to the dataset. I dati aggregati memorizzati nella cache usano una frazione delle risorse necessarie per i dati dettaglio, quindi è possibile sbloccare Big Data che altrimenti sarebbero inaccessibili.Cached aggregated data uses a fraction of the resources required for detail data, so you can unlock big data that would otherwise be inaccessible.
  • Ottimizzazione dell'aggiornamento dei dati.Optimized data refresh. Poiché le minori dimensioni della cache riducono i tempi di aggiornamento, i dati vengono inviati agli utenti più velocemente.Smaller cache sizes reduce refresh times, so data gets to users faster.
  • Bilanciamento delle architetture.Balanced architectures. La cache in memoria di Power BI può gestire query aggregate, limitando le query inviate in modalità DirectQuery e consentendo di rispettare i limiti di concorrenza.The Power BI in-memory cache can handle aggregated queries, limiting queries sent in DirectQuery mode and helping you meet concurrency limits. Le rimanenti query a livello di dettaglio tendono a essere query di livello transazionale filtrate che vengono, generalmente, gestite correttamente dai sistemi per Big Data e dai data warehouse.The remaining detail-level queries tend to be filtered, transactional-level queries, which data warehouses and big-data systems normally handle well.

Aggregazioni in Microsoft Power BI Desktop

Le origini dati dimensionali, ad esempio data warehouse e data mart, possono usare le aggregazioni basate su relazioni.Dimensional data sources, like data warehouses and data marts, can use relationship-based aggregations. Le origini Big Data basate su Hadoop spesso basano le aggregazioni su colonne GroupBy.Hadoop-based big-data sources often base aggregations on GroupBy columns. Questo articolo descrive le comuni differenze di modellazione di Power BI per ogni tipo di origine dati.This article describes typical Power BI modeling differences for each type of data source.

Creare una tabella aggregataCreate an aggregated table

Per creare una tabella aggregata:To create an aggregated table:

  1. Configurare una nuova tabella con i campi desiderati, a seconda dell'origine dati e del modello.Set up a new table with the fields you want, depending on your data source and model.
  2. Definire le aggregazioni usando la finestra di dialogo Gestisci aggregazioni.Define the aggregations by using the Manage aggregations dialog.
  3. Se applicabile, modificare la modalità di archiviazione per la tabella aggregata.If applicable, change the storage mode for the aggregated table.

Gestisci aggregazioniManage aggregations

Dopo aver creato la nuova tabella con i campi desiderati, nel riquadro Campi di qualsiasi visualizzazione di Power BI Desktop fare clic con il pulsante destro del mouse sulla tabella e scegliere Gestisci aggregazioni.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.

Selezionare Gestisci aggregazioni

La finestra di dialogo Gestisci aggregazioni mostra una riga per ogni colonna della tabella, in cui è possibile specificare il comportamento di aggregazione.The Manage aggregations dialog shows a row for each column in the table, where you can specify the aggregation behavior. Nell'esempio seguente le query sulla tabella dei dettagli Sales vengono reindirizzate internamente alla tabella delle aggregazioni Sales Agg.In the following example, queries to the Sales detail table are internally redirected to the Sales Agg aggregation table.

L'elenco a discesa Riepilogo della finestra di dialogo Gestisci aggregazioni include i valori seguenti:The Summarization drop-down in the Manage aggregations dialog offers the following values:

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

Lo screenshot mostra la finestra di dialogo Gestisci aggregazioni.

In questo esempio di aggregazione basata su relazioni le voci GroupBy sono facoltative.In this relationship-based aggregation example, the GroupBy entries are optional. A eccezione di DISTINCTCOUNT, non influiscono sul comportamento di aggregazione e servono soprattutto a migliorare la leggibilità.Except for DISTINCTCOUNT, they don't affect aggregation behavior, and are primarily for readability. Senza le voci GroupBy, le aggregazioni verrebbero comunque raggiunte in base alle relazioni,Without the GroupBy entries, the aggregations would still get hit, based on the relationships. a differenza di quanto accade nell'esempio dei Big Data più avanti in questo articolo, in cui le voci GroupBy sono necessarie.This is different from the big data example later in this article, where the GroupBy entries are required.

Dopo aver definito le aggregazioni desiderate, selezionare Applica tutto.After defining the aggregations you want, select Apply All.

ConvalideValidations

La finestra di dialogo Gestisci aggregazioni applica le importanti convalide seguenti:The Manage aggregations dialog enforces the following notable validations:

  • Colonna dettagli deve avere lo stesso tipo di dati di Colonna aggregazioni, eccettuato per le funzioni Conteggio e Conta righe della tabella in Riepilogo.The Detail Column must have the same datatype as the Aggregation Column, except for the Count and Count table rows Summarization functions. Conteggio e Conta righe della tabella sono disponibili solo per le colonne delle aggregazioni di tipo Integer e non richiedono un tipo di dati corrispondente.Count and Count table rows are only available for integer aggregation columns, and don't require a matching datatype.
  • Le aggregazioni concatenate che coprono tre o più tabelle non sono consentite.Chained aggregations covering three or more tables aren't allowed. Ad esempio, le aggregazioni in Tabella A non possono fare riferimento a una Tabella B contenente aggregazioni che fanno riferimento a una Tabella C.For example, aggregations on Table A can't refer to a Table B that has aggregations referring to a Table C.
  • Le aggregazioni duplicate, in cui due voci usano la stessa funzione di Riepilogo e fanno riferimento alla stessa Tabella dettagli e Colonna dettagli, non sono consentite.Duplicate aggregations, where two entries use the same Summarization function and refer to the same Detail Table and Detail Column, aren't allowed.
  • La Tabella dettagli deve usare la modalità di archiviazione DirectQuery, non Import.The Detail Table must use DirectQuery storage mode, not Import.
  • Il raggruppamento in base a una colonna di chiave esterna usata da una relazione inattiva e l'uso della funzione USERELATIONSHIP per i riscontri di aggregazione non sono supportati.Grouping by a foreign key column used by an inactive relationship, and relying on the USERELATIONSHIP function for aggregation hits, isn't supported.

La maggior parte delle convalide viene applicata disabilitando i valori dell'elenco a discesa e visualizzando il testo esplicativo nella descrizione comando, come illustrato nell'immagine seguente.Most of the validations are enforced by disabling dropdown values and showing explanatory text in the tooltip, as shown in the following image.

Convalide indicate dalla descrizione comando

Le tabelle di aggregazione sono nascosteAggregation tables are hidden

Gli utenti con accesso in sola lettura al set di dati non possono eseguire query sulle tabelle di aggregazione.Users with read-only access to the dataset can't query aggregation tables. In questo modo si evitano problemi di sicurezza quando vengono usate con la sicurezza a livello di riga.This avoids security concerns when used with row-level security (RLS). Gli utenti finali e le query fanno riferimento alla tabella dei dettagli, non alla tabella delle aggregazioni e non è necessario che siano a conoscenza della tabella delle aggregazioni.Consumers and queries refer to the detail table, not the aggregation table, and don't need to know about the aggregation table.

Per questo motivo, le tabelle delle aggregazioni sono nascoste nella visualizzazione Report.For this reason, aggregation tables are hidden from Report view. Se la tabella non è già nascosta, la finestra di dialogo Gestisci aggregazioni la imposterà come nascosta quando si seleziona Applica tutto.If the table isn't already hidden, the Manage aggregations dialog will set it to hidden when you select Apply all.

Modalità di archiviazioneStorage modes

La funzionalità di aggregazione interagisce con le modalità di archiviazione a livello di tabella.The aggregation feature interacts with table-level storage modes. Le tabelle di Power BI possono usare le modalità di archiviazione DirectQuery, Import o Dual.Power BI tables can use DirectQuery, Import, or Dual storage modes. DirectQuery esegue una query direttamente sul back-end, mentre Import memorizza nella cache i dati in memoria e invia le query ai dati memorizzati nella cache.DirectQuery queries the backend directly, while Import caches data in memory and sends queries to the cached data. Tutte le origini dati Import e DirectQuery non multidimensionali di Power BI possono usare le aggregazioni.All Power BI Import and non-multidimensional DirectQuery data sources can work with aggregations.

Per impostare la modalità di archiviazione di una tabella aggregata su Import per velocizzare le query, selezionare la tabella aggregata nella visualizzazione Modello di Power BI Desktop.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. Nel riquadro Proprietà espandere Avanzate e nell'elenco a discesa Modalità di archiviazione selezionare Import.In the Properties pane, expand Advanced, drop down the selection under Storage mode, and select Import. Tenere presente che questa operazione è irreversibile.Note that this action is irreversible.

Impostare la modalità di archiviazione

Per altre informazioni sulle modalità di archiviazione delle tabelle, vedere Gestire la modalità di archiviazione in Power BI Desktop.For more information about table storage modes, see Manage storage mode in Power BI Desktop.

Sicurezza a livello di riga per le aggregazioniRLS for aggregations

Per il corretto funzionamento delle aggregazioni, le espressioni di sicurezza a livello di riga devono filtrare sia la tabella delle aggregazioni che la tabella dei dettagli.To work correctly for aggregations, RLS expressions should filter both the aggregation table and the detail table.

Nell'esempio seguente l'espressione di sicurezza a livello di riga sulla tabella Geography funziona per le aggregazioni, perché Geography è presente sul lato del filtro delle relazioni sia con la tabella Sales che con la tabella Sales Agg.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. La sicurezza a livello di riga verrà applicata correttamente sia alle query che raggiungono la tabella di aggregazione che a quelle che non la raggiungono.Queries that hit the aggregation table and those that don't will both have RLS successfully applied.

Sicurezza a livello di riga completata per le aggregazioni

Un'espressione di sicurezza a livello di riga sulla tabella Product filtra soltanto la tabella dei dettagli Sales, non la tabella aggregata Sales Agg.An RLS expression on the Product table filters only the detail Sales table, not the aggregated Sales Agg table. Dal momento che la tabella di aggregazione è semplicemente un'altra rappresentazione dei dati presenti nella tabella dei dettagli, rispondere alle query dalla tabella delle aggregazioni non è un'operazione sicura se il filtro della sicurezza a livello di riga non può essere applicato.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. Non è consigliabile filtrare solo la tabella dei dettagli, perché le query degli utenti da questo ruolo non usufruiranno dei riscontri di aggregazione.Filtering only the detail table isn't recommended, because user queries from this role won't benefit from aggregation hits.

Un'espressione di sicurezza a livello di riga che filtra solo la tabella delle aggregazioni Sales Agg e non la tabella dei dettagli Sales non è consentita.An RLS expression that filters only the Sales Agg aggregation table and not the Sales detail table isn't allowed.

La sicurezza a livello di riga solo nella tabella delle aggregazioni non è consentita

Per le aggregazioni basate sulle colonne GroupBy, un'espressione di sicurezza a livello di riga applicata alla tabella dei dettagli può essere usata per filtrare la tabella delle aggregazioni perché tutte le colonne GroupBy nella tabella delle aggregazioni sono previste dalla tabella dei dettagli.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. D'altra parte, un filtro di sicurezza a livello di riga sulla tabella delle aggregazioni non può essere applicato alla tabella dei dettagli, quindi non è consentito.On the other hand, an RLS filter on the aggregation table can't be applied to the detail table, so is disallowed.

Aggregazione basata su relazioniAggregation based on relationships

I modelli dimensionali in genere usano le aggregazioni basate su relazioni.Dimensional models typically use aggregations based on relationships. I set di dati di Power BI provenienti da data warehouse e data mart assomigliano a schemi star o snowflake e presentano relazioni tra tabelle delle dimensioni e tabelle dei fatti.Power BI datasets from data warehouses and data marts resemble star/snowflake schemas, with relationships between dimension tables and fact tables.

Nel modello seguente da una singola origine dati, le tabelle usano la modalità di archiviazione DirectQuery.In the following model from a single data source, the tables are using DirectQuery storage mode. La tabella dei fatti Sales contiene miliardi di righe.The Sales fact table contains billions of rows. L'impostazione della modalità di archiviazione di Sales su Import per la memorizzazione nella cache comporterebbe un notevole sovraccarico della memoria e delle funzionalità di gestione.Setting the storage mode of Sales to Import for caching would consume considerable memory and management overhead.

Tabelle dei dettagli in un modello

Creare invece la tabella delle aggregazioni Sales Agg.Instead, create the Sales Agg aggregation table. Nella tabella Sales Agg il numero di righe è uguale alla somma di SalesAmount con i valori raggruppati per CustomerKey, DateKey e ProductSubcategoryKey.In the Sales Agg table, the number of rows equals the sum of SalesAmount grouped by CustomerKey, DateKey, and ProductSubcategoryKey. La tabella Sales Agg ha una granularità più elevata di Sales, quindi invece di miliardi di righe, può contenerne milioni, che è molto più facile gestire.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.

Se le tabelle delle dimensioni seguenti sono le più usate per le query con valore di business elevato, possono filtrare Sales Agg, usando relazioni uno-a-molti o molti-a-uno.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.

  • GeografiaGeography
  • CustomerCustomer
  • DataDate
  • Product SubcategoryProduct Subcategory
  • Product CategoryProduct Category

L'immagine seguente mostra questo modello.The following image shows this model.

Tabella delle aggregazioni in un modello

Nella tabella seguente vengono mostrate le aggregazioni per la tabella Sales Agg.The following table shows the aggregations for the Sales Agg table.

Aggregazioni per la tabella Sales Agg

Nota

La tabella Sales Agg, come qualsiasi tabella, offre la flessibilità di essere caricata in vari modi.The Sales Agg table, like any table, has the flexibility of being loaded in a variety of ways. L'aggregazione può essere eseguita nel database di origine usando i processi ETL/ELT oppure usando l'espressione M per la tabella.The aggregation can be performed in the source database using ETL/ELT processes, or by the M expression for the table. La tabella aggregata può usare la modalità di archiviazione Import, con o senza aggiornamento incrementale in Power BI Premium, oppure la modalità DirectQuery ed essere ottimizzata per query veloci usando gli indici columnstore.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. Questa flessibilità consente di creare architetture bilanciate in cui il carico di query può essere ripartito per evitare i colli di bottiglia.This flexibility enables balanced architectures that can spread query load to avoid bottlenecks.

Impostando la modalità di archiviazione della tabella Sales Agg aggregata su Import, si apre una finestra di dialogo che informa che le tabelle delle dimensioni correlate possono essere impostate sulla modalità di archiviazione Dual.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.

Finestra di dialogo della modalità di archiviazione

L'impostazione delle tabelle delle dimensioni correlate su Dual consente di usare la modalità Import o DirectQuery, a seconda della sottoquery.Setting the related dimension tables to Dual lets them act as either Import or DirectQuery, depending on the subquery. Nell'esempio:In the example:

  • Le query con cui si aggregano le metriche della tabella Sales Agg in modalità Import e che raggruppano i valori in base a uno o più attributi delle tabelle Dual correlate possono essere restituite dalla cache in memoria.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.
  • Le query con cui si aggregano le metriche dalla tabella Sales DirectQuery e che raggruppano i valori in base a uno o più attributi delle tabelle Dual correlate, possono essere restituite in modalità DirectQuery.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. La logica di query, che include l'operazione GroupBy, viene passata al database di origine.The query logic, including the GroupBy operation, is passed down to the source database.

Per altre informazioni sulla modalità di archiviazione Dual, vedere Gestire la modalità di archiviazione in Power BI Desktop.For more information about Dual storage mode, see Manage storage mode in Power BI Desktop.

Relazioni normali e limitateRegular vs. limited relationships

I riscontri delle aggregazioni basati sulle relazioni richiedono relazioni normali.Aggregation hits based on relationships require regular relationships.

Le relazioni normali includono le combinazioni seguenti di modalità di archiviazione, in cui entrambe le tabelle provengono da una singola origine:Regular relationships include the following storage mode combinations, where both tables are from a single source:

Tabella sui lati moltiTable on the many sides Tabella sul lato unoTable on the 1 side
DoppiaDual DoppiaDual
ImportazioneImport Importa o DoppiaImport or Dual
DirectQueryDirectQuery DirectQuery o DoppiaDirectQuery or Dual

Una relazione tra origini diverse è considerata normale esclusivamente se entrambe le tabelle sono impostate su Import.The only case where a cross-source relationship is considered regular is if both tables are set to Import. Le relazioni molti-a-molti sono sempre considerate limitate.Many-to-many relationships are always considered limited.

Per i riscontri di aggregazione tra origini diverse che non dipendono da relazioni, vedere Aggregazioni basate su colonne GroupBy.For cross-source aggregation hits that don't depend on relationships, see Aggregations based on GroupBy columns.

Esempi di query di aggregazione basata su relazioniRelationship-based aggregation query examples

La query seguente raggiunge l'aggregazione perché le colonne nella tabella Date sono al livello di granularità corretto per raggiungere l'aggregazione.The following query hits the aggregation, because columns in the Date table are at the granularity that can hit the aggregation. La colonna SalesAmount usa l'aggregazione Sum.The SalesAmount column uses the Sum aggregation.

Query di aggregazione basata su relazioni completata

La query seguente non raggiunge l'aggregazione.The following query doesn't hit the aggregation. Nonostante richieda la somma di SalesAmount, la query esegue un'operazione GroupBy su una colonna della tabella Product, che non è al livello di granularità corretto per raggiungere l'aggregazione.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. Se si osservano le relazioni nel modello, una sottocategoria di prodotti può avere più righe Product.If you observe the relationships in the model, a product subcategory can have multiple Product rows. La query non potrebbe determinare il prodotto in cui eseguire l'aggregazione.The query wouldn't be able to determine which product to aggregate to. In questo caso, la query torna alla modalità DirectQuery e invia una query SQL all'origine dati.In this case, the query reverts to DirectQuery and submits a SQL query to the data source.

Query che non può usare l'aggregazione

Le aggregazioni non servono solo per eseguire semplici calcoli come banali somme.Aggregations aren't just for simple calculations that perform a straightforward sum. Possono servire anche per eseguire calcoli complessi.Complex calculations can also benefit. Concettualmente, un calcolo complesso viene suddiviso in sottoquery per ogni SUM, MIN, MAX e COUNT e ogni sottoquery viene valutata per determinare se può raggiungere l'aggregazione.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. Questa logica non risulta efficace in tutti i casi a causa dell'ottimizzazione del piano di query, ma in generale è applicabile.This logic doesn't hold true in all cases due to query-plan optimization, but in general it should apply. L'esempio seguente raggiunge l'aggregazione:The following example hits the aggregation:

Query di aggregazione complessa

La funzione COUNTROWS può trarre vantaggio dalle aggregazioni.The COUNTROWS function can benefit from aggregations. La query seguente raggiunge l'aggregazione perché per la tabella Sales è definita un'aggregazione di righe della tabella Count.The following query hits the aggregation because there is a Count table rows aggregation defined for the Sales table.

Query di aggregazione COUNTROWS

La funzione AVERAGE può trarre vantaggio dalle aggregazioni.The AVERAGE function can benefit from aggregations. La query raggiunge l'aggregazione perché AVERAGE viene trattata internamente come un'operazione SUM divisa per COUNT.The following query hits the aggregation because AVERAGE internally gets folded to a SUM divided by a COUNT. Poiché la colonna UnitPrice dispone di aggregazioni definite per SUM e COUNT, l'aggregazione viene raggiunta.Since the UnitPrice column has aggregations defined for both SUM and COUNT, the aggregation is hit.

Query di aggregazione AVERAGE

In alcuni casi, la funzione DISTINCTCOUNT può trarre vantaggio dalle aggregazioni.In some cases, the DISTINCTCOUNT function can benefit from aggregations. La query seguente raggiunge l'aggregazione perché è presente una voce GroupBy per CustomerKey, che mantiene le specificità di CustomerKey nella tabella di aggregazione.The following query hits the aggregation because there is a GroupBy entry for CustomerKey, which maintains the distinctness of CustomerKey in the aggregation table. Questa tecnica potrebbe comunque raggiungere la soglia delle prestazioni per la quale una quantità di valori distinct superiore a due - cinque milioni può influire sulle prestazioni delle query.This technique might still hit the performance threshold where more than two to five million distinct values can affect query performance. Può tuttavia essere utile nelle situazioni in cui sono presenti miliardi di righe nella tabella dei dettagli, ma da due a cinque milioni di valori distinct nella colonna.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 questo caso, l'operazione DISTINCTCOUNT può essere svolta più velocemente rispetto all'analisi della tabella con miliardi di righe, anche se è stata memorizzata nella cache in memoria.In this case, the DISTINCTCOUNT can perform faster than scanning the table with billions of rows, even if it were cached into memory.

Query di aggregazione DISTINCTCOUNT

Le funzioni di time intelligence DAX sono compatibili con le aggregazioni.DAX time-intelligence functions are aggregation aware. La query seguente raggiunge l'aggregazione perché la funzione DATESYTD genera una tabella di valori CalendarDay e la tabella di aggregazione è a un livello di granularità coperto per le colonne group-by nella tabella Date.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. Questo è un esempio di filtro con valori di tabella per la funzione CALCULATE, che può funzionare con le aggregazioni.This is an example of a table-valued filter to the CALCULATE function, which can work with aggregations.

Query di aggregazione SUMMARIZECOLUMNS

Aggregazione basata su colonne GroupByAggregation based on GroupBy columns

I modelli di big data basati su Hadoop hanno caratteristiche diverse rispetto ai modelli dimensionali.Hadoop-based big data models have different characteristics than dimensional models. Per evitare join tra tabelle di grandi dimensioni, i modelli di Big Data spesso non usano le relazioni, ma denormalizzano gli attributi delle dimensioni in tabelle dei fatti.To avoid joins between large tables, big data models often don't use relationships, but denormalize dimension attributes to fact tables. È possibile sbloccare questi modelli di Big Data di grandi dimensioni per l'analisi interattiva usando aggregazioni basate su colonne GroupBy.You can unlock such big data models for interactive analysis by using aggregations based on GroupBy columns.

La tabella seguente contiene la colonna numerica Movement da aggregare.The following table contains the Movement numeric column to be aggregated. Tutte le altre colonne sono gli attributi per il raggruppamento.All the other columns are attributes to group by. La tabella contiene dati IoT e un elevato numero di righe.The table contains IoT data and a massive number of rows. La modalità di archiviazione è DirectQuery.The storage mode is DirectQuery. Le query sull'origine dati che eseguono l'aggregazione nell'intero set di dati sono lente a causa del volume elevato.Queries on the data source that aggregate across the whole dataset are slow because of the sheer volume.

Tabella IoT

Per abilitare l'analisi interattiva in questo set di dati, è possibile aggiungere una tabella di aggregazione che esegue il raggruppamento in base alla maggior parte degli attributi, ma esclude gli attributi con cardinalità elevata, ad esempio longitudine e latitudine.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. Ciò riduce notevolmente il numero di righe ed è sufficientemente piccola da rientrare agevolmente in un'istanza di cache in memoria.This dramatically reduces the number of rows, and is small enough to comfortably fit into an in-memory cache.

Tabella Driver Activity Agg

I mapping delle aggregazioni per la tabella Driver Activity Agg vengono definiti nella finestra di dialogo Gestisci aggregazioni.You define the aggregation mappings for the Driver Activity Agg table in the Manage aggregations dialog.

Finestra di dialogo Gestisci aggregazioni per la tabella Driver Activity Agg

Nelle aggregazioni basate su colonne GroupBy, le voci GroupBy non sono facoltative.In aggregations based on GroupBy columns, the GroupBy entries aren't optional. Senza di esse, le aggregazioni non verranno raggiunte.Without them, the aggregations won't get hit. Non è come usare le aggregazioni basate su relazioni, dove le voci GroupBy sono facoltative.This is different from using aggregations based on relationships, where the GroupBy entries are optional.

La tabella seguente mostra le aggregazioni per la tabella Driver Activity Agg.The following table shows the aggregations for the Driver Activity Agg table.

Tabella delle aggregazioni Driver Activity Agg

È possibile impostare la modalità di archiviazione della tabella aggregata Driver Activity Agg su Import.You can set the storage mode of the aggregated Driver Activity Agg table to Import.

Esempio di query di aggregazione GroupByGroupBy aggregation query example

La query seguente raggiunge l'aggregazione perché la colonna Activity Date è coperta dalla tabella delle aggregazioni.The following query hits the aggregation, because the Activity Date column is covered by the aggregation table. La funzione COUNTROWS usa l'aggregazione Conta righe della tabella.The COUNTROWS function uses the Count table rows aggregation.

Query di aggregazione GroupBy completata

In particolare per i modelli che contengono attributi di filtro nelle tabelle dei fatti, è consigliabile usare le aggregazioni Conta righe della tabella.Especially for models that contain filter attributes in fact tables, it's a good idea to use Count table rows aggregations. Power BI può inviare query al set di dati usando COUNTROWS nei casi in cui non è esplicitamente richiesto dall'utente.Power BI may submit queries to the dataset using COUNTROWS in cases where it is not explicitly requested by the user. Ad esempio, la finestra di dialogo Filtri mostra il numero di righe per ogni valore.For example, the filter dialog shows the count of rows for each value.

Finestra di dialogo dei filtri

Tecniche di aggregazione combinateCombined aggregation techniques

È possibile combinare le tecniche delle relazioni e delle colonne GroupBy per le aggregazioni.You can combine the relationships and GroupBy columns techniques for aggregations. Le aggregazioni basate su relazioni potrebbero richiedere che le tabelle con le dimensioni denormalizzate vengano suddivise in più tabelle.Aggregations based on relationships may require the denormalized dimension tables to be split into multiple tables. Se questo risulta dispendioso o poco efficiente per alcune tabelle delle dimensioni, è possibile replicare gli attributi necessari nella tabella delle aggregazioni per tali dimensioni e usare le relazioni per le altre.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.

Il modello seguente, ad esempio, replica i valori Month, Quarter, Semester e Year nella tabella Sales Agg.For example, the following model replicates Month, Quarter, Semester, and Year in the Sales Agg table. Non esistono relazioni tra Sales Agg e la tabella Date, ma sono presenti relazioni con Customer e Product Subcategory.There is no relationship between Sales Agg and the Date table, but there are relationships to Customer and Product Subcategory. La modalità di archiviazione di Sales Agg è Import.The storage mode of Sales Agg is Import.

Tecniche di aggregazione combinate

La tabella seguente mostra le voci impostate nella finestra di dialogo Gestisci aggregazioni della tabella Sales Agg.The following table shows the entries set in the Manage aggregations dialog for the Sales Agg table. Le voci GroupBy in cui Date è la tabella dei dettagli sono obbligatorie per raggiungere le aggregazioni per le query che eseguono il raggruppamento in base agli attributi Date.The GroupBy entries where Date is the detail table are mandatory, to hit aggregations for queries that group by the Date attributes. Come nell'esempio precedente, le voci GroupBy per CustomerKey e ProductSubcategoryKey non influiscono sui riscontri delle aggregazioni, fatta eccezione per DISTINCTCOUNT, a causa della presenza di relazioni.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.

Voci per la tabella delle aggregazioni Sales Agg

Esempi di query di aggregazione combinateCombined aggregation query examples

La query seguente raggiunge l'aggregazione perché la tabella delle aggregazioni copre CalendarMonth e CategoryName è accessibile tramite le relazioni uno-a-molti.The following query hits the aggregation, because the aggregation table covers CalendarMonth, and CategoryName is accessible via one-to-many relationships. SalesAmount usa l'aggregazione SUM.SalesAmount uses the SUM aggregation.

Esempio di query che raggiunge l'aggregazione

La query seguente non raggiunge l'aggregazione perché la tabella delle aggregazioni non copre CalendarDay.The following query doesn't hit the aggregation, because the aggregation table doesn't cover CalendarDay.

Lo screenshot mostra il testo di una query che include CalendarDay.

La seguente query di Business Intelligence per le gerarchie temporali non raggiunge l'aggregazione perché la funzione DATESYTD genera una tabella di valori CalendarDay e la tabella delle aggregazioni non copre CalendarDay.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.

Lo screenshot mostra il testo di una query che include la funzione DATESYTD.

Precedenza di aggregazioneAggregation precedence

La precedenza di aggregazione consente a più tabelle di aggregazione di essere considerate da una singola sottoquery.Aggregation precedence allows multiple aggregation tables to be considered by a single subquery.

L'esempio seguente è un modello composito contenente più origini:The following example is a composite model containing multiple sources:

  • La tabella in modalità DirectQuery Driver Activity contiene oltre un trilione di righe di dati IoT originati da un sistema per Big Data.The Driver Activity DirectQuery table contains over a trillion rows of IoT data sourced from a big-data system. Serve query drill-through per visualizzare singole letture IoT in contesti filtro controllati.It serves drillthrough queries to view individual IoT readings in controlled filter contexts.
  • La tabella Driver Activity Agg è una tabella di aggregazione intermedia con modalità DirectQuery.The Driver Activity Agg table is an intermediate aggregation table in DirectQuery mode. Contiene oltre un miliardo di righe in Azure SQL Data Warehouse ed è ottimizzata all'origine tramite indici columnstore.It contains over a billion rows in Azure SQL Data Warehouse and is optimized at the source using columnstore indexes.
  • La tabella Driver Activity Agg2 di tipo Import ha una granularità molto elevata perché gli attributi group-by sono pochi e con cardinalità bassa.The Driver Activity Agg2 Import table is at a high granularity, because the group-by attributes are few and low cardinality. Il numero di righe potrebbe essere di appena qualche migliaio, pertanto la tabella potrebbe stare facilmente in un'istanza di cache in memoria.The number of rows could be as low as thousands, so it can easily fit into an in-memory cache. Poiché accade che questi attributi vengano utilizzati da un pannello personale di alto profilo, le query che fanno riferimento a essi devono essere più veloci possibile.These attributes happen to be used by a high-profile executive dashboard, so queries referring to them should be as fast as possible.

Nota

Le tabelle delle aggregazioni DirectQuery che usano un'origine dati diversa dalla tabella dei dettagli sono supportate solo se la tabella delle aggregazioni proviene da un'origine SQL Server, Azure SQL o Azure SQL Data Warehouse.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.

Il footprint della memoria di questo modello è relativamente piccolo, ma sblocca un set di dati di grandi dimensioni.The memory footprint of this model is relatively small, but it unlocks a huge dataset. Rappresenta un'architettura bilanciata perché distribuisce il carico di query tra i componenti dell'architettura e li utilizza in base ai punti di forza.It represents a balanced architecture because it spreads the query load across components of the architecture, utilizing them based on their strengths.

Tabelle per un modello con footprint ridotto che sblocca set di dati di grandi dimensioni

La finestra di dialogo Gestisci aggregazioni per Driver Activity Agg2 imposta il campo Precedenza su 10, ovvero su un valore più elevato che per 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. L'impostazione di precedenza più elevata indica che le query che usano le aggregazioni considereranno prima Driver Activity Agg2.The higher precedence setting means queries that use aggregations will consider Driver Activity Agg2 first. Le sottoquery il cui livello di granularità non consente di ottenere una risposta da Driver Activity Agg2 prenderanno in considerazione Driver Activity Agg.Subqueries that aren't at the granularity that can be answered by Driver Activity Agg2 will consider Driver Activity Agg instead. Le query dettagli a cui non può rispondere nessuna delle tabelle di aggregazione verranno indirizzate a Driver Activity.Detail queries that cannot be answered by either aggregation table will be directed to Driver Activity.

La tabella specificata nella colonna Tabella dettagli è Driver Activity non Driver Activity Agg, perché le aggregazioni concatenate non sono consentite.The table specified in the Detail Table column is Driver Activity, not Driver Activity Agg, because chained aggregations are not allowed.

Lo screenshot mostra la finestra di dialogo Gestisci aggregazioni con l'opzione Precedenza evidenziata.

La tabella seguente mostra le aggregazioni per la tabella Driver Activity Agg2.The following table shows the aggregations for the Driver Activity Agg2 table.

Tabella delle aggregazioni Driver Activity Agg2

Rilevare se le query raggiungono o meno le aggregazioniDetect whether queries hit or miss aggregations

SQL Profiler può rilevare se le query vengono restituite dal motore di archiviazione della cache in memoria o se ne viene eseguito il push nell'origine dati da DirectQuery.SQL Profiler can detect whether queries are returned from the in-memory cache storage engine, or pushed to the data source by DirectQuery. È possibile usare lo stesso processo per rilevare se le aggregazioni sono raggiunte.You can use the same process to detect whether aggregations are being hit. Per altre informazioni, vedere Query con o senza riscontri nella cache.For more information, see Queries that hit or miss the cache.

SQL Profiler fornisce anche l'evento esteso Query Processing\Aggregate Table Rewrite Query.SQL Profiler also provides the Query Processing\Aggregate Table Rewrite Query extended event.

Il frammento di codice JSON seguente mostra un esempio dell'output dell'evento generato quando viene utilizzata un'aggregazione.The following JSON snippet shows an example of the output of the event when an aggregation is used.

  • matchingResult indica che la sottoquery ha usato un'aggregazione.matchingResult shows that the subquery used an aggregation.
  • dataRequest mostra le colonne GroupBy e le colonne aggregate usate dalla sottoquery.dataRequest shows the GroupBy column(s) and aggregated column(s) the subquery used.
  • mapping mostra le colonne nella a cui è stato eseguito il mapping tabella di aggregazione.mapping shows the columns in the aggregation table that were mapped to.

Output di un evento quando viene usata l'aggregazione

Mantenere sincronizzate le cacheKeep caches in sync

Le aggregazioni in cui le modalità di archiviazione DirectQuery, Import e/o Dual sono combinate possono restituire dati diversi a meno che la cache in memoria venga mantenuta sincronizzata con i dati di origine.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. Ad esempio, l'esecuzione della query non proverà a mascherare i problemi dei dati filtrando i risultati di DirectQuery in modo che corrispondano ai valori memorizzati nella cache.For example, query execution won't attempt to mask data issues by filtering DirectQuery results to match cached values. Esistono tecniche consolidate per gestire questi problemi nell'origine, se necessario.There are established techniques to handle such issues at the source, if necessary. Le ottimizzazioni delle prestazioni devono essere usate solo in modi che non compromettano la possibilità di soddisfare i requisiti aziendali.Performance optimizations should be used only in ways that don't compromise your ability to meet business requirements. È responsabilità dell'utente conoscere i flussi di dati e progettare il sistema di conseguenza.It's your responsibility to know your data flows and design accordingly.

Passaggi successiviNext steps

Per altre informazioni sui modelli compositi, vedere:For more information about composite models, see:

Per altre informazioni su DirectQuery, vedere:For more information about DirectQuery, see: