Problema creando un Query Item en Cognos 8 Framework Manager

Hola, tengo un modelo de FM con dos Query Subjects:
TICKETS (con los query items: id_ticket y fechaTicket)
y FERIADOS (con un único query item: fechaFeriado).

Lo que necesito es contar la cantidad de feriados que transcurrieron desde que se insertó el ticket, en SQL sería algo por el estilo:
select T.id_ticket,
T.fechaTicket,
(select count(1) from FERIADOS F where F.fechaFeriado > T.fechaTicket) cantFeriados
from TICKETS T

El problema es que debo resolverlo dentro de FM, por lo que tendría que crear un nuevo query item en TICKETS que sea calculado.
Yo creo que tendría que utilizar una expresión con la cláusula count, pero no veo cómo aplicar el filtro F.fechaFeriado > T.fechaTicket en el FM Expression Editor. He consultado los manuales en línea de COGNOS pero no encuentro ejemplos concretos de cómo se utiliza la expresión count.

Muchas gracias de antemano.
 

mleyzaola

Curioso
Hola,

Lo puedes hacer en el Framework Manager sin problemas pero debes modificar las opciones del Query. En lugar de ser Cognos que es el default, debes cambiarlo por Native. Esto lo encuentras en la definicion del query y luego TEST --> OPTIONS --> SQL SETTINGS. Probablemente deberas cambiar el nombre de la tabla tambien, ya que Cognos normalmente te pone los alias que hayas definido en la conexion y en la tabla. Nada mas verifica que el nombre de la tabla coincide exactamente con la tabla real de tu base de datos.

Aunque asi funcionara, lo mas recomendable es que en lugar de apuntar a tablas desde el FM, apuntes a vistas. Esto te permitira hacer cualquier operacion SQL soportada o no por Cognos desde la base, que finalmente es quien se encarga de hacer el trabajo, no Cognos. Asi evitarias modificar los parametros de default de los queries, como en este caso.

Una recomendacion mas, y no quiero sonar pesado. ¿Sabias que tu query esta haciendo una consulta a la tabla FERIADOS para cada renglon que consulta de la tabla TICKETS? Esto se llama funciones escalares y la verdad no las recomiendo en lo mas minimo. Si tienes 100 registros, pues no vas a ver la diferencia, pero si son algunos cientos de miles para arriba, se va a notar y mucho.

Lo correcto es que encontraras la relacion entre ambas tablas y mejor calcula en un campo la diferencia en dias. Algo asi:

Oracle
SELECT CASE WHEN F.FechaFeriado > T.FechaTicket THEN TRUNC(F.FechaFeriado - T.FechaTicket) ELSE 0 END AS CantFeriados

Sql Server
SELECT CASE WHEN F.FechaFeriado > T.FechaTicket THEN DATEDIFF(dd, T.FechaTicket, F.FechaFeriado) ELSE 0 END AS CantFeriados

Espero que te haya servido de ayuda. Saludos!
 
Arriba