Una de las grandes características que presenta Oracle APEX y que lo hace una herramienta muy completa a la hora de desarrollar aplicaciones web basadas en la base de datos Oracle, es la gran facilidad con que Apex nos permite, por su entorno declarativo, desarrollar Informes modernos y de diferentes alcances para la presentación de la información almacenada logrando con mínimo esfuerzo aplicaciones web muy robustas.
El objetivo de este artículo es mostrar al lector algunas de las diferentes funcionalidades que dispone en la creación de Informes Interactivos usando Oracle Application Express.
Al crear una aplicación de base de datos, se puede incluir dos tipos de informes: Informes Interactivos o Informes Clásicos. La principal diferencia entre ambos es que el interactivo permite al usuario personalizar la apariencia de los datos a través de la búsqueda, filtrado, ordenamiento, selección de columnas, resaltado de columnas y otras formas de tratamiento de datos en tiempo de ejecución, mientras que en el Informe Clásico no disponemos de esas funcionalidades.
Los informes clásicos tienen la funcionalidad de búsqueda de palabras claves en general, además de la posibilidad de especificar el número de filas que se muestran y la columna de ordenamiento básica.
Cuando se utiliza un informe clásico podemos ver 100 columnas empleando las columnas del informe y podemos editar columnas adicionales utilizando la vista de árbol o a través de la paginación del informe en Atributos de Columna.
Los informes interactivos permiten a los usuarios finales crear informes altamente personalizados, por eso es que se trabaja en tiempo de ejecución para crear dichas personalizaciones. Podemos modificar el diseño del informe al ocultar o mostrar columnas específicas, resaltar y ordenar las mismas o aplicar filtros. También podemos definir puntos de control, agrupaciones, gráficos y añadir nuestros propios cálculos. Una vez personalizado, el informe se puede guardar como un informe primario, alternativo, privado o público. Cada informe interactivo incluye una barra de búsqueda, un menú Acciones, un menú de Encabezado de columna y una serie de iconos para editar en la primera columna de cada fila. Cuando se utiliza un informe interactivo se puede:
Para este ejemplo vamos a crear una aplicación de Base de Datos en Apex, haciendo lo siguiente:
Ejecutamos la aplicación y la página de inicio mostrará nuestro Informe Interactivo recién creado.
Desde el Diseñador de Página 1, en la ficha de Presentación:
Consulta SQL
select p.product_id,
p.product_name,
p.product_description,
p.category,
decode(p.product_avail, 'Y','Yes','N','No') product_avail,
p.list_price,
(select sum(quantity) from demo_order_items where product_id = p.product_id) units,
(select sum(quantity * p.list_price) from demo_order_items where product_id = p.product_id) sales,
(select count(o.customer_id) from demo_orders o, demo_order_items t
where o.order_id = t.order_id and t.product_id = p.product_id group by p.product_id) customers,
dbms_lob.getlength("PRODUCT_IMAGE") "Product_Image"
from demo_product_info p
La función dbms_lob.getlength() se emplea para estimar el tamaño de la columna BLOB en la tabla, cuya selección se hace para facilitar la inclusión del enlace de descarga en el reporte. Si el length es 0, el BLOB es NULL y el enlace de descarga no se mostrará. Nosotros en este caso no lo vamos a usar.
DECODE (expression, search, result [, search, result]…[,default])
De una expresión dada, la función busca el valor y lo traduce a un resultado. Podemos tomar como ejemplo la siguiente consulta SQL:
SELECT DECODE (categoria_id, 1, 'Accesorios',
2, 'Mujer',
3, 'Hombre',
4, 'Niños',
5, 'Electrónicos',
'-') result
FROM demo_categorias
Para mayor comprensión de la forma en que es empleada la función DECODE podemos decir que esta función puede ser escrita usando un conjunto de IF - THEN – ELSE. Aunque cabe aclarar que, dentro de una consulta SQL, no podemos utilizar las estructuras de control como el IF-THEN-ELSE. Por ello, la función DECODE es muy usada en las consultas SQL y permite traducir una expresión a un valor de retorno.
IF categoria_id = 1 THEN
result := 'Accesorios';
ELSEIF categoria _id = 2 THEN
result := 'Mujer';
ELSEIF categoria _id = 3 THEN
result := Hombre';
ELSEIF categoria _id = 4 THEN
result := 'Niños';
ELSEIF categoria _id = 5 THEN
result := 'Electrónicos';
ELSE
result := '-';
END IF;
4. Hacemos clic en el botón “Guardar”.
Si deseamos editar los nombres de columnas del Informe Interactivo para que se ajusten a nuestro idioma lo podemos hacer accediendo al Diseñador de Páginas y desde el panel de la izquierda de Presentación seleccionamos la región de tipo Informe Interactivo y expandimos las columnas para modificar los nombres de las columnas visibles, colocando su nombre en el atributo Cabecera en la sección de Cabecera del panel de la derecha en propiedades de la columna, por ejemplo: Nombre, Categoría, Producto Disponible, Lista de Precios, Unidades, Ventas, Clientes y Producto y guardamos los cambios haciendo clic en el botón Guardar en la parte superior derecha de la página.
Desde el Panel de la izquierda en el Diseñador de Páginas, estando en la vista árbol de Presentación, hacemos clic sobre la columna PRODUCT_IMAGE y pasamos al panel de la derecha en propiedades de la columna en la sección Identificación, en el atributo Tipo seleccionamos Mostrar Imagen.
En la sección Atributos BLOB seleccionamos:
Seleccionamos atributos del Informe en el panel de la izquierda y en propiedades de los atributos en el panel de la derecha en Columna de Enlace seleccionamos Excluir Columna de Enlace, del Informe Interactivo, posteriormente hacemos clic en el botón Guardar.
Para guardar el informe como un informe primario, debemos ejecutar la aplicación para mostrar el informe en tiempo de ejecución y hacemos clic en el botón “Acciones”, luego en Guardar Informe > Como Valores de Informe por Defecto:
Cada vez que necesitemos realizar un cambio en el informe interactivo y queramos mantener dicho cambio tenemos que guardar el informe como un informe primario por defecto. Si no realizamos esta operación, para la próxima vez que iniciemos sesión se perderán todos los cambios.
Los reportes alternativos nos permiten a los desarrolladores crear diferentes tipos de reportes y solo el desarrollador puede guardar, renombrar o eliminar estos informes. En esta sección crearemos un informe alternativo llamado “Productos por Categorías” que tendrá tres tipos de visualizaciones utilizando diferentes herramientas para personalizar el Informe basado en el Informe Primario de Productos.
Desde la página 1, en estado de ejecución:
La División de Control es una característica de agrupación que permite ser añadido a una o más columnas del informe. Como en este caso hemos creado una división de control en la columna de Categorías, en el informe se mostrará la agrupación de los productos divididos por categorías.
El resultado del Informe Alternativo Productos por Categorías en la Vista Informe se muestra a continuación:
Nosotros podemos generar gráficos en nuestros informes interactivos que estén basados en el resultado del informe.
En esta sección aprenderemos a crear un gráfico de barras que muestre los totales de las ventas por producto.
Desde la Página 1 en estado de ejecución:
Se ha creado el icono de la vista de Gráfico.
El resultado del Informe Alternativo Productos por Categorías en la Vista Gráfico se muestra a continuación:
Recordemos que para mantener los cambios realizados debemos guardar el informe desde Acciones > Guardar Informe.
Esta vista permite a los usuarios agrupar la información por una o más columnas. Una vez definida la o las columnas de agrupación aparecerá el icono “Ver Grupo por” en la barra de búsqueda del Informe Interactivo Alternativo.
Regresamos a la Vista Reporte del Informe Alternativo, haciendo clic en el icono “Ver Informe” que está al costado izquierdo del ícono “Ver Gráfico”
Se ha creado el icono de la vistaVer Grupo por

El resultado del Informe Alternativo Productos por Categoría en la vista Ver Grupo Por se muestra a continuación:
En las funcionalidades de los informes interactivos también disponemos de la creación de columnas por medio de cálculos a partir de otras columnas.
Veamos un ejemplo a continuación:
Seleccionamos el Informe Primario desde la lista de selección:
Vamos a crear una columna que muestre el total de ventas adicionado los impuestos de ventas.
Podemos ver el resultado de la creación de la columna de cálculo en el Informe Primario.
Finalmente si queremos mantener los cambios realizados necesitamos volver a guardar el Informe como el Informe Primario.
Como podemos ver la personalización de los Informes Interactivos en Oracle Apex es muy sencillo e intuitivo y cualquier usuario sin conocimientos en programación puede crear informes altamente sofisticados para satisfacer y garantizar la toma de decisiones en el día a día mostrando la información almacenada en nuestra base de datos Oracle.
Hemos aprendido en este artículo:
Clarisa es fundadora y CEO de ClarTech Solutions Inc. Se ha convertido en Oracle ACE hace algunos años, tiene más de 15 años de experiencia en el desarrollo y la capacitación en tecnologías de la información. Hace unos años descubrió la belleza de Oracle Application Express (APEX) y se ha especializado en esa área. Ella también es una Co-Fundadora y Directora del Argentina Oracle User Group (AROUG) y ha participado activamente en la organización de grandes y populares eventos. Además ella es autora del primer libro en español sobre Oracle APEX titulado “Introducción a Oracle APEX 5”. Ella tiene una gran pasión por las tecnologías de Oracle y quiere ampliar esa pasión e influencia transfiriendo su conocimiento y experiencia a la totalidad de las comunidades de Oracle América Latina y en todo el mundo.
Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.