Professional Documents
Culture Documents
Modelo de datos:
Como se indicó anteriormente, esta área se encarga de la definición de los datos que serán mostrados en
el informe. Para lo cual se necesita definir las consultas a las diferentes fuentes (tablas, vistas,
procedimientos almacenados, archivos xml, módulos olap), definir las sumarizaciones y programar las
funciones adicionales que pudieran ser necesarias en el informe.
La figura 2, muestra las herramientas del modelo de datos.
Vamos a hacer un ejemplo en la herramienta para mostrar las anteriores tres herramientas:
1. Definamos la estructura de las fuentes de datos
2. Supongamos que se tiene la estructura de tablas: estructura.txt
3. Ahora bien, se desea generar un informe que muestre para cada alumno, las materias cursadas con su
respectiva calificación
4. Ejecutamos la herramienta oracle reports, y procedemos a crear un nuevo informe.
Estando en la ventana modelo de datos, seleccionamos la opción consulta sql y la colocamos sobre la
hoja de edición (para esto basta con hacer clic sobre la herramienta y luego clic sobre el fondo de la hoja)
Aparece una ventana solicitando la consulta que deseamos ejecutar. Es aquí donde disponemos de las
dos opciones: usar el query builder o lanzarnos personalmente a escribir la consulta sql. Para el ejemplo
usaremos el query builder.
Para poder acceder al query builder es necesario validarse como usuario de la bd oracle, por lo tanto se
debe registrar el nombre de usuario, contraseña y string de conexión.
Una vez validada la conexión se muestra una lista de los objetos de que dispone el usuario (tablas, vistas,
sinónimos, instantáneas), de la cual se deben seleccionar los objetos a usar en la consulta. En nuestro
caso se seleccionarán las tablas alumno, materia e inscripción.
Luego cliquear aceptar, tenemos ahora la consulta sql lista! (Claro, si conocemos los detalles del lenguaje
sql podemos escribir directamente la sentencia sin necesidad de llamar a don query builder)
Y nuevamente aceptar para ver el modelo de datos generado. La siguiente figura muestra el grupo de
datos generado a través de la consulta que se acaba de definir. El concepto de grupo es importante pues
define la manera en que se mostrarán los datos posteriormente. En este caso solamente tenemos un
grupo conformado por el id del alumno, el nombre y el apellido del alumno, el id de la materia el nombre
de la materia cursada y la nota. Si el alumno cursó 10 materias, algunos de estos datos como id, nombre
y apellido del alumno se repetirán las 10 veces.
Aquí sería necesario implementar una forma de ver el reporte a manera maestro – detalle.
Para dividir este grupo en dos grupo sólo basta con seleccionar los campos que hacen parte del detalle y
llevarlos fuera del grupo (o sacarlos del grupo), con lo que nos quedaría algo así:
Agreguemos ahora una columna de resumen que nos muestre el promedio de las calificaciones obtenidas
por cada alumno. Para esto, seleccionamos la herramienta columna resumen y la colocamos dentro del
primer grupo (el grupo del alumno), y colocamos otra columna resumen fuera de los grupos (CS_2), con
lo que nos queda algo así:
Vamos a explicar qué queremos al incluir dos columnas de resumen CS_1 y CS_2, se puede ver que
CS_1 es un resumen a nivel del grupo G_Nombre y lo que queremos con CS_2 es tener un resumen a
nivel de todo el reporte. Es decir, queremos un resumen del promedio de calificaciones por alumno y un
resumen del promedio general.
Ahora bien, seleccionamos el campo CS_1 y abrimos la ventana de propiedades (botón derecho del
mouse – opción inspector de propiedades) y fijamos los valores como lo indica la siguiente figura:
Como puede verse, para la propiedad función permite seleccionar de una lista de operaciones(conteo,
suma, valor máximo, …).
La propiedad origen indica el campo que interviene en el resumen
La propiedad Restablecer en, indica en este caso que por cada alumno hará la operación definida.
En conclusión, se hallará el valor promedio del campo calificación por cada alumno.
Ahora, seleccionamos el campo CS_2, nuevamente abrimos la paleta de propiedades y fijamos los
siguiente valores
En esta configuración, le estamos indicando que el resumen debe hacerse a nivel de todo el reporte, y
vamos a promediar los promedios de los estudiantes.
Listo. Ahora únicamente nos falta generar la parte visual de nuestro reporte. Para esto seleccionamos la
opción programa/ejecutar disposición de papel. Este asistente ayuda a configurar la parte visual del
reporte y lo concerniente a los datos.
Una de los pasos dentro de este asistente, es la definición del estilo de reporte a crear. Para neutro
ejemplo, señalaremos la opción agrupar arriba . Haciendo clic en siguiente, se edita el origen de datos (el
cual ya definimos), luego la pestaña datos en donde se seleccionan los campos que se desean mostrar
en el informe. No siempre querremos que todos los campos en la cláusula select sean mostrados. Lo
grupos ya están definidos. Finalmente, si desea generarse el reporte con alguna plantilla, ésta puede ser
seleccionada, o si por el contrario no se desea usar plantilla, también existe la posibilidad de seleccionar
ésta decisión.
Ahora, usando la herramienta enlace, vamos a unir los campos las 3 consultas por el campo idpersona. El
procedimiento es muy sencillo; solamente basta con tomar la herramienta enlace de datos (haciendo clic
sobre ésta), luego unir los campos de las consultas, arrastrando el mouse desde el campo de la consulta
origen hasta el campo de la consulta destino sobre el que queremos hacer el enlace. Para este caso
desde el campo idPersona hasta el campo IdPersona1, y otro desde el campo IdPersona hasta el campo
IdPersona2. El modelo de datos se vería ahora:
Listo, ahora ejectiutando la disposicion del papel (estilo: agrupar arriba, grupos: grupo de persona
transversal/desc, grupo de estudios descendente, grupo de empleos descendente, campos:
seleccionarlos todos, plantilla: ninguna), y agregando unas cuantas etiquetas se tendría finalmente el
siguiente informe:
Como puede verse, esta funcionalidad de enlace de datos, permite enlazar el resultado de varias
consultas por uno o varios campos, mostrando en cada bloque de resultados, los respectivos registros
asociados al campo enlazado. Suponiendo que para una persona X no existen registros en la tabla
empleos, el bloque de empleos no se mostraría para esta persona X.
La herramienta consulta jdbc
Permite la definición de consultas sql, a fin de ser ejecutadas sobre fuentes de datos vía usando el driver
jdbc; por lo tanto dichas fuentes pueden ser tanto oracle, como db2, access, mysql, sql server, etc. Lo
más importante es esta opción es definir la cadena de conexión hacia la fuente de datos a utilizar. En
síntesis, esta opción es muy aconsejable cuando se desean incorporar datos que no se tienen dentro de
nuestra bd oracle, pero que igualmente son importantes en para nuestro negocio.
Realicemos la siguiente práctica para ver el funcionamiento de consultas jdbc:
1. Vamos a crear una base de datos en Microsoft Access llamada tarifa.mdb
Creamos una tabla llamada tarifa con los siguientes campos cod_tarifa (tipo de dato numérico), valor (tipo
de dato numérico)
Procedemos a poblar dicha tabla con algunos valores
2. Luego, creamos una fuente de datos ODBC (para los sistemas Windows, ingresar al panel de control)
llamada miodbc_tarifa que tenga como fuente el archivo tarfa.mdb que acabamos de crear en el punto
anterior.
3. Ejecutamos la herramienta oracle reports, creamos un nuevo informe, y desde el modelo de objetos,
tomamos la herramienta consulta jdbc y la colocamos en la hoja de edición. Una vez hecho esto, aparece
un cuadro de diálogo solicitando la consulta sql a ejecutar y la conexión a usar. En el cuadro para
consulta escribiremos
select * from tarifa
para definir la conexión hacemos clic sobre el botón conectar, lo cual muestra otro cuadro de dialogo para
especificar los parámetros de conexión a nuestro ODBC.
seleccionamos como tipo de controlador jdbc-odbc y en el cuadro base de datos escribimos el nombre
asignado al ODBC miodbc_tarifa
Listo, ahora clic en conectar, y luego aceptar. Si no existen problemas de sintaxis en la consulta SQL y se
definió adecuadamente el tipo de controlador y el nombre la base de datos, debería aparecer en el
modelo de datos el siguiente modelo:
4. Solamente nos falta ahora, crear la parte visual o disposición de papel. Para esto diríjase a la opción
programa/ejecutar disposición de papel, el cual le guiará este proceso.
Solamente falta ahora crear la disposición de papel. Para esto proceder igual que en el ejemplo anterior.
La herramienta consulta XML
Básicamente permite leer el contenido de un archivo .xml, basado en la definición de los datos incluída en
el archivo .dtd.
1. Supongamos que se tienen el archivo de datos books.xml y el archivo de definicion de datos
books.dtd
2. Ingresamos a la herramienta Oracle Reports y creamos un nuevo informe. Nuevamente, entrando al
modelo de datos, seleccionamos ahora la herramienta consulta XML y la colocamos sobre la hoja de
edición. Una vez colocada, se abre un cuadro de diálogo solicitando el nombre del archivo de definicion y
el nombre del archivo xml que contiene los datos. Se selecciona entonces, primero el archivo de definicion
de datos, y adicionalmente haciendo clic en lel boton seleccionar columnas, incluir las columnas de la
consulta. Por último, se selecciona el archivo xml que contiene los datos(en nuestro caso, el archivo
books.xml).
Con lo anterior, el modelo de datos luce así:
Listo, como en los casos anteriores corresponde ejecutar el asistente de disposicion de papel y ya se
tiene un reporte basado en contenido xml.
Inclusión de parámetros de usuario en un reporte
La mayoría de los reportes o informes, generalmente necesitan ejecutarse con base en las necesidades
del usuario: generar el informe de ventas del mes de junio del 2005, los alumnos que aplicaron a un
programa de licenciatura, las compras realizadas para el 2005, las ventas realizadas por un valor mayor a
N, el número de antibióticos de marca X comprados durante el año 2004, etc. La inclusión de parámetros
en reportes permite la ejecución del informe teniendo en cuenta las condiciones que especifica el usuario.
Realmente, es muy sencillo incorporar el uso de parámetros en una consulta de un informe. Antes que
todo se debe identificar el parámetro para el que el usuario debe fijar un valor y luego invocarlo desde la
consulta en el modelo de datos. Oracle reports incluye un formulario de parámetros, el cual, básicamente
es el conjunto de controles (cuadros de texto) donde el usuario ingresa los valores a cada parámetro
antes de ejecutar el informe, y que puede ser modificado con el fin de personalizar la entrada/captura de
los valores para dichos parámetros.
Suponiendo que se tiene la tabla emp(employees del tradicional usuario scott) con la siguiente
descripcion
SQL> desc
emp
NOT
EMPNO NUMBER(4)
NULL
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
y se desea crear un informe, que muestre los datos empleados dependiendo de su ingreso sararial(En
este caso, la columna SAL denota salario).
La siguiente consulta, muestra el nombre, el cargo y el salario de los empleados con ingreso salarial
mayor a mil (1000)
SELECT ename, job, sal FROM emp WHERE sal > 1000
Sin embargo, se pudiera pensar también en generar un informe con los mismos datos para empleados
con ingreso salarial mayor a 2000 o mayor a 500. Ya que el objetivo no es diseñar 3 informes diferentes,
vamos a incluir un parámetro P_Salario, que será el valor ingresado por el usuario (1000,2000 o 500)
Por lo anterior, la consulta SQL en el mdelo de datos del informe quedaría así:
SELECT ename, job, sal FROM emp WHERE sal > :P_Salario
Puede notarse, que el valor 1000 fué cambiado por el parámetro P_Salario; los dos puntos que anteceden
el nombre P_Salario, le indican a la herramienta que P_Salario es un parámetro. Dependiendo del valor
que se introduzca para el parámetro P_Salario, se mostrarán los respectivos datos acordes con el valor
fijado.
Es importante tener en cuenta que el uso de parámetros puede hacerse en la clausula SELECT, en la
clausula FROM,en la clausula WHERE, en la clausula HAVING, y ORDER BY.
Entonces, si se desea saber los departamentos con una nomina mayor a 9000, se tendría la consulta
SELECT deptno, sum(sal) as nominaDepto FROM emp GROUP BY deptno HAVING sum(sal) > 9000
y remplazando el valor que denota el valor de nomina minimo se tendría:
SELECT deptno, sum(sal) as nominaDepto FROM emp GROUP BY deptno HAVING sum(sal) >
:P_ValorNomina
Una vez se ha colocado el anterior codigo sql en el modelo de datos, se crea el elemento P_valor nomina,
el cual puede ser modificado desde el navegador de objetos - modelo de datos -parámetros del usuario
Con lo anterior, se desea que los únicos valores posibles, de los que puede seleccionar el usuario, para el
parámetro P_DEPTNO sean los números de departamento incluidos en la tabla DEPT.
Ejecutando el reporte, la ventana de parámetros le permite seleccionar al usuario un valor de la lista
definida anteriormente así:
Se puede notar, que incluir parámetros en un reporte, es una tarea fácil. Lo más importante es definir
cuál(es) parámetro(s) se van a incluir y el tipode datos, a fín de evitar problemas en la ejecución del
reporte por tipos de datos diferentes o por formatos diferentes(como en el caso de los parámetros de tipo
date)
3. Las etiquetas para cada parámetro pueden ser tambien modificadas si se desea.
4. Aceptar los cambios
La ventana de parámetros en tiempo de ejecución se verá: