Unofficial Content
  • This documentation is valid for:

 

Objetivos

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.

Ejemplo Canónico


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
       )



Filtros

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


Dimensiones por las que se agrupa

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


Indicadores

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).

Orden

Si se ordena en por el resultado de los indicadores, es un Ranking.
Si se ordena por las dimensiones es un resumen.


Salida

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.


Formas de Implementacion

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 .

Plan de trabajo tentativo


Etapa 0 (3 meses AE)

Definir el grupo de trabajo.
YA CULMINADO
 

Etapa 1 (3 Meses AE)

Hacer el ejemplo canonico de la factura.

Etapa 2 (2 Meses AE)

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)

Etapa 3 (1 Mes AE)

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

Etapa 4 (Evento)

Liberar una beta

Etapa 5 (1 mes DE)

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)

Etapa 6 (sin fecha, antes de fin de año).

Documentarlo.
Testeo en serio
Liberarlo al publico.
Mejoras esteticas.


Nomenclatura

AE = Significa Antes del Evento
DE = Despues del Evento.
Es la nomenclatura temporal por la que se rige la gente de Artech biggrin

Temas a Resolver.

Ponerle un nombre que se entienda a cada una de las agregaciones.

Por ejemplo se puede llamar :
Resumen por Mes
Año/Mes Cantidad Vendida Importe Vendido Precio / Unitario Promedio

Definir la navegacion entre Resumenes.

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.

Comparar dos periodos de tiempo (Puede ser otro pattern relacionado)

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.

Integracion con GXPlorer.

Hacer las consultas con Gxplorer IO, a traves de Webservices.

Resumen (un webcomponent generico o varios)

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
Last update: February 2024 | © GeneXus. All rights reserved. GeneXus Powered by Globant