Uso de parámetros en consulta SQL nativa

 In Destacado, Power Query

Parámetros en Instrucciones de SQL Nativas.

En muchas ocasiones, requerimos para la automatización de informes, de utilizar parámetros como filtro de manera que, cambiando el parámetro, cambiamos la información.

Esos filtros son muy sencillos de hacer en power query agregando un paso más en nuestro código M.

Sin embargo, cuando trabajamos en Direct Query, que no admite pasos de filtrado debemos utilizar el filtro directamente en la consulta SQL nativa, en la que el uso de parámetros es algo más complicado.

 

Aquí os muestro un ejemplo de consulta realizada en modo direct query en la que necesitaría sustituir el “1” del where=Empresa por el parámetro Empresa.

Si directamente en la instrucción SQL utilizo el parámetro where Empresa=(Emp) me devuelve el siguiente error:

 

Eso es porque no reconoce el parámetro como tal.

Si vemos el código en el editor podemos intuir por qué:

El valor del query es un texto en su conjunto, por lo que el parámetro debemos de pasarlo como una parte más de ese texto. ¿Cómo hacer eso? Muy simple: sustituimos (Emp) por

= “&Text.From(Emp) de manera que estamos con el & concatenando a la cadena de texto que cerramos tras el = y el parámetro.

Pero ojo, si esa modificación la hacemos directamente en el cuadro de diálogo de la instrucción SQL nos dará igualmente un error:

 

Sigue sin reconocernos el parámetro. Nos vamos al editor y nos encontramos que lo ha escrito, al hacerlo en el cuadro de diálogo de la siguiente manera:

 

 

Quitamos las comillas en las que nos ha envuelto el Text.From  y ya si que funciona:

 

Ya tenemos una consulta nativa de SQL parametrizada de manera que cambiando el parámetro (Emp) cambiamos la empresa de la que nos devuelve los datos en una tabla Direct Query que no admite el filtrado como un paso.

 

Recommended Posts
Showing 5 comments
  • Wilson Lanzziano

    Muchas gracias por el ejemplo, aunque me queda una duda. Como hago para que desde el reporte pueda cambiar el parámetro?… En mi caso estoy usando el parámetro «Fecha» para cambiar la fecha de mi reporte.

  • Wilson Lanzziano

    Estoy usando una conexión mediante Ole DB pero al probar un parámetro no lo toma la query, hay algo que se deba hacer?

  • Andys Bohorquez

    Me gustaria saber esto mismo pero con una lista de otra tabla.

  • Matt

    Hola,

    Muchísimas gracias por tu post.
    Me conecto a través de ODBC y el lenguaje de la query es SQL DB2.

    Cuando intento poner la variable (correctamernte configurada) dentro del texto de la query me da este error:
    Expression.Error: We cannot convert a value of type Record to type Text.

    Abajo parte de mi código:

    let
    Origen = Odbc.Query(«dsn=xxx», [Query = «………………WHERE#(lf)T1.SchCode||T1.PlanNo = » & Text.From(PlanNumber) & «‘»]

    La variable es un conjunto alfanumerico. Si la uso como filtro «fuera» de la descarga, funciona. Si intento meterla dento del código para que sea más rápida, me da este error. Sé que estoy haciendo algo mal pero no consigo verlo..

    Muchísimas gracias!

  • DIEGO MOLINA

    Estimada comunidad, necesito de vuestra ayuda para poder automatizar desde power query una consulta nativa desde SQL server que se alimenta desde Sap B1,la cual tiene un parámetro de fecha para filtrarla. Les comparto parte de la query ya que es demasiada extensa:

    DECLARE @cont INT DECLARE @FECHAHASTA DATETIMESET @cont = (SELECT TOP 1 T9.TransId FROM [dbo].[JDT1] T9 WHERE T9.RefDate <='[%0]')

    SET @FECHAHASTA = '[%0]'

    SELECT T0.CardCode, T0.CardName, CASE WHEN T3.DebHab = 'D' THEN Sum(T1.Debit-T1.Credit-T3.ReconSum) WHEN T3.DebHab = 'C' THEN Sum(T1.Debit-T1.Credit+T3.ReconSum) ELSE Sum(T1.Debit-T1.Credit) END 'Saldo', ….

    Lo que esta [%0], es el parámetro de fecha que llama la query, como podría automatizarla desde power query?? Saludos y muchas gracias