Como vocês sabem, eu estou fazendo uns testes pela internet afora pra testar meus conhecimentos em Power BI e vou aproveitar pra escrever um pouco sobre algumas perguntas que me chamaram atenção.
Link para os testes: https://www.udemy.com/course/exam-70-778-microsoft-power-bi-practice-test-2019/
A Pergunta
A pergunta foi a seguinte: “usando Get Data, o que faz a opção de marcar “Assume Referential Integrity”?”.

Minhas considerações
Eu já estudei bastante essa parte de modelagem do Power BI, mas na hora de responder essa pergunta eu fiquei em dúvida entre a última e a terceira opção. Antes de explicar esse ponto da minha dúvida, deixa eu repassar os outros pontos que, pra mim, são mais óbvios.

- Primeira opção diz que as queries rodam mais eficiente no data source, sim, é verdade, porque você passa de OUTER JOIN pra INNER JOIN, então você garante que tudo que está num lado será encontrado no outro (pensa em duas tabelas se relacionando).
- Segunda opção diz não é suportado em fontes de dados que nao sejam SQL Server e Azure SQL. Errado. Qualquer base que rode como Direct Query pode usar essa função de Assume Referential Integrity.
- Quarta opção, sim, só funciona com Direct Query.
- Quinta opção, já expliquei sobre isso no ponto um.
- Terceira e Sexta opção, vou comentar mais pra frente.
Sobre o ponto 6, que diz “quando houver problemas com a Referential Integrity nos dados isso irá resultar em query error”. O que na verdade acontece é você até pode habilitar Referential Integrity num relacionamento onde ela não existe, e isso não vai dar nenhum erro. Na verdade o relacionamento vai continuar funcionando, porém os dados exibidos serão afetados, ou seja, haverá inconsistência nos dados apresentados no seu relatório. Por exemplo, considere o relacionamento da imagem abaixo.

Só pra ser claro, em casos como o da imagem acima, você não deve habilitar Referential Integrity, mas caso ela esteja habilitada, o que vai acontecer é:
- Se você tiver um visual mostrando apenas a soma de QTY da tabela ORDERS, o resultado vai ser 40.
- Agora, se você adicionar nesse visual um campo da tabela DEPOTS, daí esse resultado vai mudar pra 30. Isso porque a linha de 10 que é NULL é removida do relacionamento pela Referential Integrity.
Sobre o ponto 3, que diz “num relacionamento one-to-many (1:N), o lado MANY não pode ter blanks e todos valores no lado ONE tem que ter um valor correspondente no lado MANY”. Isso está certíssimo, na verdade essa é a definição conceitual de Referential Integrity, ou seja, ao ativar/habilitar a Referential Integrity você na verdade está dizendo pro Power BI assim “pode ativar, eu sei que todos meus registros do lado ONE tem valores no lado MANY”.
Referências
https://docs.microsoft.com/en-us/power-bi/connect-data/desktop-assume-referential-integrity