Open Business Intelligence

La red del Business Intelligence

saludos tropa, requiero en estos momentos de hacer una consulta que me permita buscar por año, mes y dia, debo dividir la fecha en esas partes. Cuando ponia el codigo con la fecha directa de esta manera

  t.anno = extract(year from timestamp '2016-09-28') AND
  t.mes = extract(month from timestamp '2016-09-28') AND
  t.dia_mes = (extract(day from timestamp '2016-09-28')) -1 AND
  (extract(day from timestamp '2016-09-28')) > 1

el codigo en el PRD me funciona perfecto, pero cuando creo el parametro fecha y sustituyo

  t.anno = extract(year from timestamp ${FECHA}) AND
  t.mes = extract(month from timestamp ${FECHA}) AND
  t.dia_mes = (extract(day from timestamp ${FECHA})) -1 AND
  (extract(day from timestamp ${FECHA})) > 1

me sale el siguiente error

org.pentaho.reporting.engine.classic.core.ReportDataFactoryException: Failed at query: SELECT pm.nombre_org, pm.toneladas_mes, pd.toneladas_dias
FROM
      (
SELECT
  d.nombre_org,
  SUM(c.toneladas) AS toneladas_mes
FROM
  d_entidad d,
  d_tiempo t,
  h_consumos c
WHERE
  c.fecha = t.id AND
  c.empresa = d.id AND
  t.anno = extract(year from timestamp ${FECHA}) AND
  t.mes = extract(month from timestamp ${FECHA})
GROUP BY  d.nombre_org
ORDER BY d.nombre_org
      )pm LEFT JOIN
 (
SELECT
  d.nombre_org,
  SUM(c.toneladas) toneladas_dias
FROM
  d_entidad d,
  d_tiempo t,
  h_consumos c
WHERE
  c.fecha = t.id AND
  c.empresa = d.id AND
  t.anno = extract(year from timestamp ${FECHA}) AND
  t.mes = extract(month from timestamp ${FECHA}) AND
  t.dia_mes = (extract(day from timestamp ${FECHA})) -1 AND
  (extract(day from timestamp ${FECHA})) > 1
GROUP BY d.nombre_org
ORDER BY d.nombre_org
      )pd
ON
pm.nombre_org = pd.nombre_org
    at org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sql.SimpleSQLReportDataFactory.queryData(SimpleSQLReportDataFactory.java:258)
    at org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sql.SQLReportDataFactory.queryData(SQLReportDataFactory.java:171)
    at org.pentaho.reporting.engine.classic.core.CompoundDataFactory.queryStatic(CompoundDataFactory.java:135)
    at org.pentaho.reporting.engine.classic.core.cache.CachingDataFactory.queryInternal(CachingDataFactory.java:431)
    at org.pentaho.reporting.engine.classic.core.cache.CachingDataFactory.queryStatic(CachingDataFactory.java:184)
    at org.pentaho.reporting.engine.classic.core.CompoundDataFactory.queryStatic(CompoundDataFactory.java:130)
    at org.pentaho.reporting.engine.classic.core.CompoundDataFactory.queryData(CompoundDataFactory.java:85)
    at org.pentaho.reporting.engine.classic.core.states.datarow.ReportDataRow.createDataRow(ReportDataRow.java:97)
    at org.pentaho.reporting.engine.classic.core.states.datarow.DefaultFlowController.performQuery(DefaultFlowController.java:188)
    at org.pentaho.reporting.engine.classic.core.states.process.ProcessState.initializeForMasterReport(ProcessState.java:260)
    at org.pentaho.reporting.engine.classic.core.layout.output.AbstractReportProcessor.prepareReportProcessing(AbstractReportProcessor.java:477)
    at org.pentaho.reporting.engine.classic.core.modules.output.pageable.graphics.PrintReportProcessor.getNumberOfPages(PrintReportProcessor.java:79)
    at org.pentaho.reporting.engine.classic.core.modules.gui.base.PreviewPane$RepaginationRunnable.run(PreviewPane.java:273)
    at org.pentaho.reporting.engine.classic.core.util.Worker.run(Worker.java:174)
ParentException:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"
  Position: 273
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1927)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:562)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:420)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:305)
    at org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sql.SimpleSQLReportDataFactory.parametrizeAndQuery(SimpleSQLReportDataFactory.java:427)
    at org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sql.SimpleSQLReportDataFactory.queryData(SimpleSQLReportDataFactory.java:254)
    at org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sql.SQLReportDataFactory.queryData(SQLReportDataFactory.java:171)
    at org.pentaho.reporting.engine.classic.core.CompoundDataFactory.queryStatic(CompoundDataFactory.java:135)
    at org.pentaho.reporting.engine.classic.core.cache.CachingDataFactory.queryInternal(CachingDataFactory.java:431)
    at org.pentaho.reporting.engine.classic.core.cache.CachingDataFactory.queryStatic(CachingDataFactory.java:184)
    at org.pentaho.reporting.engine.classic.core.CompoundDataFactory.queryStatic(CompoundDataFactory.java:130)
    at org.pentaho.reporting.engine.classic.core.CompoundDataFactory.queryData(CompoundDataFactory.java:85)
    at org.pentaho.reporting.engine.classic.core.states.datarow.ReportDataRow.createDataRow(ReportDataRow.java:97)
    at org.pentaho.reporting.engine.classic.core.states.datarow.DefaultFlowController.performQuery(DefaultFlowController.java:188)
    at org.pentaho.reporting.engine.classic.core.states.process.ProcessState.initializeForMasterReport(ProcessState.java:260)
    at org.pentaho.reporting.engine.classic.core.layout.output.AbstractReportProcessor.prepareReportProcessing(AbstractReportProcessor.java:477)
    at org.pentaho.reporting.engine.classic.core.modules.output.pageable.graphics.PrintReportProcessor.getNumberOfPages(PrintReportProcessor.java:79)
    at org.pentaho.reporting.engine.classic.core.modules.gui.base.PreviewPane$RepaginationRunnable.run(PreviewPane.java:273)
    at org.pentaho.reporting.engine.classic.core.util.Worker.run(Worker.java:174)

Alguien sabe que hago mal. O quizas la respuesta sea como hacer que en PRD yo pueda extraer de alguna forma el año, el mes y el dia de una fecha que se pase por parametro. Gracias

Visitas: 1809

Respuestas a esta discusión

Hola.

Me imagino que en la declaración del parámetro 'FECHA' en Report Designer has puesto el tipo de entrada de dato como timestamp o como date, por lo tanto, creo, no es necesario añadirlo a la query. Quedaría algo así:

  t.anno = extract(year from ${FECHA}) AND
  t.mes = extract(month from ${FECHA}) AND
  t.dia_mes = (extract(day from ${FECHA})) -1 AND
  (extract(day from ${FECHA})) > 1

Ya nos dirás.

Saludos.

Saludos manuel, te cuento que cuando respondiste ya había logrado resolver el problema. Aqui muestro la solucion usada para quien interese. Esta solución es muy buena creo porque se hizo con las herramientas de pentaho, asi que sirve para cualquier gestor de base de datos que se use, no de la forma que tenia anterior, que es posible que algunas de las funcionses fueran propias de postgresql y no funcionaran en otro gestor.

ya teníamos un parámetro FECHA de tipo date y que se seleccionaba por un datepicker entonces creé tres parámetros más (AÑO, MES Y DIA) , al darle doble click a cada uno sale la siguiente ventana

oprimo el siguiente botón

nos saldrá la siguiente ventana y hacemos la selección especificada en la imagen

damos ok entoncs tendremos definido el parámetro tomando como valor, el año de la fecha seleccionada como se puede ver en la siguiente imagen.

aqui se marca el checkbox hidden para que este parametro no salga preguntando que valor le da el usuario, pues se cojera automático. Una vez echo esto se hace lo mismo para el mes y el dia, luego queda el codigo que iniciaba este tema asi.

  c.tipo_combustible = co.id AND
  t.anno = ${ANNO} AND
  t.mes = ${MES}

como ven es más sencillo y el cálculo del año, mes y dia no está anclado al código sql, por lo que es una solución portable. espero les sea de utilidad.

Gracias por compartir la solución Dennis!

Saludos

RSS

Distintivo

Cargando…

© 2022   Creado por Emilio.   Tecnología de

Emblemas  |  Reportar un problema  |  Términos de servicio