La idea es lograr una implementacion del patron de
Summarized by Pattern.
Mostrar que se pueden hacer patterns y dejar un proceso documentado
Mostrar que el WorkWith no es el unico pattern
Facilitar la creacion de patterns en el futuro.
Dado el ejemplo de la factura:
//Invoice
InvId*
InvDate
InvMonth = Month(InvDate)
InvYear = Year(InvDate)
CustomerId
CustomerName
CustomerZone
InvTot = Sum(InvTotLin)
//InvoiceLevel1
(InvLinNbr*
ProdId
ProdQuantity
ProdPrice
ProdDescription
ProdGroup
InvTotLin = ProdQuantity * ProdPrice
)
Se debe poder elegir el conjunto de facturas con las cuales quiero trabajar.
Para eso permito elegir los filtros.
InvDate ( un rango de fechas)
CustomerId
CustomerZone
ProdId
ProdGroup
Se sumarizaria por alguna de las dimensiones, en este caso, podrian ser:
Month(InvDate) //hay que definirlo como formula?
Year(InvDate)
CustomerId
CustomerZone
ProdId
ProdGroup
Los indicadores (atributos de los que necesito mostrar los resultados agrupados) que se utilizarian serian.
ProdQuantity
InvLinTot
UnitPriceMedio = sum(InvLinTot) / sum(ProdQuantity) //no es lo mismo que el Avg() de los unitarios.
La utilizacion de formulas diferentes a sum() se puede dejar para una segunda etapa (etapa 2).
Si se ordena en por el resultado de los indicadores, es un Ranking.
Si se ordena por las dimensiones es un resumen.
La salida seria un webpanel donde se pueda obtener filtrar por los criterios seleccionados en filtros, con diferentes tablas que agrupen por los criterios definidos.
Generar un webpanel que maneje los filtros, webcomponets para la muestra de los diferentes tablas agrupadas.
Las mismas se pueden poner horizontal o vertical (etapa 2)
La lectura en la base de datos y su agrupacion se puede hacer en SDT, de forma de facilitar el mostrar los resultados ordenados como ranking .
Definir el grupo de trabajo.
YA CULMINADO
Hacer el ejemplo canonico de la factura.
Implementacion del primera version del pattern (robando) basado en el WorkWith .
Solo usar SUM() para agregar
Los resultados se muestran solo en tablas, sin ordenar. (Ya ordenamos)
Se agrupa por identificadores de las dimensiones y no por la descripcion de las dimensiones (Ya superado)
Agregar la vista de
TagCloud (Ya realizado)
Agregar la vista de Grafica de
GXchart. (Ya realizado)
Agregar la posibilidad de tener layout horizontal o vertical
Liberar una beta
Probarlo con algunos casos y encontrarle los limites de la performance. Stress Testing
Optimizar la generacion de los SUM() con When. (ya realizado)
Revisar sentencias en la base y optimizaciones posibles (vistas materializadas, tablas temporarias, etc)
Documentarlo.
Testeo en serio
Liberarlo al publico.
Mejoras esteticas.
AE = Significa Antes del Evento
DE = Despues del Evento.
Es la nomenclatura temporal por la que se rige la gente de Artech
Por ejemplo se puede llamar :
Resumen por Mes
Año/Mes Cantidad Vendida Importe Vendido Precio / Unitario Promedio
Se define un link en el Año/Mes, que puede hacer:
- Listar todas las facturas que permitieron llegar a ese resumen (es la mas facil, es solo la lista, llegando al trabajar con facturas)
- Instanciar Año/Mes en los filtros, y mostrar el resto de los resumens con ese filtro (seria un Drill Down)
- Poder llamar a links externos a la KB y al servidor WEB.
Una cosa que los clientes piden mucho es ver la comparacion de lo que vendi el mes pasado contra lo que vendi el mes corriente.
Otra es comparar este año, con el año anterior
El mes de Setiembre de este año, con el mes de setiembre pasado.
Hacer las consultas con Gxplorer IO, a traves de Webservices.
27/07/2006: El ejemplo canonico ya esta realizado y funcionando.
Se realizao la impleentacion resumiendo en SDT y con un componente fijo que grafica/muestra la grilla o hace la nube, dependiendo de los parametros que recibe.
Se puede ver el ejemplo en
La implementacion quedo bastante simplificada, pues hay que generar 1 objeto procedure (sin User Interface) para cada dimension que quiera summarizar y luego otro objeto webpanel para cada transaccion que quiera ver sumarizada. En el ejemlo anterior, todo puede realizarse con 7 objetos, ademas de los creados por el workwith.
Etapas que quedan por hacer.
1) Definir el xml de la instancia (ya hecho)
2) Programar el pattern para generar el componente. (ya hecho)
3) Integrarlo con el WorkWith. (ya hecho, a medias)
Dudo si hacer webcomponent para cadar resumen/ranking o hacer uno que reciba un SDT y cargue un grilla/grafique o haga la nube.
Ya esta realizadoImplementacion de ejemplo canonico, con las funcionalidades que nos guste. No el pattern, sino hacer el ejemplo de como queremos que quede.
Subrilo a GXOpen, como proyecto y ejecutando, como el GXajax.
Se pueden implementar un par de variantes para poder compararlas.
Hacer un estudio de ventajas y desventajas y diferentes opciones de implementacion
24/08/2006 - Se tiene la primera implementacion del Pattern SummarizedBy.
01/09/2006 - Se libera la primera implementacion en Gxopen (http://www.gxopen.com/gxopen/servlet/projectversioninformation?553,1)
16/09/2006 - Se libera la segunda version en GXOpen (http://www.gxopen.com/gxopen/servlet/projectversioninformation?553,1)
Summarized by Collaborative Project (Segunda Etapa)
"SummarizedBy" Pattern - Collaborative Project