Aplicar a configuração Pressupor Integridade Referencial no Power BI DesktopApply the Assume Referential Integrity setting in Power BI Desktop

Ao se conectar a uma fonte de dados usando o DirectQuery, você pode usar a seleção Pressupor integridade referencial para habilitar a execução de consultas mais eficientes em relação a sua fonte de dados.When connecting to a data source using DirectQuery, you can use the Assume Referential Integrity selection to enable running more efficient queries against your data source. Esse recurso tem alguns requisitos dos dados subjacentes e só está disponível ao usar o DirectQuery.This feature has a few requirements of the underlying data, and it is only available when using DirectQuery.

A configuração Pressupor integridade referencial permite que as consultas na fonte de dados usem as instruções INNER JOIN em vez de OUTER JOIN, o que melhora a eficiência da consulta.Setting Assume referential integrity enables queries on the data source to use INNER JOIN statements rather than OUTER JOIN, which improves query efficiency.

Captura de tela de uma caixa de diálogo Editar Relacionamento para selecionar Presumir integridade referencial.

Requisitos para usar Pressupor integridade referencialRequirements for using Assume referential integrity

Essa é uma configuração avançada habilitada apenas ao se conectar a dados usando o DirectQuery.This is an advanced setting, and is only enabled when connecting to data using DirectQuery. Os requisitos a seguir são necessários para que Pressupor integridade referencial funcione corretamente:The following requirements are necessary for Assume referential integrity to work properly:

  • Dados na coluna From na relação nunca são nulos ou em brancoData in the From column in the relationship is never Null or blank
  • Para cada valor na coluna From, há um valor correspondente na coluna ToFor each value in the From column, there is a corresponding value in the To column

Nesse contexto, a coluna From é muitos em uma relação um-para-muitos, ou é a coluna da primeira tabela em uma relação um-para-um.In this context, the From column is the Many in a One-to-Many relationship, or it is the column in the first table in a One-to-One relationship.

Exemplo de uso de Pressuposição de integridade referencialExample of using Assume referential integrity

O exemplo a seguir demonstra como Pressupor integridade referencial se comporta quando usado em conexões de dados.The following example demonstrates how Assume referential integrity behaves when used in data connections. O exemplo conecta-se a uma fonte de dados que inclui uma tabela Orders, uma tabela Products e uma tabela Depots.The example connects to a data source that includes an Orders table, a Products table, and a Depots table.

  1. Na imagem a seguir, que mostra a tabela Orders e a tabela Products, observe que a integridade referencial existe entre Orders[ProductID] e Products[ProductID] .In the following image that shows the Orders table and the Products table, note that referential integrity exists between Orders[ProductID] and Products[ProductID]. A coluna [ProductID] na tabela Orders nunca é nula e cada valor aparece também na tabela Products.The [ProductID] column in the Orders table is never Null, and every value also appears in the Products table. Como tal, Pressupor integridade referencial deve ser definido para obter consultas mais eficientes (usar essa configuração não altera os valores mostrados em elementos visuais).As such, Assume Referential Integrity should be set to get more efficient queries (using this setting does not change the values shown in visuals).

    Captura de tela da tabela Pedidos e da tabela Produtos.

  2. Na próxima imagem, observe que nenhuma integridade referencial existe entre Orders [DepotID] e Depots[DepotID] , pois o DepotID é nulo para alguns Orders.In the next image, notice that no referential integrity exists between Orders[DepotID] and Depots[DepotID], because the DepotID is Null for some Orders. Como tal, Pressupor integridade referencial nãodeve ser definido.As such, Assume Referential Integrity should not be set.

    Captura de tela das tabelas Pedidos e Depósitos.

  3. Por fim, não há integridade referencial entre Orders[CustomerID] e Customers[CustID] nas tabelas a seguir; o CustomerID contém alguns valores (nesse caso, CustX) que não existem na tabela Customers.Finally, no referential integrity exists between Orders[CustomerID] and Customers[CustID] in the following tables; the CustomerID contains some values (in this case, CustX) that do not exist in the Customers table. Como tal, Pressupor integridade referencial nãodeve ser definido.As such, Assume Referential Integrity should not be set.

    Captura de tela da tabela Pedidos e da tabela Clientes.

Configuração Pressupor integridade referencialSetting Assume referential integrity

Para habilitar esse recurso, marque a caixa de seleção próxima a Pressupor integridade referencial, conforme mostrado na imagem a seguir.To enable this feature, select the checkbox next to Assume Referential Integrity as shown in the following image.

Captura de tela de uma caixa de diálogo Editar Relacionamento que permite que você selecione Presumir integridade referencial.

Quando selecionada, a configuração é validada em relação aos dados para garantir que não haja nenhum nulo ou linhas incompatíveis.When selected, the setting is validated against the data to ensure there are no Null or mismatched rows. No entanto, para casos com um número muito grande de valores, a validação não é garantia de que não haja nenhum problema de integridade referencial.However, for cases with a very large number of values, the validation is not a guarantee that there are no referential integrity issues.

Além disso, a validação ocorre no momento da edição da relação e não reflete nenhuma alteração subsequente nos dados.In addition, the validation occurs at the time of editing the relationship, and does not reflect any subsequent changes to the data.

O que acontece se você configurar incorretamente Pressupor integridade referencial?What happens if you incorrectly set Assume referential integrity?

Se você definir Pressupor Integridade Referencial quando houver problemas de integridade referencial nos dados, isso não resultará em erros.If you set Assume Referential Integrity when there are referential integrity issues in the data, this will not result in errors. No entanto, resultará em aparentes inconsistências nos dados.However, it will result in apparent inconsistencies in the data. Por exemplo, no caso da relação com a tabela Depots descrita acima, resultaria no seguinte:For example, in the case of the relationship to the Depots table described above, it would result in the following:

  • Um visual mostrando o total Order Qty mostra um valor de 40A visual showing the total Order Qty would show a value of 40
  • Um visual mostrando o total Order Qty by Depot City mostraria um valor total de apenas 30, pois não incluiria a ID de pedido 1, onde DepotID é nulo.A visual showing the total Order Qty by Depot City would show a total value of only 30, because it would not include Order ID 1, where DepotID is Null.

Próximas etapasNext steps

Saiba mais sobre o DirectQueryLearn more about DirectQuery

Obter mais informações sobre Relações no Power BIGet more information about Relationships in Power BI

Saiba mais sobre a Exibição de Relações no Power BI Desktop.Learn more about Relationship View in Power BI Desktop.