Академический Документы
Профессиональный Документы
Культура Документы
Visual FoxPro
(Publicado originalmente en UTMag/Rapozine,
http://www.UniversalThread.com/Spanish/Magazine)
Por Hctor Correa.
Este artculo describe cmo programar informes flexibles usando Tablas Dinmicas de
Excel y Visual FoxPro. Con Tablas Dinmicas los usuarios finales pueden rotar filas y
columnas (de all el ttulo de este artculo) para inspeccionar datos desde diferentes
aspectos. La mayora de los usuarios estn muy familiarizados con Excel y, por lo tanto,
el tiempo de entrenamiento se reduce considerablemente. Con Visual FoxPro se puede
consolidar datos desde mltiples fuentes (tablas VFP, SQL Server y/o Oracle) y
automatizar la creacin de estas tablas.
La imagen siguiente muestra una tabla dinmica con datos tomados desde la base de
datos TestData que viene con VFP 7.
En este ejemplo puede ver ventas por ao/mes y pas. Note que los campos en los
encabezados de filas y columnas son, de hecho, controles drop-down. Esto significa que
cuando hace clic en ellos, la lista desplegable le permite seleccionar los valores que
quiere mostrar (filtro) en la tabla dinmica. En este caso particular, yo seleccion slo
los meses de Abril y Mayo de 1996 para cuatro pases. Una copia de la planilla Excel
con este ejemplo se encuentra en PT_TESTDATA.XLS.
Uno de los aspectos ms excitantes de estas tablas es precisamente que sean dinmicas.
Esto significa que usted puede reestructurar los campos mostrados como filas, columnas
e items de datos para obtener distintas vistas de los mismos datos. Por ejemplo, la
siguiente imagen muestra los mismos datos de la anterior. Sin embargo, en este caso
arrastr el campo "empleado" al rea de fila. Observe como la tabla dinmica
automticamente reestructur la informacin por empleado.
Hay muchas otras facilidades que vienen con las tablas dinmicas. Por ejemplo, puede
crear Grficos Dinmicos. Estos grficos se asocian con la tabla dinmica, y se puede
filtrar la informacin que se grafica de la misma forma (es decir por medio de las listas
desplegables). Puede crear tambin campos calculados (p. ej. sumas, cuentas,
promedios) en su tabla dinmica. Adems puede formatear sus tablas dinmicas para
darles un aspecto profesional usando varios estilos que vienen incorporados con Excel.
Aunque las tablas dinmicas son muy flexibles y poderosas, usted todava podra
preguntarse por qu considerar las facilidades de Excel para generar informes, en vez de
usar el generador de reportes de Visual FoxPro o cualquiera de terceras partes. Hay dos
fuertes razones que hacen a las tablas dinmicas mejor candidato que otras tecnologas
para entregar informes a usuarios.
Primero, como Tom Bellmer (http://www.visionds.net/hcorrea) mencion en su artculo,
la mayora de las personas ya tiene Excel y sabe usarlo. Permitirles a sus usuarios crear
informes dinmicos con una herramienta con la que se sienten seguros es algo que
ciertamente apreciarn.
Segundo, dado que las tablas dinmicas son tan flexibles, los usuarios pueden
personalizar sus propios informes simplemente arrastrando y soltando campos. Pueden
bajar al nivel de detalle que necesitan haciendo doble-clic en las celdas.
Adicionalmente, pueden crear grficos usando uno de los motores de graficacin ms
conocidos disponible para usuarios finales. El resultado final es que hay una reduccin
importante en el tiempo empleado para crear informes y un incremento de la
flexibilidad para representar y analizar datos.
quiere mostrar informacin por empleado necesita incluir el nombre del empleado
(employee.first_name) asociado a cada registro. En general necesita traer todos los
nombres descriptivos a la tabla desnormalizada y omitir las claves primarias.
Una vez identificada la informacin que desea incluir en la tabla dinmica, usted escribe
un programa en VFP para extraer esta informacin y guardarla en una tabla VFP. El
siguiente fragmento de cdigo muestra como puede crear una tabla desnormalizada para
las tablas expuestas antes (el cdigo completo se encuentra en GETDATA.PRG):
select customer.company,
;
customer.region,
;
customer.country,
;
orders.order_date,
;
employee.last_name as employeelast,
;
products.eng_name as "product",
;
orditems.quantity,
;
orditems.quantity * orditems.unit_price as linetotal;
from
customer
;
inner join orders on customer.cust_id =
orders.cust_id ;
inner join employee on orders.emp_id =
employee.emp_id ;
inner join orditems on orders.order_id =
orditems.order_id ;
inner join products on orditems.product_id =
products.product_id ;
into table data\pt_testdata
En el ejemplo anterior, para crear la tabla desnormalizada se necesita una sola sentencia
SQL Select. En aplicaciones de la vida real, sin embargo, el proceso puede ser ms
complejo y requerir varias sentencias SQL Select (potencialmente desde varias bases de
datos) ms una serie de etapas para "masajear" los datos hasta que tengan toda la
informacin que nosotros eventualmente necesitaremos en la tabla dinmica. Con sus
capacidades de manipulacin de datos, es fcil ver como VFP se ajusta bien a esta tarea.
Tenga en mente que, aunque la tabla desnormalizada sea una tabla VFP, no es necesario
que la fuente de datos sea VFP. Puede usar VFP para obtener datos desde cualquier base
de datos (ej. SQL Server u Oracle) va SQL Pass Through o vistas remotas.
Hay otros caminos que puede tomar para crear esta tabla desnormalizada y algunos son
aun ms poderosos que la tcnica usada en este artculo. Un mecanismo comn para
encarar esta tarea es mediante paquetes OLAP (On Line Analytical Processing) como el
que viene incluido en SQL Server. Estos mecanismos estn fuera del alcance de este
artculo. No obstante, usted debera recordar que cuando pasa a paquetes OLAP no
solamente incrementa las capacidades de tabla dinmica, sino tambin el precio y la
complejidad de la solucin.
en la tabla
row
column
data
Para crear una tabla dinmica, Excel primero lee los datos hacia un objeto interno (e
invisible) llamado PivotCache. La parte actualmente visible de la tabla dinmica es el
objeto PivotTable. Dentro de la tabla dinmica hay objetos PivotFields (que representan
campos guardados en la fuente de datos) y objetos PivotFormulas (que pueden ser
usados para representar campos calculados).
* 1. Correr Excel va OLE-Automation.
oExcel = createobject("excel.application")
oExcel.Application.Visible = .T.
* 2. Crear un nuevo libro.
oWorkbook = oExcel.Workbooks.Add()
* 3. Definir un objeto range para volcar dentro los resultados.
oTargetSheet = oWorkbook.Sheets.Add()
oTargetRange = oTargetSheet.range("A2")
en la tabla
fila
columna
datos
Los primeros tres pasos en este ejemplo son idnticos al ejemplo anterior. Sin embargo,
en los pasos 4 a 6 crearemos manualmente los objetos pivot cache y pivot table en vez
de usar el Asistente de tabla dinmica. Haciendo esto ahora podremos pedir a Excel que
lea los datos usando un OLE-DB provider en vez de ODBC.
Aunque el uso de un OLE-DB provider sobre un driver ODBC puede a simple vista no
parecer una ventaja, es ciertamente una mucho mejor estrategia si ud. considera que esto
evita totalmente que Excel intente usar Microsoft Query para leer los datos en el
PivotCache. Microsoft Query es un componente adicional que no todos los usuarios de
Excel tienen instalado y que es bastante difcil de configurar programticamente.
Allanando el camino
Con este artculo se incluye un set de clases que encapsulan el acceso a las tablas
dinmicas de Excel. La imagen siguiente muestra la jerarqua de estas clases. La nica
clase que usted necesita instanciar es la PivotTable. Esta clase llamar automticamente
a las otras.
El siguiente fragmento de cdigo muestra cmo usar la clase PivotTable para crear una
tabla dinmica para la tabla VFP llamada PT_TESTDATA.DBF (el cdigo completo
est en PT_SAMPLE.PRG y PT_CLASS.PRG).
oPT = createobject("pivottable" )
oPT.cSourceDBF = "c:\efox_pivot\data\pt_testdata.dbf"
oPT.cTargetXLS = "c:\efox_pivot\data\pt_testdata.xls"
oPT.Create()
oPT.SetField( "country", "row" )
oPT.SetField( "yearmonth", "column" )
oPT.SetField( "linetotal", "data" )
oPT.Save()
Como puede ver, esta clase simplifica bastante el proceso de crear la tabla dinmica ya
que usted no necesitar entenderse con Excel directamente, sino con una interfaz mucho
ms simple. Dado que se provee el cdigo fuente de esta clase, puede extenderlo y
adaptarlo a sus necesidades particulares.
Finalmente, al dar a los usuarios esta flexible herramienta, puede reducir sus pedidos de
nuevos reportes. Con las tablas dinmicas los usarios pueden crear fcilmente esos
reportes, y tambin grficos, por s mismos, simplemente arrastrando datos a filas y
columnas. No hay nada ms fcil que esto.