es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo configurar una fecha de inicio y fecha de finalización dinámicas utilizando el Editor avanzado en PowerQuery

Inicialmente creé un código SQL con una StartDate y EndDate estáticas en PowerQuery (ver código a continuación).

Script SQL con valores estáticos:



Select extract(month from STAGE_DATE) as Calendar_Month, count(id) as
number_of_int
from stage_table
where type_code LIKE 'X%'
and stage_date >= to_date('01022021','ddmmyyyy') ---StartDate
and stage_date <= to_date('30042021','ddmmyyyy') ---EndDate
group by extract(month from STAGE_DATE)


Sin embargo, quiero que los usuarios puedan cambiar la StartDate y EndDate. Después de investigar un poco, encontré una función llamada Editor Avanzado que se puede utilizar. Creé una tabla llamada Parámetros (Insertar –> Tabla):


Columna 1: Parámetro Columna 2: Valor
StartDate 01022021
EndDate 30042021

Luego, usé “Editor Avanzado” para definir la tabla de Parámetros. Comencé nombrando StartDate de la siguiente manera:


(ParameterName as text) =>
let
ParamSource = Excel.CurrentWorkbook(){[Name="Parameters"]}[Content],
ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)),
Value=
if Table.IsEmpty(ParamRow)=true
then null
else Record.Field(ParamRow{0},"Value")
in
Value

Luego, en el SQL inicial, ingresé fnGetParameter(‘StartDate’) (ver abajo), pero sigo recibiendo un mensaje de error que dice: “DataSource.Error: Oracle: ORA-00904: “FNGETPARAMETER”: identificador no válido”.

Select extract(month from STAGE_DATE) as Calendar_Month, count(id) as 
        number_of_int
from stage_table 
where type_code LIKE 'X%'
and stage_date >= to_date(fnGetParameter('StartDate'),'ddmmyyyy')
and stage_date <= to_date(fnGetParameter('EndDate'),'ddmmyyyy') 
group by extract(month from STAGE_DATE)

Gracias de antemano por revisar esto.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    El mensaje de error “DataSource.Error: Oracle: ORA-00904: “FNGETPARAMETER”: identificador no válido” sugiere que la función fnGetParameter no es reconocida por la base de datos Oracle.

    Para solucionar este problema, debes asegurarte de que la función esté correctamente definida y accesible dentro de la base de datos Oracle. Aquí te presentamos los pasos que puedes seguir:

    1. Crea una función en la base de datos Oracle que devuelva el valor del parámetro en función de un nombre de parámetro especificado. Por ejemplo:
      CREATE FUNCTION GET_PARAMETER (PARAMETER_NAME IN VARCHAR2)
      RETURN VARCHAR2
      AS
      BEGIN
       RETURN (SELECT VALUE FROM PARAMETERS WHERE PARAMETER = PARAMETER_NAME);
      END;
      

      Esta función toma un nombre de parámetro como entrada y devuelve el valor del parámetro correspondiente de la tabla PARAMETERS.

    2. Actualiza tu consulta SQL para llamar a esta función en lugar de la función PowerQuery. Por ejemplo:

      Select extract(month from STAGE_DATE) as Calendar_Month, count(id) as 
            number_of_int
      from stage_table 
      where type_code LIKE 'X%'
      and stage_date >= to_date(GET_PARAMETER('StartDate'),'ddmmyyyy') 
      and stage_date <= to_date(GET_PARAMETER('EndDate'),'ddmmyyyy') 
      group by extract(month from STAGE_DATE)
      

      Esta consulta llama a la función GET_PARAMETER en lugar de la función PowerQuery, pasando el nombre del parámetro como argumento. La función devuelve el valor del parámetro de la tabla PARAMETERS, que luego se utiliza en la función to_date para convertir el valor a una fecha.

    Siguiendo estos pasos, deberías poder utilizar parámetros dinámicos en tu consulta SQL en PowerQuery.

Comments are closed.