Aplicación de la opción Asumir integridad referencial en Power BI Desktop

Al conectarse con un origen de datos mediante DirectQuery, puede seleccionar Asumir integridad referencial para habilitar la ejecución de consultas más eficientes en el origen de datos. Esta característica tiene unos cuantos requisitos de datos subyacentes y solo está disponible cuando se utiliza DirectQuery.

Al configurar Asumir integridad referencial, las consultas sobre el origen de datos pueden usar instrucciones INNER JOIN en lugar de OUTER JOIN, lo cual mejora la eficiencia de las consultas.

Screenshot of an Edit Relationship dialog to select Assume Referential Integrity.

Requisitos para el uso de Asumir integridad referencial

Se trata de una opción avanzada y solo está habilitada durante la conexión a datos mediante DirectQuery. Para que Asumir integridad referencial funcione correctamente es necesario cumplir los siguientes requisitos:

  • Los datos de la columna Desde en la relación nunca deben ser nulos ni estar en blanco
  • Para cada valor de la columna Desde, hay un valor correspondiente en la columna Para.

En este contexto, la columna Desde es Varios en una relación Uno a varios o es la columna de la primera tabla en una relación Uno a uno.

Ejemplo de uso de Asumir integridad referencial

En el ejemplo siguiente se muestra cómo se comporta Asumir integridad referencial durante el uso en conexiones de datos. En el ejemplo se conecta a un origen de datos que incluye una tabla Orders, una tabla Products y una tabla Depots.

  • En la siguiente imagen que muestra la tabla Orders y la tabla Products; existe integridad referencial entre Orders[ProductID] y Products[ProductID]. La columna [ProductID] en la tabla Orders nunca es Null y cada valor aparece también en la tabla Products. Como tal, Asumir integridad referencial se debe establecer para obtener consultas más eficientes. El uso de esta opción no cambia los valores que se muestran en los objetos visuales.

    Screenshot of Orders table and Products table.

  • En la siguiente imagen, tenga en cuenta que no existe ninguna integridad referencial entre Orders[DepotID] y Depots[DepotID] , porque DepotID es Null para algunos Orders. Por tanto, Asumir integridad referencial no se debe establecer.

    Screenshot of Orders table and Depots table.

  • Por último, no existe ninguna integridad referencial entre Orders[CustomerID] y Customers[CustID] en las tablas siguientes. CustomerID contiene algunos valores, en este caso, CustX, que no existen en la tabla Customers. Por tanto, Asumir integridad referencial no se debe establecer.

    Screenshot of Orders table and Customers table.

Establecimiento de Asumir integridad referencial

Para habilitar esta característica, active Asumir integridad referencial tal como se muestra en la imagen de abajo.

Screenshot of an Edit Relationship dialog that allows you to select Assume Referential Integrity.

Cuando se activa, la configuración se valida con los datos para asegurarse de que no hay ninguna fila Null o que no coincida. Sin embargo, en casos con un gran número de valores, la validación no es una garantía de que no hay ningún problema de integridad referencial.

Además, la validación se produce en el momento de la edición de la relación y no refleja ningún cambio posterior en los datos.

¿Qué ocurre si se establece incorrectamente Asumir la integridad referencial?

Si establece Asumir integridad referencial cuando hay problemas de integridad referencial en los datos, esa opción no genera errores. Sin embargo, da lugar a incoherencias evidentes en los datos. Por ejemplo, para la relación con la tabla Depots descrita anteriormente, el resultado sería el siguiente:

  • Un objeto visual que muestra el total de Order Qty mostraría un valor de 40.
  • Un objeto visual que muestra el total de Order Qty by Depot City mostraría un valor total de 30 solamente, porque no incluiría el identificador de pedido 1, donde DepotID es Null.