You are on page 1of 14

Usando DinamiCube en Visual FoxPro

http://www.fpress.com/

Por

Luis Guerra

DC_Demo.zip

El presente artculo est escrito con la intencin de dar a los desarrolladores de Visual FoxPro una introduccin e ideas para agregar a las aplicaciones que desarrollan capacidades de Consultas Dinmicas muy parecidas a las tablas pvot de Excel o a los cubos que se crean con los Servicios de nlisis de S!" Server #$$$ o similares% tambi&n llamados Cubos' Para lograr este ob(etivo )e usado el DynamiCube% que es un control ctive*' El control DynamiCube es un control que permite obtener y mostrar enormes cantidades de datos almacenados en bases de datos relacionales en una +orma resumida y tabulada que ayuda al usuario +inal a reali,ar decisiones precisas' "os datos num&ricos pueden ser obtenidos de m-ltiples Fuentes% tabulados% resumidos y presentados al usuario en un cubo multidimensional' El usuario +inal puede manipular la vista% mover dimensiones y cambiar el orden para responder me(or a sus necesidades de anlisis' DynamiCube es n.dimensional y est limitado solamente por los recursos disponibles del entorno de la PC donde se e(ecuta' Cada dimensin consiste de un n-mero +inito de puntos de datos' Estos puntos de datos son usados para locali,ar un elemento de datos individual' Para poder simpli+icar algunas explicaciones% en algunos casos me voy a re+erir al control DynamiCube simplemente como cubo' En principio se va a crear un +ormulario y se le va pegar el control DynamiCube al mismo' El control aparece en la lista de controles como la clase DCube Class' /al como se ve en la +igura siguiente0

1na ve, seleccionado el control% )acemos clic en Ok y se mostrar el control como un rectngulo con +ondo blanco al cual le pondremos 2oleCube3 en la propiedad Name% tal como se puede observar en la siguiente +igura0

El control DynamiCube soporta varias tecnologas para acceder a datos' Para ver cuales son las tecnologas y cual deseamos usar )acemos clic secundario sobre el control y seleccionamos 2DCube Class Properties3% como observamos en la siguiente +igura0

Despu&s de lo cual se mostrar una ventana con varias pginas en la primera de las cuales se mostrar un combobox correspondiente al tipo de conexin 4Connection /ype5 con una lista de tecnologas que se pueden usar para acceder a datos'

Como se ve% se pueden usar varias tecnologas entre las que destacan 6D7C% D6 46"E D75 y D 6% adems del modo Unbound que permite llenar los datos del cubo en tiempo de e(ecucin' El modo 1nbound tiene la venta(a de que se puede llenar el cubo desde cualquier +uente de datos de que dispongamos en tiempo de e(ecucin% pueden ser cursores% vistas% tablas% variables de memoria% arreglos% etc' "a desventa(a es que no se puede dise8ar el DynamiCube en tiempo de desarrollo% lo que s se puede )acer con las otras tecnologas de acceso a datos tales como el 6D7C que permite crear una instruccin SE"EC/ en tiempo de desarrollo lo que es usado para dise8ar el cubo% esto se )ace en la pgina "ayout de la misma ventana de propiedades del DynamiCube y que +acilita enormemente el dise8o del mismo' Vamos a dar un vista,o rpido de cmo se dise8ara el DynamiCube con una conexin 6D7C a una base de datos S!" Server #$$$ y cmo se vera0 Primero se de+ine el tipo de conexin% luego la cadena de conexin as como la instruccin SE"EC/.S!" que obtendr los datos0

"uego est la pgina Time Series que permite de+inir algunos tipos de datos relacionados a +ec)as que podran usarse como datos del cubo tales como a8o% trimestre% mes y semana' En este caso no se va a usar ninguno de esos campos% pero se muestra por cuestiones didcticas0

"uego% se de+inen los campos que se van a mostrar y su posicin dentro del cubo% para esto se va a la pgina Layout y se pulsa el botn Retrieve Fields para que en la lista apare,can todos los campos que el SE"EC/ )ace disponible% de los cuales se van a usar algunos% esto se )ace arrastrando el campo desde la lista )asta la posicin deseada0

En la pgina Fields% se pueden cambiar los ttulos o encabe,ados que van a tener los campos en tiempo de e(ecucin0

En la pgina Preferences% se puede cambiar el aspecto que va a tener el cubo% para lo cual )ay varios comboboxes y c)ec9boxes que corresponden a di+erentes partes del mismo y que sirven para darle un estilo personali,ado ante el usuario +inal% aunque desde mi punto de vista los valores predeterminados son buenos'

En la pgina Printer% se va a especi+icar el encabe,ado% pie de pgina% mrgenes y (usti+icacin cuando se imprima o se )aga una vista preliminar de la impresin% as como si se desea que se repitan en cada pgina los encabe,ados0

En la pgina Color% se pueden especi+icar los colores que van a tener di+erentes partes del DynamiCube% tales como colores de +ondo y de letras de los encabe,ados as como de los datos0

: por -ltimo en la pgina Fonts% se podr especi+icar los tipos de letras para cada parte del cubo0

"uego )acemos clic en el botn 69 y e(ecutamos el +ormulario% el cubo se ver ms o menos de la siguiente +orma0

El usuario +inal puede mover los campos de un sitio a otro% es decir% )acer que los campos est&n como columnas% +ilas y;o pginas 4rea superior del DynamiCube% tambi&n se le llama rea de +iltro% ms adelante veremos por qu&5% los campos de datos 4las cantidades5 no se pueden mover' De esa +orma el usuario puede construir varios reportes de acuerdo a cmo )aya distribuido los campos% por e(emplo% puede arrastrar el campo Mes )asta el rea de los campos +ila% pero al costado derec)o del campo Cuenta% con lo cual el cubo se vera as0

dems si se desea podemos cambiar el campo al rea de campos de columna% con lo cual% el cubo quedara as0

Pero eso no es todo% se pueden +iltrar los datos como sea necesario% por e(emplo podemos abrir el campo !o como un dropdo<n y se mostrarn los datos correspondientes% se mostrarn% en este caso% los a8os #$$# y #$$=0

Si deseamos ver solamente los datos del a8o #$$#% quitamos el c)ec9 del a8o #$$= y luego )acemos clic en cualquier parte del cubo para que se cierre el dropdo<n y mostrar slo los datos del a8o #$$#0

Similarmente% s slo deseamos ver los datos del primer semestre del a8o #$$#% basta con abrir el dropdo<n del campo Mes y quitar el c)ec9 de los meses correspondientes al segundo semestre0

El cubo se mostrar as0

Como se )a visto% se puede dise8ar cmo uno desea ver el cubo% en tiempo de desarrollo% todo desde la ventana de propiedades del DynamiCube' Para cada opcin )ay una propiedad disponible que tambi&n se puede acceder mediante programacin% aunque sera ms complicado )acerlo as' "os resultados son muy buenos% por no decir excelentes' )ora volviendo al tema central de este artculo% nos concentraremos en el uso del DynamiCube en modo 1nbound para poder acceder a los datos desde una consulta de tablas VFP o desde un cursor VFP y reali,ar una rutina para llenar los datos del cubo' "o primero que se debe )acer es poner la propiedad uto:ield del ob(eto >VFP en +also para que el Dynamicube +uncione bien% 4esto slo es necesario en el modo 1nbound5' Esto lo podemos )acer en el evento ?@?/ del Dynamicube0 >V+p' uto:ieldA 'F' "uego debemos poner la propiedad DCConnectTy"e en modo 1nbound y la propiedad utoDataRefres# en +also% lo -ltimo es para evitar que el DynamiCube intente cargar datos cuando se crea el control y se muestre un mensa(e de advertencia cuando se e(ecuta el +ormulario% esto es debido a que a-n no se )an creado los campos' Esto se puede )acer desde la ventana de propiedades de Visual FoxPro o mediante cdigo en el evento $nit del control oleCube0 /)is'DCConnect/ypeA BB CC Dodo 1nbound' /)is' utoDataEe+res)A 'F' CC Evite que se muestre el mensa(e de advertencia' /ambi&n% si deseamos tener los encabe,ados con letras a,ules y +ondo verde claro% lo )acemos desde la ventana de propiedades del DynamiCube0

"os cuales equivalen a las propiedades FieldsForecolor y Fields%ackColor% lo que tambi&n se puede )acer mediante programacin% naturalmente que en esta -ltima +orma se pueden especi+icar muc)os ms colores que los disponibles en la ventana de propiedades% pero lo que se debe saber es el valor num&rico equivalente al color deseado' En este e(emplo vamos a usar la tabla D /6S'D7F% ya creada% la cual vamos a agregarla al entorno de datos del +ormulario' @o es necesario que sea una tabla% en aplicaciones reales% sera un cursor generado desde un SE"EC/.S!" y que tenga datos no.normali,ados% similares a los necesarios para un reporte' "a tabla que vamos a usar tiene los siguientes datos0

"uego se va a armar la distribucin de los campos% con sus encabe,ados% en el evento $nit del +ormulario de la siguiente +orma0

** Crear los campos del DynamiCube. With This.oleCube.Fields .DeleteAll() && Borra todos los campos (si existe al uno). .Add( !di"ision!# !Di"isi$n!# %) && Di"isi$n como &ila. .Add( !re ion!# !'e i$n!# () && 'e i$n como columna. .Add( ! anancia!# !)anancia!# *) && )anancia como datos. +ndWith

1na ve, que se )an de+inido los campos% lo -nico que queda por )acer para completar la con+iguracin% o me(or dic)o% la construccin del cubo% es llenar con los datos de la tabla que se acaba de mencionar' Esto se reali,a a trav&s del evento Fetc)Data del DynamiCube% este evento slo se dispara en modo 1nbound y cuando se e(ecuta el m&todo Ee+res)Data450
,ocal lnCampos# laDatos( () lnCampos- * && ./mero de campos en DynamiCube. Dimension laDatos( lnCampos) 0elect Datos 0can ** ,lena los "alores de los campos en el arre lo 1laDatos2. laDatos( ()- Datos.di"ision laDatos( %)- Datos.re ion laDatos( *)- Datos. anancia ** A re a los datos al DynamiCube. This.Add'o3+x( 4laDatos) +nd0can

"os valores que contiene el arreglo laDatos deben estar en el mismo orden en que se crearon los campos% de lo contrario% se pueden obtener resultados extra8os' Se usa el m&todo ddEo<Ex45 para agregar al DynamiCube los datos que se encuentran en el arreglo' )ora lo -ltimo que +alta para poder mostrar los datos es usar el m&todo Ee+res)Data45% el cual% al ser llamado% e(ecutar el cdigo que se encuentra en el evento Fetc)Data45' En nuestro e(emplo se )a usado un botn que llama al m&todo Ee+res)Data45 para mostrar el DynamiCube0
This.5arent.oleCube.'e&reshData()

El +ormulario queda as0

Se pueden mover los campos de tal manera que el DynamiCube quede as0

6 as0

Para tener una vista preliminar de cmo se imprimira el cubo se usa el m&todo PrintPrevie<45% al +ormulario del e(emplo se le )a agregado un botn 2Vista preliminar3 el cual llama a dic)o m&todo de la siguiente manera0
This.5arent.oleCube.5rint5re"ie3()

"o cual mostrar una ventana como la siguiente0

En la parte superior de la ventana )ay botones desde los cuales se puede ?mprimir% con+igurar la impresora y el tama8o de pgina% cambiar el anc)o y alto de las celdas% avan,ar de pgina si es necesario y por -ltimo )acer un Foom de la vista preliminar' Si se desea imprimir el cubo sin )acer una vista previa se usa el m&todo Print45 el cual necesita tres parmetros0 el primero si es '/' 4verdadero5% indica que se desea mostrar una ventana de dilogo de impresin que permite cambiar la impresora predeterminada% si es 'F' 4+also5 no se muestra el dilogo y comien,a a imprimir directamente' "os dos restantes parmetros tambi&n son obligatorios e indican el primera y -ltima pgina que se van a imprimir% si se pone .G en el tercer parmetro% indica que se desea imprimir todas las pginas% estos parmetros son obviados si el primer parmetro es '/' 4verdadero5' Para llamar al m&todo Print45 en el botn% se )ara de la siguiente +orma0
This.5arent.oleCube( .F.# (# 6()

"o cual comen,ara inmediatamente a imprimir en la impresora predeterminada en ese momento' Para terminar% quiero decir que el DynamiCube puede ser expandido para incluir ms dimensiones y ms in+ormacin de resumen' Provee in+ormacin de soporte de decisin en un +ormato +lexible que los usuarios +inales pueden manipular y modi+icar de acuerdo a sus necesidades de anlisis' 6tra de las venta(as es que no se necesita de un servidor 6" P o similar para tener la misma +uncionalidad y lo bueno es que solo es cuestin de pegar el control en un +ormulario y programarlo% tarea que se puede simpli+icar enormemente si se crea una clase que ya tenga toda la +uncionalidad descrita% lo cual solo )aga necesario indicar los campos% encabe,ados% distribucin y nada ms% la clase se encargara de todo' Por e(emplo% yo )e creado una clase que uso en las aplicaciones que desarrollo que permite mostrar el cubo% tener una vista preliminar% imprimirlo y )asta exportarlo a una )o(a Excel' /odo eso es posible debido a que el modelo de ob(etos es completo y da un gran control sobre cada aspecto del cubo' "a versin actual del DynamiCube es la #'H'G'#' y )ay una nueva versin que es llamada ctiveCube = la cual es tambi&n una gran )erramienta e incluso soporta exportacin a Excel en +orma nativa% la principal desventa(a% si se le puede llamar as% es que solamente soporta conectarse con servicios 6" P y aunque tiene un modo Unbound% de lo que )e investigado% no se puede )acer lo mismo que con el DynamiCube' Para los interesados% pueden descargar la versin de evaluacin desde )ttp0;;<<<'datadynamics'com% lo bueno es que las versiones de evaluacin son completamente +uncionales pero slo duran =$ das' Sin embargo% vale la pena investigar ms a +ondo este control que es muy verstil'

You might also like