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
Etiquetas:
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
Bienvenido a
Open Business Intelligence
© 2024 Creado por Emilio. Tecnología de