Agregações no Power BI DesktopAggregations in Power BI Desktop

O uso de agregações no Power BI permite a análise interativa em Big Data de maneiras que anteriormente não eram possíveis.Using aggregations in Power BI enables interactive analysis over big data in ways that previously weren't possible. As agregações podem reduzir drasticamente o custo de usar grandes conjuntos de dados para a tomada de decisão.Aggregations can dramatically reduce the cost of unlocking large datasets for decision making.

agregações no Microsoft Power BI Desktop

A lista a seguir oferece as vantagens de usar agregações:The following list provides advantages to using aggregations:

  • Desempenho de consulta em Big Data – conforme os usuários interagem com elementos visuais nos relatórios do Power BI, as consultas DAX são enviadas ao conjunto de dados.Query performance over big data - as users interact with visuals on Power BI reports, DAX queries are submitted to the dataset. Impulsione velocidades de consulta armazenando os dados em cache no nível agregado, usando uma fração dos recursos necessários no nível de detalhe.Boost query speeds by caching data at the aggregated level, using a fraction of the resources required at the detail level. Use Big Data de uma forma que não seria possível de outra maneira.Unlock big data in a way that would otherwise be impossible.
  • Otimização da atualização de dados – reduza os tamanhos de cache e tempos de atualização armazenando os dados em cache no nível agregado.Data refresh optimization - reduce cache sizes and refresh times by caching data at the aggregated level. Acelere o tempo para disponibilizar dados para os usuários.Speed up the time to make data available for users.
  • Obter arquiteturas equilibradas – permita que o cache na memória do Power BI lide com consultas agregadas, o que ele faz com eficiência.Achieve balanced architectures - allow the Power BI in-memory cache to handle aggregated queries, which it does effectively. Limite as consultas enviadas à fonte de dados no modo DirectQuery, ajudando a ficar dentro dos limites de simultaneidade.Limit queries sent to the data source in DirectQuery mode, helping stay within concurrency limits. As consultas que passam tendem a ser filtradas, consultas de nível da transação, com as quais os data warehouses e sistemas de Big Data normalmente lidam bem.Queries that do get through tend to be filtered, transactional-level queries, which data warehouses and big-data systems normally handle well.

Armazenamento em nível de tabelaTable-level storage

Normalmente, o armazenamento em nível de tabela é usado com o recurso de agregações.Table-level storage is normally used with the aggregations feature. Confira o artigo Modo de armazenamento no Power BI Desktop para saber mais.See the storage mode in Power BI Desktop article for more information.

Tipos de fontes de dadosData source types

As agregações são usadas com fontes de dados que representam modelos dimensionais, como data warehouses, data marts e fontes de Big Data baseadas no Hadoop.Aggregations are used with data sources representing dimensional models, such as a data warehouses, data marts, and Hadoop-based big-data sources. Este artigo descreve as diferenças de modelagem típicas no Power BI para cada tipo de fonte de dados.This article describes typical modeling differences in Power BI for each type of data source.

Todas as fontes DirectQuery e de Importação do Power BI (não multidimensionais) trabalham com agregações.All Power BI Import and (non-multidimensional) DirectQuery sources work with aggregations.

Agregações com base em relaçõesAggregations based on relationships

As agregações com base em relações são usadas normalmente com modelos dimensionais.Aggregations based on relationships are typically used with dimensional models. Os conjuntos de dados do Power BI oriundos de data warehouses e data marts se parecem com esquemas floco de neve/estrela com relações entre tabelas de dimensões e tabelas de fatos.Power BI datasets that source from data warehouses and data marts resemble star/snowflake schemas with relationships between dimension tables and fact tables.

Considere o seguinte modelo, proveniente de uma única fonte de dados.Consider the following model, which is from a single data source. Digamos que todas as tabelas estão usando o DirectQuery para começar.Let’s say all the tables are using DirectQuery to start with. A tabela de fatos Vendas contém bilhões de linhas.The Sales fact table contains billions of rows. Definir o modo de armazenamento de Vendas como Importação para armazenamento em cache consumiria uma sobrecarga considerável de memória e de gerenciamento.Setting the storage mode of Sales to Import for caching would consume considerable memory and management overhead.

tabelas em um modelo

Em vez disso, criamos a tabela Agregação de vendas como uma tabela de agregação.Instead, we create the Sales Agg table as an aggregation table. Ela está em uma granularidade maior do que Vendas e, portanto, conterá muito menos linhas.It's at a higher granularity than Sales, so it'll contain far fewer rows. O número de linhas deve ser igual à soma de SalesAmount agrupada por CustomerKey, DateKey e ProductSubcategoryKey.The number of rows should equal the sum of SalesAmount grouped by CustomerKey, DateKey, and ProductSubcategoryKey. Em vez de bilhões, poderiam ser milhões de linhas, o que é muito mais fácil de gerenciar.Instead of billions, it might be millions of rows, which are much easier to manage.

Vamos supor que as seguintes tabelas de dimensões são mais comumente usadas para as consultas com alto valor de negócios.Let's assume that the following dimension tables are the most commonly used for the queries with high business value. Elas são as tabelas que podem filtrar Agregação de vendas usando relações um-para-muitos (ou muitos-para-um).They're the tables that can filter Sales Agg using one-to-many (or many-to-one) relationships.

  • GeografiaGeography
  • ClienteCustomer
  • DataDate
  • Subcategoria de ProdutoProduct Subcategory
  • Categoria de produtoProduct Category

A imagem a seguir mostra este modelo.The following image shows this model.

tabela de agregação em um modelo

Observação

A tabela Agregação de vendas é apenas outra tabela; portanto, ela tem a flexibilidade de ser carregada de diversas formas.The Sales Agg table is just another table, so it has the flexibility of being loaded in a variety of ways. Por exemplo, a agregação pode ser executada no banco de dados de origem usando processos ETL/ELT ou pela Expressão M para a tabela.For example, aggregation can be performed in the source database using ETL/ELT processes, or by the M expression for the table. Ela pode usar o Modo de armazenamento de importação com ou sem a atualização incremental no Power BI Premium ou pode ser o DirectQuery e otimizada para consultas rápidas usando índices columnstore.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. Essa flexibilidade permite arquiteturas equilibradas que distribuem a carga de consulta para evitar gargalos.This flexibility enables balanced architectures that spread query load to avoid bottlenecks.

Modo de armazenamentoStorage mode

Vamos continuar com o exemplo que estamos usando.Let's continue with the example we're using. Podemos definir o modo de armazenamento de Agregação de vendas como Importação para agilizar as consultas.We set the storage mode of Sales Agg to Import to speed up queries.

configurando o modo de armazenamento

Quando fazemos isso, a seguinte caixa de diálogo é exibida, informando que as tabelas de dimensões relacionadas podem ser definidas como modo de armazenamento Duplo.When we do so, the following dialog appears, letting us know that the related dimension tables can be set to storage mode Dual.

caixa de diálogo do modo de armazenamento

Defini-las como Dual permite que as tabelas de dimensões relacionadas atuem como Importação ou DirectQuery dependendo da subconsulta.Setting them to Dual allows the related dimension tables to act as either Import or DirectQuery depending on the subquery.

  • As consultas que agregam métricas na tabela Agregação de vendas, que é Importação, e agrupam atributos nas tabelas Dual relacionadas podem ser retornadas do cache na memória.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.
  • As consultas que agregam métricas na tabela Vendas, que é DirectQuery, e agrupam por atributos nas tabelas Dual relacionadas podem ser retornadas no modo DirectQuery.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. A lógica de consulta, incluindo o grupo por operação, será transmitida para o banco de dados de origem.The query logic including the group by operation will be passed down to the source database.

Para obter mais informações sobre o modo de armazenamento Dual, consulte o artigo modo de armazenamento.For more information on the Dual storage mode, see the storage mode article.

Relações fortes versus fracasStrong vs. weak relationships

As ocorrências de agregações baseadas em relações exigem relações fortes.Aggregations hits based on relationships require strong relationships.

As relações fortes incluem as seguintes combinações, em que as duas tabelas são provenientes de uma única fonte.Strong relationships include the following combinations where both tables are from a single source.

Tabela do lado *muitosTable on the *many sides Tabela do lado umTable on the 1 side
DuplaDual DuplaDual
ImportarImport Importar ou DuplaImport or Dual
DirectQueryDirectQuery DirectQuery ou DuplaDirectQuery or Dual

O único caso no qual uma relação de origem cruzada é considerada forte é quando as duas tabelas são de Importação.The only case where a cross-source relationship is considered strong is if both tables are Import. Relações muitos para muitos são sempre consideradas fracas.Many-to-many relationships are always considered weak.

Para ocorrências de agregação de origem cruzada que não dependem de relações, confira a seção abaixo sobre agregações com base em colunas "Agrupar por".For cross-source aggregation hits that don't depend on relationships, see section below on aggregations based on group-by columns.

As tabelas de agregação não são endereçáveisAggregation tables are not addressable

Os usuários com acesso somente leitura ao conjunto de dados não podem consultar tabelas de agregação.Users with read-only access to the dataset cannot query aggregation tables. Isso previne preocupações de segurança no uso com RLS.This avoids security concerns when used with RLS. Os consumidores e as consultas referem-se à tabela de detalhes, não à tabela de agregação; eles nem mesmo precisam saber que a tabela de agregação existe.Consumers and queries refer to the detail table, not the aggregation table; they don't even need to know the aggregation table exists.

Por esse motivo, a tabela Sales Agg deve estar oculta.For this reason, the Sales Agg table should be hidden. Se não estiver, a caixa de diálogo Gerenciar agregações a definirá como oculta quando o usuário clicar no botão Aplicar tudo.If it is not, the Manage aggregations dialog will set it to hidden upon clicking the Apply all button.

Gerenciar caixa de diálogo de agregaçõesManage aggregations dialog

Em seguida, definiremos as agregações.Next we define the aggregations. Selecione o menu de contexto Gerenciar agregações para a tabela Agregação de vendas clicando com o botão direito do mouse na tabela.Select the Manage aggregations context menu for the Sales Agg table, by right-clicking on the table.

Seleção do menu Gerenciar agregações

A caixa de diálogo Gerenciar agregações é exibida.The Manage aggregations dialog is displayed. Ela mostra uma linha para cada coluna na tabela Agregação de vendas, em que podemos especificar o comportamento da agregação.It shows a row for each column in the Sales Agg table, where we can specify the aggregation behavior. As consultas enviadas ao conjunto de dados do Power BI que se referem à tabela Vendas são redirecionadas internamente para a tabela Agregação de vendas.Queries submitted to the Power BI dataset that refers to the Sales table are internally redirected to the Sales Agg table. Os consumidores do conjunto de dados não precisam saber que a tabela Agregação de vendas existe.Consumers of the dataset don't need to know the Sales Agg table even exists.

Gerenciar caixa de diálogo de agregações

A tabela a seguir mostra as agregações para a tabela Agregação de vendas.The following table shows the aggregations for the Sales Agg table.

tabela de agregações

Função de resumoSummarization function

O menu suspenso Resumo oferece os seguintes valores para seleção.The Summarization drop-down offers the following values for selection.

  • ContagemCount
  • GroupByGroupBy
  • MáxMax
  • MínMin
  • SomaSum
  • Contar linhas da tabelaCount table rows

ValidaçõesValidations

As seguintes validações notáveis são impostas pela caixa de diálogo:The following notable validations are enforced by the dialog:

  • A coluna de detalhes selecionada deve ter o mesmo tipo de dados que a coluna de agregação, exceto pelas funções de resumo Contar e Contar linhas da tabela.The detail column selected must have the same datatype as the aggregation column except for the Count and Count table rows summarization functions. Contar e Contar linhas da tabela são oferecidas apenas para colunas de agregação de inteiros e não exigem um tipo de dados correspondente.Count and Count table rows are only offered for integer aggregation columns, and don't require a matching datatype.
  • Não são permitidas agregações encadeadas que abranjam três ou mais tabelas.Chained aggregations covering three or more tables aren't allowed. Por exemplo, não é possível configurar agregações na Tabela A que se referem à Tabela B que tem agregações que se referem à Tabela C.For example, it is not possible to set up aggregations on Table A referring to Table B that has aggregations referring to Table C.
  • Não são permitidas agregações duplicadas em que duas entradas usam a mesma função de resumo e referem-se à mesma coluna/tabela de detalhes.Duplicate aggregations where two entries use the same summarization function and refer to the same detail table/column aren't allowed.
  • A tabela de detalhes deve ser DirectQuery, não Importação.Detail table must be DirectQuery, not Import.

A maioria dessas validações são impostas desabilitando os valores suspensos e mostrando o texto explicativo na dica de ferramenta, conforme mostrado na imagem a seguir.Most such validations are enforced by disabling dropdown values and showing explanatory text in the tooltip, as shown in the following image.

validações mostradas pela dica de ferramenta

Agrupar por colunasGroup by columns

Neste exemplo, as três entradas GroupBy são opcionais, elas não afetam o comportamento de agregação (exceto a consulta de exemplo DISTINCTCOUNT, mostrada na próxima imagem).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). Elas são incluídas principalmente para fins de legibilidade.They are included primarily for readability purposes. Sem essas entradas GroupBy, as agregações ainda seriam atingidas com base nas relações.Without these GroupBy entries, the aggregations would still get hit based on the relationships. Esse é um comportamento diferente de usar agregações sem relações, que é abrangido pelo exemplo de Big Data fornecido posteriormente neste artigo.This is different behavior from using aggregations without relationships, which is covered by the big data example that follows later in this article.

Relações inativasInactive relationships

Não há suporte para agrupar por uma coluna de chave estrangeira usada por um relacionamento inativo e contando com a função USERELATIONSHIP para ocorrências de agregação.Grouping by a foreign key column used by an inactive relationship and relying on the USERELATIONSHIP function for aggregation hits is not supported.

Detectando se as agregações foram atingidas ou não pelas consultasDetecting whether aggregations are hit or missed by queries

Para obter mais informações sobre como detectar se as consultas são retornadas do cache na memória (mecanismo de armazenamento) ou do DirectQuery (enviadas por push à fonte de dados) usando o SQL Profiler, consulte o artigo modo de armazenamento.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. Esse processo também pode ser usado para detectar se as agregações estão sendo atingidas.That process can also be used to detect whether aggregations are being hit, too.

Além disso, o seguinte evento estendido é fornecido no SQL Profiler.Additionally, the following extended event is provided in SQL Profiler.

Query Processing\Aggregate Table Rewrite Query

O snippet de código JSON a seguir mostra um exemplo da saída do evento quando uma agregação é usada.The following JSON snippet shows an example of the output of the event when an aggregation is used.

  • matchingResult mostra que uma agregação foi usada para a subconsulta.matchingResult shows that an aggregation was used for the subquery.
  • dataRequest mostra as colunas agrupar por e as colunas agregadas usadas pela subconsulta.dataRequest shows the group-by column(s) and aggregated column(s) used by the subquery.
  • mapping mostra as colunas na tabela de agregação para as quais foram mapeadas.mapping shows the columns in the aggregation table that were mapped to.

saída de um evento quando a agregação é usada

Exemplos de consultaQuery examples

A seguinte consulta atinge a agregação, porque as colunas na tabela Data estão na granularidade que pode atingir a agregação.The following query hits the aggregation, because columns in the Date table are at the granularity that can hit the aggregation. Será usada a agregação Sum para SalesAmount.The Sum aggregation for SalesAmount will be used.

exemplo de consulta

A consulta a seguir não atinge a agregação.The following query doesn't hit the aggregation. Apesar de solicitar a soma de SalesAmount, ela está executando uma operação "Agrupar por" em uma coluna na tabela Produto, que não está na granularidade que pode atingir a agregação.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. Se você observar as relações no modelo, uma subcategoria de produto poderá ter várias linhas Produto. A consulta não poderia determinar a qual produto agregar.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. Nesse caso, a consulta é revertida para DirectQuery e envia uma consulta SQL à fonte de dados.In this case, the query reverts to DirectQuery and submits a SQL query to the data source.

exemplo de consulta

As agregações não são apenas para cálculos simples que executam uma soma simples.Aggregations aren't just for simple calculations that perform a straightforward sum. Cálculos completos também podem se beneficiar.Complex calculations can also benefit. Conceitualmente, um cálculo complexo é dividido em subconsultas para cada SUM, MIN, MAX e COUNT, e cada subconsulta é avaliada para determinar se a agregação pode ser atingida.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. Esta lógica não se aplica a todos os casos devido à otimização do plano de consulta, mas em geral ela deve ser aplicada.This logic doesn't hold true in all cases due to query-plan optimization, but in general it should apply. O exemplo a seguir atinge a agregação:The following example hits the aggregation:

exemplo de consulta

A função COUNTROWS pode se beneficiar das agregações.The COUNTROWS function can benefit from aggregations. A seguinte consulta atinge a agregação, porque há uma agregação Contar linhas da tabela definida para a tabela Vendas.The following query hits the aggregation because there is a Count table rows aggregation defined for the Sales table.

exemplo de consulta

A função AVERAGE pode se beneficiar das agregações.The AVERAGE function can benefit from aggregations. A consulta a seguir atinge a agregação, porque AVERAGE torna-se internamente um SUM dividido por um COUNT.The following query hits the aggregation because AVERAGE internally gets folded to a SUM divided by a COUNT. Como a coluna UnitPrice tem agregações definidas para SUM e COUNT, a agregação é atingida.Since the UnitPrice column has aggregations defined for both SUM and COUNT, the aggregation is hit.

exemplo de consulta

Em alguns casos, a função DISTINCTCOUNT pode se beneficiar de agregações.In some cases, the DISTINCTCOUNT function can benefit from aggregations. A consulta a seguir atinge a agregação, porque há uma entrada GroupBy para CustomerKey, que mantém a distinção de CustomerKey na tabela de agregação.The following query hits the aggregation because there is a GroupBy entry for CustomerKey, which maintains the distinctness of CustomerKey in the aggregation table. Esta técnica ainda está sujeita ao limite de desempenho em que mais de aproximadamente de dois a cinco milhões de valores diferentes podem afetar o desempenho da consulta.This technique is still subject to the performance threshold where over approximately two to five million distinct values can affect query performance. No entanto, ela pode ser útil em cenários em que há bilhões de linhas da tabela de detalhes e de dois a cinco milhões de valores distintos na coluna.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. Nesse caso, a contagem distinta poderá ser executada mais rapidamente do que examinar a tabela com bilhões de linhas, mesmo se ela tiver sido armazenada na memória.In this case, the distinct count can perform faster than scanning the table with billions of rows, even if it were cached into memory.

exemplo de consulta

RLSRLS

As expressões RLS (segurança em nível de linha) devem filtrar a tabela de agregação e a tabela de detalhes para que funcionem corretamente.Row level security (RLS) expressions should filter both the aggregation table and the detail table to work correctly. Após o exemplo, uma expressão RLS na tabela Geografia funcionará porque a Geografia está no lado da filtragem de relacionamentos tanto com a tabela Vendas quanto com a tabela Agregação de Vendas.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. Consultas que chegam à tabela de agregação e aquelas que não chegam têm RLS aplicado com êxito.Queries that hit the aggregation table and those that do not will have RLS successfully applied.

agregações gerenciam funções

Uma expressão RLS na tabela Produto filtraria apenas a tabela Vendas, não a tabela Agregação de Vendas.An RLS expresson on the Product table would filter only the Sales table, not the Sales Agg table. Isso não é recomendável.This is not recommended. As consultas enviadas por usuários que acessam o conjunto de dado usando essa função não se beneficiarão de ocorrências de agregação.Queries submitted by users who access the dataset using this role would not benefit from aggregation hits. Como a tabela de agregação é outra representação dos mesmos dados na tabela de detalhes, não seria seguro responder a consultas da tabela de agregação porque o filtro RLS não pode ser aplicado.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.

Uma expressão RLS na própria tabela Sales Agg filtraria apenas a tabela de agregação, e não a tabela de detalhes.An RLS expression on the Sales Agg table itself would filter only the aggregation table and not the detail table. Isso não é permitido.This is disallowed.

agregações gerenciam funções

Agregações baseadas em colunas agrupar porAggregations based on group-by columns

Os modelos de Big Data baseados em Hadoop têm características diferentes do que modelos dimensionais.Hadoop-based big data models have different characteristics than dimensional models. Para evitar junções entre tabelas grandes, elas geralmente não contam com relações.To avoid joins between large tables, they often don't rely on relationships. Em vez disso, os atributos de dimensão geralmente são desnormalizados para tabelas de fatos.Instead, dimension attributes are often denormalized to fact tables. Esses modelos de Big Data podem ser usados para se fazer uma análise interativa usando agregações com base em colunas agrupar por.Such big data models can be unlocked for interactive analysis using aggregations based on group-by columns.

A tabela a seguir contém a coluna numérica Movimento a ser agregada.The following table contains the Movement numeric column to be aggregated. Todas as outras colunas são atributos pelos quais agrupar.All other columns are attributes to group by. Ela contém dados de IoT e um grande número de linhas.It contains IoT data and a massive number of rows. O modo de armazenamento é DirectQuery.The storage mode is DirectQuery. As consultas na fonte de dados agregadas em todo o conjunto de dados são lentas devido ao grande volume.Queries on the data source that aggregate across the whole dataset are slow because of the sheer volume.

Uma tabela de IoT

Para habilitar a análise interativa neste conjunto de dados, adicionamos uma tabela de agregação que agrupa pela maioria dos atributos, mas exclui atributos de alta cardinalidade como longitude e latitude.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. Isso reduz drasticamente o número de linhas, e é pequeno o suficiente para se ajustar confortavelmente em um cache na memória.This dramatically reduces the number of rows, and is small enough to comfortably fit into an in-memory cache. O modo de armazenamento da Agregação de atividade do driver é Importação.The storage mode of Driver Activity Agg is Import.

Tabela Agregação de atividade do driver

Em seguida, definimos os mapeamentos de agregação na caixa de diálogo Gerenciar agregações.Next, we define the aggregation mappings in the Manage aggregations dialog. Ela exibe uma linha para cada coluna na tabela Agregação de atividade do driver, em que podemos especificar o comportamento da agregação.It displays a row for each column in the Driver Activity Agg table, where we can specify the aggregation behavior.

Caixa de diálogo Gerenciar agregações para a tabela Agregação de atividade do driver

A tabela a seguir mostra as agregações para a tabela Agregação de atividade do driver.The following table shows the aggregations for the Driver Activity Agg table.

Tabela de agregações Agregação de atividade do driver

Agrupar por colunasGroup by columns

Neste exemplo, as entradas GroupBy não são opcionais. Sem elas, as agregações não seriam atingidas.In this example, the GroupBy entries are not optional; without them the aggregations wouldn't get hit. Esse é um comportamento diferente para usar agregações com base em relações, que é abrangido pelo exemplo de modelo dimensional fornecido anteriormente neste artigo.This is different behavior to using aggregations based on relationships, which is covered by the dimensional model example provided previously in this article.

Exemplos de consultaQuery examples

A consulta a seguir atinge a agregação, porque a coluna Data da atividade é abrangida pela tabela de agregação.The following query hits the aggregation because the Activity Date column is covered by the aggregation table. A agregação Contar linhas da tabela é usada pela função COUNTROWS.The Count table rows aggregation is used by the COUNTROWS function.

exemplo de consulta

Principalmente para modelos que contêm atributos de filtro em tabelas de fatos, é uma boa ideia usar agregações Contar linhas da tabela.Especially for models that contain filter attributes in fact tables, it's a good idea to use Count table rows aggregations. O Power BI pode enviar consultas ao conjunto de dados usando COUNTROWS nos casos não explicitamente solicitados pelo usuário.Power BI may submit queries to the dataset using COUNTROWS in cases where it is not explicitly requested by the user. Por exemplo, a caixa de diálogo de filtro mostra a contagem de linhas para cada valor.For example, the filter dialog shows the count of rows for each value.

caixa de diálogo de filtros

RLSRLS

As mesmas regras de RLS detalhadas acima para agregações com base em relações, quanto a se uma expressão RLS pode filtrar a tabela de agregação, a tabela de detalhes ou ambas, também se aplicam a agregações com base nas colunas Agrupar por.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. No exemplo, uma expressão RLS aplicada à tabela Atividade do Driver pode ser usada para filtrar a tabela Agregação de Atividade do Drive, pois todas as colunas Agrupar por na tabela de agregação são cobertas pela tabela de detalhes.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. Um filtro RLS na tabela Agregação de Atividade do Driver, por outro lado, não pode ser aplicado à tabela Atividade do Driver, portanto, ele não é permitido.An RLS filter on the Driver Activity Agg table on the other hand cannot be applied to the Driver Activity table so is disallowed.

Precedência de agregaçãoAggregation precedence

A precedência de agregação permite que várias tabelas de agregação sejam consideradas por uma única subconsulta.Aggregation precedence allows multiple aggregation tables to be considered by a single subquery.

Considere o exemplo a seguir.Consider the following example. É um modelo de composição que contém várias fontes DirectQuery.It's a composite model containing multiple DirectQuery sources.

  • A tabela de importação Agregação de atividade do driver2 está em uma alta granularidade, porque os atributos agrupar por são poucos e de baixa cardinalidade.The Driver Activity Agg2 Import table is at a high granularity because the group-by attributes are few and low cardinality. O número de linhas poderia ser tão baixo quanto milhares; portanto, ele pode se ajustar facilmente em um cache na memória.The number of rows could be as low as thousands, so it can easily fit into an in-memory cache. Esses atributos são usados por um importante dashboard executivo, portanto, as consultas referentes a eles devem ser rápidas.These attributes happen to be used by a high-profile executive dashboard, so queries referring to them should be as fast as possible.
  • A tabela Agregação de atividade do driver é uma tabela de agregação intermediária em modo DirectQuery.The Driver Activity Agg table is an intermediate aggregation table in DirectQuery mode. Contém mais de um bilhão de linhas no SQL DW do Azure e é otimizada na origem usando índices columnstore.It contains over a billion rows in Azure SQL DW and is optimized at the source using columnstore indexes.
  • A tabela Atividade do driver é DirectQuery e contém mais de um trilhão de linhas de dados de IoT originados de um sistema de Big Data.The Driver Activity table is DirectQuery and contains over a trillion rows of IoT data sourced from a big-data system. Ela atende a consultas de detalhamento para exibir leituras de IoT individuais em contextos de filtro controlados.It serves drillthrough queries to view individual IoT readings in controlled filter contexts.

Observação

As tabelas de agregação DirectQuery que usam uma fonte de dados diferente para a tabela de detalhes só terão suporte se a tabela de agregação for de um SQL Server, do Azure SQL ou da origem do SQL DW do Azure.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.

O volume de memória deste modelo é relativamente pequeno, mas usa um grande conjunto de dados.The memory footprint of this model is relatively small, but it unlocks a huge dataset. Ele representa uma arquitetura equilibrada, porque distribui a carga de consulta entre os componentes da arquitetura que os utiliza com base em seus pontos fortes.It represents a balanced architecture because it spreads the query load across components of the architecture utilizing them based on their strengths.

tabelas para um modelo de volume de memória pequeno que usa um grande conjunto de dados

A caixa de diálogo Gerenciar agregações para Agregação de Atividade do Driver2 mostra que o campo Precedência é 10, maior do que Agregação de Atividade do Driver, o que significa que ele será considerado primeiro por consultas que usam agregações.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. As subconsultas que não estão na granularidade e que podem ser respondidas por Agregação de Atividade do Driver2 considerarão Agregação de Atividade do Driver.Subqueries that are not at the granularity that can be answered by Driver Activity Agg2 will consider Driver Activity Agg instead. Consultas de detalhes que não podem ser respondidas por nenhuma tabela de agregação serão direcionadas à Atividade do driver.Detail queries that cannot be answered by either aggregation table will be directed to Driver Activity.

A tabela especificada na coluna Tabela de detalhes é Atividade do driver, e não Agregação de atividade do driver, porque as agregações encadeadas não são permitidas (consulte validações anteriormente neste artigo).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).

Gerenciar caixa de diálogo de agregações

A tabela a seguir mostra as agregações para a tabela Agregação de atividade do driver 2.The following table shows the aggregations for the Driver Activity Agg2 table.

Tabela de agregações Agregação de atividade do driver 2

Agregações baseadas nas colunas agrupar por combinadas com relaçõesAggregations based on group-by columns combined with relationships

Inclusive, é possível combinar as duas técnicas de agregações descritas anteriormente neste artigo.You can even combine the two techniques for aggregations described earlier in this article. Agregações com base em relações podem exigir que as tabelas de dimensões desnormalizadas sejam divididas em várias tabelas.Aggregations based on relationships may require the denormalized dimension tables be split into multiple tables. Se isso for dispendioso ou inviável para determinadas tabelas de dimensão, os atributos necessários poderão ser replicados na tabela de agregação para determinadas dimensões e relações usadas para outras pessoas.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.

O modelo a seguir replica Mês, Trimestre, Semestre e Ano na tabela Agregação de vendas.The following model replicates Month, Quarter, Semester, and Year in the Sales Agg table. Não há nenhuma relação entre Agregação de vendas e a tabela Data.There is no relationship between Sales Agg and the Date table. Há relações para Cliente e Subcategoria de produto.There are relationships to Customer and Product Subcategory. O modo de armazenamento de Agregação de vendas é Importação.The storage mode of Sales Agg is Import.

combinando técnicas de agregação

A tabela a seguir mostra as entradas definidas na caixa de diálogo Gerenciar agregações da tabela Agregação de vendas.The following table shows the entries set in the Manage aggregations dialog for the Sales Agg table. As entradas GroupBy em que Data é a tabela de detalhes são obrigatórias para atingir agregações para consultas agrupadas pelos atributos de data.The GroupBy entries where Date is the detail table are mandatory to hit aggregations for queries that group by the Date attributes. Como no exemplo anterior, as entradas GroupBy para CustomerKey e ProductSubcategoryKey não afetam as ocorrências de agregação devido à presença de relações (novamente com a exceção de DISTINCTCOUNT).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).

Tabela de agregações Agregação de vendas

Exemplos de consultaQuery examples

A consulta a seguir atinge a agregação, porque CalendarMonth é abrangido pela tabela de agregação, e CategoryName está acessível por meio de relações um para muitos.The following query hits the aggregation because CalendarMonth is covered by the aggregation table, and CategoryName is accessible via one-to-many relationships. A agregação Sum é usada para SalesAmount.The Sum aggregation for SalesAmount is used.

exemplo de consulta

A consulta a seguir não atinge a agregação, porque CalendarDay não é abrangido pela tabela de agregação.The following query doesn't hit the aggregation because CalendarDay is not covered by the aggregation table.

exemplo de consulta

A seguinte consulta de inteligência de tempo não atingirá a agregação porque a função DATESYTD gera uma tabela de valores CalendarDay, não abrangida pela tabela de agregação.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.

exemplo de consulta

Os caches devem ser mantidos em sincroniaCaches should be kept in sync

Agregações que combinam o modo de armazenamento DirectQuery e Importação e/ou Dual poderão retornar dados diferentes se o cache na memória não for mantido sincronizado com os dados de origem.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. A execução da consulta não tenta ocultar os problemas de dados, filtrando, por exemplo, os resultados de DirectQuery para coincidir com os valores armazenados em cache.Query execution won't attempt to mask data issues by, for example, filtering DirectQuery results to match cached values. Esses recursos são otimizações de desempenho e devem ser usados apenas de maneiras que não comprometam sua capacidade de atender aos requisitos de negócios.These features are performance optimizations and should be used only in ways that do not compromise your ability to meet business requirements. É sua responsabilidade conhecer seus fluxos de dados; portanto projete de acordo com isso.It's your responsibility to know your data flows, so please design accordingly. Há técnicas estabelecidas para lidar com esses problemas na origem, se necessário.There are established techniques to handle such issues at the source, if necessary.

Próximas etapasNext steps

Os artigos a seguir tratam mais sobre os modelos compostos e também descrevem o DirectQuery em detalhes.The following articles describe more about composite models, and also describe DirectQuery in detail.

Artigos do DirectQuery:DirectQuery articles: