Plegado de consultas en consultas nativas

En Power Query, puede definir una consulta nativa y ejecutarla en el origen de datos. En el artículo Importación de datos desde una base de datos mediante una consulta de base de datos nativa se explica cómo realizar este proceso con varios orígenes de datos. Sin embargo, mediante el proceso descrito en ese artículo, la consulta no aprovecha ningún plegado de consultas de los pasos de consulta posteriores.

En este artículo se muestra un método alternativo para crear consultas nativas en el origen de datos mediante la función Value.NativeQuery y mantener el mecanismo de plegado de consultas activo para los pasos posteriores de la consulta.

Nota:

Se recomienda leer la documentación sobre el plegado de consultas y los indicadores de plegado de consultas para comprender mejor los conceptos usados en este artículo.

Conectores de datos admitidos

El método descrito en las secciones siguientes se aplica a los siguientes conectores de datos:

Conexión al destino desde el origen de datos

Nota:

Para mostrar este proceso, en este artículo se usa el conector de SQL Server y la base de datos de muestra AdventureWorks2019. La experiencia podría variar de conector a conector, pero en este artículo se muestran los aspectos básicos sobre cómo habilitar las funcionalidades de plegado de consultas en consultas nativas para los conectores admitidos.

Al conectarse al origen de datos, es importante que se conecte al nodo o al nivel en el que desea ejecutar la consulta nativa. En el ejemplo de este artículo, ese nodo es el nivel de base de datos dentro del servidor.

Captura de pantalla del cuadro de diálogo de configuración de la conexión a la base de datos AdventureWorks2019 en una instancia local de SQL Server.

Después de definir la configuración de conexión y de indicar las credenciales de la conexión, se abre el cuadro de diálogo de navegación para el origen de datos. El cuadro de diálogo de navegación contiene todos los objetos disponibles a los que puede conectarse.

En esta lista, debe seleccionar el objeto donde se ejecuta la consulta nativa (también conocida como destino). En este ejemplo, ese objeto es el nivel de base de datos.

En la ventana del navegador de Power Query, seleccione y mantenga presionado (o haga clic con el botón derecho) en el nodo de base de datos en la ventana del navegador y seleccione la opción Transformar datos. Al seleccionar esta opción se crea una nueva consulta de la vista general de la base de datos, que es el destino que necesita para ejecutar la consulta nativa.

Captura de pantalla de la elección de datos en la que el usuario ha hecho clic con el botón derecho del ratón en el nodo de la base de datos en el navegador, con Transformar datos resaltado.

Una vez que la consulta llega al editor de Power Query, solo el paso Origen debe mostrarse en el panel Pasos aplicados. Este paso contiene una tabla con todos los objetos disponibles en la base de datos, de forma similar a cómo se mostraron en la ventana Navegador.

Captura de pantalla de la consulta con solo el paso de origen.

Uso de la función Value.NativeQuery

El objetivo de este proceso es ejecutar el código SQL siguiente y aplicar más transformaciones con Power Query que se pueden volver a plegar al origen.

SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'

El primer paso era definir el destino correcto, que en este caso es la base de datos donde se ejecuta el código SQL. Una vez que un paso tiene el destino correcto, puede seleccionar ese paso (en este caso, Origen en Pasos aplicados) y, a continuación, seleccionar el botón fx de la barra de fórmulas para agregar un paso personalizado. En este ejemplo, sustituya la fórmula Source por la fórmula siguiente:

Value.NativeQuery(Source, "SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'  ", null, [EnableFolding = true])

El componente más importante de esta fórmula es el uso del registro opcional para el cuarto parámetro de la función, que tiene el campo de registro EnableFolding establecido en true.

Captura de pantalla de la nueva fórmula de paso personalizada con el uso de la función Value.NativeQuery y la consulta SQL explícita.

Nota:

Puede obtener más información sobre la función Value.NativeQuery en el artículo de la documentación oficial.

Una vez introducida la fórmula, aparece una advertencia que le pide que habilite la ejecución de consultas nativas para su paso específico. Seleccione Continuar para que se evalúe este paso.

Esta instrucción SQL genera una tabla con solo tres filas y dos columnas.

Captura de pantalla con los resultados de la consulta nativa evaluada en la base de datos de destino.

Plegado de consultas de prueba

Para probar el plegado de consultas de la consulta, puede intentar aplicar un filtro a cualquiera de las columnas y ver si el indicador de plegado de consultas en la sección de pasos aplicados muestra el paso como plegado. En este caso, puede filtrar la columna DepartmentID para obtener valores que no son iguales a dos.

Captura de pantalla que muestra cómo filtrar la columna DepartmentID para que solo tenga los valores que no sean iguales a dos.

Después de agregar este filtro, puede comprobar que los indicadores de plegado de consultas siguen mostrando el plegado de consultas que se genera en este nuevo paso.

Paso de filtro que se muestra como plegado al origen de datos en la sección de pasos aplicados.

Para validar aún más qué consulta se envía al origen de datos, seleccione y mantenga presionado (o haga clic con el botón derecho) en el paso Filas filtradas y seleccionar la opción Ver plan de consulta para comprobar el plan de consulta de ese paso.

En la vista del plan de consulta, puede ver un nodo con el nombre Value.NativeQuery que tiene un hipervínculo que indica Ver detalles. Puede seleccionar este hipervínculo para ver la consulta exacta que se envía a la base de datos de SQL Server.

La consulta nativa se encapsula alrededor de otra instrucción SELECT para crear una subconsulta de la original. Power Query hará lo que pueda para crear la consulta más óptima dadas las transformaciones usadas y la consulta nativa proporcionada.

Captura de pantalla del plan de consulta para el paso Filas filtradas.

Sugerencia

En escenarios en los que se producen errores porque no era posible el plegado de consultas, recomendamos intentar validar los pasos como una subconsulta de la consulta nativa original para comprobar si puede haber conflictos de sintaxis o contexto.