Cómo pasar el parámetro de fecha a través de la consulta MYSQL

Un usuario Pregunto ✅

vacuesta

Hola. Necesito ayuda para que los usuarios puedan ingresar un valor a través de un parámetro de fecha (es decir, ‘Mes anterior’, ‘Trimestre anterior’, ‘Año hasta la fecha’, ‘3 meses anteriores’, etc.).

Ahora mismo tengo el código:

let
    Source = MySQL.Database("206.197.200.161:7706", "master_dev", [ReturnSingleDatabase=true,  Query="select hourly_if_util.collection_time, dev.roa_id,org.company,dev.device,dev.ip,tagname.tag_name,dev.active,hourly_if_util.if_id,hourly_if_util.did,tags.tag_id,hourly_if_util.avg_d_perc_in,hourly_if_util.avg_d_perc_out,hourly_if_util.avg_d_perc_in + hourly_if_util.avg_d_perc_out as avg_d_perc_inout,hourly_if_util.max_d_perc_in,hourly_if_util.max_d_perc_out,hourly_if_util.max_d_perc_in + hourly_if_util.max_d_perc_out as max_d_perc_inout,interface.if_id as iftbl_if_id,tags.tag_id,tagname.tag_name,interface.did,interface.roa_id,interface.ifIndex,interface.ifPhysAddress,interface.ifType,interface.ifSpeed,interface.ifHighSpeed,interface.ifDescr,interface.alias,interface.name,interface.ifOperStatus,interface.ifAdminStatus,interface.ifConnectorPresent,interface.ifLastChange#(lf)  from master_dev.device_interfaces interface #(lf)    left join master_dev.device_interface_tags_map tags ON (interface.if_id = tags.if_id)#(lf)    left join master_dev.device_interface_tags tagname ON (tags.tag_id = tagname.tag_id)#(lf)  left join data_ifutil.normalized_hourly hourly_if_util ON (hourly_if_util.if_id = interface.if_id)#(lf)  JOIN master_dev.legend_device dev ON (dev.id = interface.did)#(lf)  JOIN master_biz.organizations org ON (dev.roa_id = org.roa_id)#(lf)#(tab)#(lf)  where org.company IN ('"&company_pick&"') AND tagname.tag_name in ('"&tag_pick&"') AND  hourly_if_util.collection_time>= '"&date_start&" 00:00:00' and hourly_if_util.collection_time<='"&date_end&" 23:00:00'#(lf)#(lf)  "])
in
    Source

Si observa las filas inferiores del código, hay parámetros que pasé llamados: &date_start& y &date_end&. Actualmente, esto permite a los usuarios ingresar un rango de fechas (es decir, ‘2019-11-01’ y ‘2019-11-30’) después de abrir el archivo .pbit.

Esta es una captura de pantalla de lo que los usuarios pueden ingresar en el momento en que abren el archivo .pbit para que los valores de los parámetros pasen a través de la consulta:

enter_param_value.PNG¿Hay alguna manera de crear funcionalidad para un parámetro en el que los usuarios puedan pasar valores en un parámetro de fecha como ‘Mes anterior’, Trimestre anterior’, ‘3 meses anteriores’, etc.? Parece que se necesita hacer mucha funcionalidad de antemano.
¿Cómo crearía un parámetro donde los usuarios puedan pasar dichos valores a través de esta consulta MYSQL?

Por favor hagamelo saber.

En respuesta a vacuesta

Hola @vacuesta

Según lo probado, es posible de mi lado.

Captura9.JPGCaptura10.JPGCaptura11.JPG

Pruebo con la base de datos de SQL Server, creo código en el editor avanzado como se muestra a continuación.

Captura12.JPG

Captura13.JPG

let
    Source = 
    if Parameter1="previous month"
    then 
       let
          Source1 = Sql.Database("WS-maggiel-02", "power bi test", [Query="select * from ss where DATEPART(m, [date]) = DATEPART(m, DATEADD(m, -1, getdate()))#(lf)AND DATEPART(yyyy, [date]) = DATEPART(yyyy, DATEADD(m, -1, getdate()))"])
       in
          Source1
    else
       if Parameter1="previous quarter" 
       then let
              Source2 = Sql.Database("WS-maggiel-02", "power bi test", [Query="select * from ss where DATEPART(q, [date]) = DATEPART(q, DATEADD(q, -1, getdate()))#(lf)AND DATEPART(yyyy, [date]) = DATEPART(yyyy, DATEADD(q, -1, getdate()))"])
            in
              Source2
        else 
            let
               Source3 = Sql.Database("WS-maggiel-02", "power bi test", [Query="select * from ss"])
            in
               Source3
in
    Source

Atentamente
Maggie
Equipo de apoyo comunitario _ Maggie Li
Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Hola @vacuesta

Por ejemplo, quiero mostrar datos de los 9 años anteriores (de 2011 a 2019),

Cree un parámetro para «año», ingrese 1,2,,,,11 como su valor,

Modificar mi código en el editor avanzado,

ss=Table.SelectRows(#"Added Custom",each [as_of_date]>=#date(Date.Year(DateTime.LocalNow())-#"previous year",1,1))

una vez que selecciono el parámetro «año» como 9, la tabla se muestra a continuación

Captura7.JPGCaptura8.JPG

Con el conjunto de parámetros de consulta, podríamos reducir los datos importados en Power BI Desktop, lo que puede mejorar el rendimiento del informe.

Pero si desea filtrar datos para verlos o analizarlos, puede crear medidas y usar segmentaciones para controlar los valores que se muestran en las tablas.

Podrías usar «Cortador relativo».

Además, hay algunos hilos a los que podrías referirte:

https://carldesouza.com/creating-a-power-bi-chart-comparing-each-year-vs-previous-year/

https://community.powerbi.com/t5/Desktop/Showing-Previous-Month-and-Week-Data/td-p/627808

Atentamente
Maggie
Equipo de apoyo comunitario _ Maggie Li
Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

vacuesta

En respuesta a v-juanli-msft

Hola. Esto no es necesariamente lo que quiero hacer. Quería saber si había alguna forma de que los usuarios finales pasaran un valor de parámetro como «Mes anterior» o «Trimestre anterior» a través del código de consulta mysql que tengo en mi pregunta.

¿Hay alguna forma de hacer esto?

En respuesta a vacuesta

Hola @vacuesta

Según lo probado, es posible de mi lado.

Captura9.JPGCaptura10.JPGCaptura11.JPG

Pruebo con la base de datos de SQL Server, creo código en el editor avanzado como se muestra a continuación.

Captura12.JPG

Captura13.JPG

let
    Source = 
    if Parameter1="previous month"
    then 
       let
          Source1 = Sql.Database("WS-maggiel-02", "power bi test", [Query="select * from ss where DATEPART(m, [date]) = DATEPART(m, DATEADD(m, -1, getdate()))#(lf)AND DATEPART(yyyy, [date]) = DATEPART(yyyy, DATEADD(m, -1, getdate()))"])
       in
          Source1
    else
       if Parameter1="previous quarter" 
       then let
              Source2 = Sql.Database("WS-maggiel-02", "power bi test", [Query="select * from ss where DATEPART(q, [date]) = DATEPART(q, DATEADD(q, -1, getdate()))#(lf)AND DATEPART(yyyy, [date]) = DATEPART(yyyy, DATEADD(q, -1, getdate()))"])
            in
              Source2
        else 
            let
               Source3 = Sql.Database("WS-maggiel-02", "power bi test", [Query="select * from ss"])
            in
               Source3
in
    Source

Atentamente
Maggie
Equipo de apoyo comunitario _ Maggie Li
Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

vacuesta

En respuesta a v-juanli-msft

Como pregunta de seguimiento. Quería saber cuál era el nombre del servidor y el nombre de la base de datos a los que puedo conectarme para obtener estos datos.

vacuesta

En respuesta a v-juanli-msft

Tengo una pregunta de aclaración. En el código que usaste esta línea

 Source1 = Sql.Database("WS-maggiel-02"

¿Es esta una base de datos a la que puedo acceder?

Por favor hagamelo saber. Gracias.

En respuesta a vacuesta

Hola @vacuesta

Este es el nombre del servidor de mi base de datos (SQL Server), no puede acceder a eso.

Cambie la consulta de conexión con su base de datos (MySQL).

Atentamente

Maggie

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *