Mantener el plegado de consulta con consultas nativas

Mantener el plegado de consulta con consultas nativas

Durante este fin de semana e impartido dos charlas en Power Platform Bootcamp de Madrid y Barcelona en la que el tema principal era el tratamiento del plegado de consulta visto desde la perspectiva de los flujos de datos y el control que se puede tener ahora mismo gracias al elemento visual de seguimiento del plegado, que es una característica que se implementó a principios de enero y que es espectacular.

Una de las cosas que he repetido hasta la saciedad es que si nos traemos los datos con una consulta nativa de SQL, el siguiente paso a la consulta nativa no va a mantener el plegado de ningún modo, por lo que era una tontería traernos los datos con una consulta nativa y luego realizar más transformaciones.

Es el caso de la imagen. Nos traemos los datos con un Select * from DimProductCategory y el siguiente paso rompe el query folding aunuqe sea un paso de filtrado que de ningún modo lo rompe si no partimos de una consulta nativa.

Pues bien, Chris Webb acaba de anunciar en su blog que la función Native.Query () ya admite mantener el plegado

Chris Webb’s BI Blog: Query Folding On SQL Queries In Power Query Using Value.NativeQuery() and EnableFolding=true Chris Webb’s BI Blog (crossjoin.co.uk)

Por supuesto que me he acelerado a probarlo y esto son los resultados:

Por desgracia el comando EnableFolding=true no es admitido en el cuadro de dialogo que es la vía habitual que utilizamos para una native query

Sin embargo, lo probamos en la función Native.Query()

Y efectivamente el indicador de color continua en verde

Y a través del plan de consulta podemos observar que el plegado se mantiene

Al contrario que en el primer ejemplo, con el cuadro de diálogo en el que el plegado se rompe

Una novedad fantástica aunque nos va a suponer cambiar un poco la forma de trabajar para realizar las consultas nativas con el comando Native.Query() en lugar de seguir utilizando el cuadro de diálogo.

Y como hay que ser productivos a la hora de trabajar. Con esta función consigo un cuadro de dialogo para mis consultas nativas que admita el plegado de consulta:

(ConsultaNativa as text) =>

let
  Origen = Sql.Database(SV, BD),
  RunSQL = Value.NativeQuery(
    Origen,
    ConsultaNativa,
    null,
    [EnableFolding = true]
  )
in
  RunSQL   
Francisco Mullor Cabrera

5 comentarios

Christian Vaca Publicado el3:08 am - 22/02/2021

Excelente aporte Francisco. Una consulta como puedo implementar esta función para poder el filtrado por fecha en la consulta nativa desde SQL. Encontre una respuesta para filtrar texto en un blog suyo https://powerbiuniversity.com/uso-parametros-consulta-sql-nativa/ pero para fechas no lo he podido solucionar. Intente poner &Parametro& como se meciona en este blog (https://es.stackoverflow.com/questions/158942/pasar-valor-de-parametro-a-consulta-antes-de-ejecutarse-en-power-bi) pero me sale error.
Quedo atento de su amable respuesta.

    Francisco Mullor Cabrera Publicado el8:08 am - 22/02/2021

    Los parámetros en el cuadro de diálogo de las consultas nativas, aunque representen una fecha siempre son un texto.

    Te pongo un ejemplo. En la base de datos de contoso, la FactSales tiene un datekey que es datetime, sin embargo una consulta como ésta:
    SELECT *
    FROM [dbo].[FactSales]
    where DateKey=’2007-01-02′
    Te va a devolver sin ningún problema las ventas del 2 de enero de 2007.

    Como se traduce eso en la query nativa con parámetro??

    El parámetro tiene que ser tipo texto

    Parámetro = «2007-01-02»

    Y la consulta nativa, como expuse en el blog sería

    [Query = "SELECT *
    FROM [dbo].[FactSales]
    where DateKey='"&Text.From(Parámetro)&"'""]

    Como ves hay que mantener incluso las ‘ ‘ de la query

Diego Diaz Publicado el2:59 pm - 17/12/2021

Excelente aporte Francisco, pude resolver muchos problemas con tu publicación. Muchas gracias

Jerly randolfo Publicado el3:10 am - 11/06/2023

Que excelente información…

hola mira este paso, antes hice el stored procedure en mi base de dados,
sp = Value.NativeQuery(Origen,»EXEC#(tab)[dbo].[spsBcliente] @Fname,@Lname»,[Fname=Firtsn,Lname=Lastn]),

    Francisco Mullor Publicado el5:40 am - 11/06/2023

    los parámetros que son necesarios para el procedimiento almacenado y el mantenimiento del plegado con value.native.query no son compatibles

Deja una respuesta