Mostrando las entradas con la etiqueta CTools. Mostrar todas las entradas
Mostrando las entradas con la etiqueta CTools. Mostrar todas las entradas

Probando Pentaho IV: sparkline, dataBar y paleta de colores.

miércoles, 23 de octubre de 2013


 Con este tablero de control queremos mostrar cómo probamos algunos componentes de Pentaho y CTools.
 El gráfico muestra la variación de las ventas de Internet durante un período, por país. 
Permite comparar el porcentaje de ventas por año y muestra tendencias por medio de sparklines. 
 La base de datos es AdventureWorksDW, de Microsoft SQL Server Database Product Samples

Internet Sales

Es una línea de tiempo en años con el total de ventas por país.
Componente usado: CCC Line Chart.


Propiedades relevantes del componente: 
  • Data Source:  ventas por territorio y por año.
 
SELECT   T.CalendarYear,st.SalesTerritorycountry ,SUM(S.SalesAmount) TotalSalesAmount 
FROM dbo.FactInternetSales S
INNER JOIN DimTime T ON S.OrderDateKey = T.TimeKey
INNER JOIN DimSalesTerritory st on S.SalesTerritoryKey = st.SalesTerritoryKey
GROUP BY T.CalendarYear,st.SalesTerritoryCountry
ORDER BY T.CalendarYear


  • CrossTabMode = FALSE.
  • SeriesInRows = TRUE.
  • PostFetch: definimos algunos extensionPoints y el formato de las marcas de cantidades.
 
function f(cdaData) {
    var newLine = this.chartDefinition;
    newLine.extensionPoints= [
        ["dot_fillStyle","#ffffff"],
        ["dot_shapeRadius","3"],
        ["dot_lineWidth","2"],
        ["line_lineWidth","2"],
   
        ["legendLabel_font","10px sans-serif"], 
        ["legend_font","12px sans-serif"],
        ["xAxisLabel_font","12px sans-serif"],
        ["yAxisLabel_font","10px sans-serif"],
        ["xAxisLabel_text",function(g){return (g.vars.tick)}]];
    newLine.yAxisTickFormatter= function(value){
            return (value / 1000).toFixed() + " K"; };
    newLine.showYScale= true;
    newLine.yAxisPosition= "left";
    newLine.colors=colorFill;
    newLine.xAxisFullGrid= true 
    newLine.yAxisFullGrid= true 
    newLine.xAxisEndLine= true 
    newLine.yAxisEndLine= true  
 this.chartDefinition= newLine;
}

Year Percentage

Es  una tabla con las ventas por región y por año, con porcentaje correspondiente sobre el total para poder comparar la proporción de aumento en las ventas de un año a otro. El componente de Ctools usado es una tabla, con una columna de tipo 'dataBar'.

Propiedades relevantes del componente: 
  • DataSource: busca el total de ventas por año y calcula el porcentaje que representa cada año respecto al periodo en estudio.

 
WITH TotalSales ( SumTotal)
AS(
SELECT  SUM(S.SalesAmount)
FROM dbo.FactInternetSales S
)
SELECT T.CalendarYear,SUM(S.SalesAmount) SalesAmount,
100 * SUM(S.SalesAmount)/ MAX(TotalSales.SumTotal)  SalesAmountPercentage,
100 * SUM(S.SalesAmount)/ MAX(TotalSales.SumTotal)  SalesAmountPercentage2
FROM dbo.FactInternetSales S
INNER JOIN DimTime T ON S.OrderDateKey = T.TimeKey
CROSS JOIN TotalSales
GROUP BY T.CalendarYear
ORDER BY T.CalendarYear

  • ColumnTypes: dataBar para SalesAmountPercentage

Country Trend

Esta tabla muestra la tendencia de variación de las ventas en un periodo de 4 años, usando sparklines.

A sparkline is a small intense, simple, word-sized graphic with typographic resolution. Sparklines mean that graphics are no longer cartoonish special occasions with captions and boxes, but rather sparkline graphic can be everywhere a word or number can be: embedded in a sentence, table, headline, map, spreadsheet, graphic
La columna correspondiente al sparkline debe ser una cadena separada por comas con los valores que formarán la tendencia.

  • DataSource: ventas por territorio y por año, totales por año en columnas y columna resumen de totales para conformar el sparkline.

 
 SELECT  SalesTerritoryCountry as Country ,
    CAST([2001]/1000 as CHAR(10)) + ','+CAST([2002]/1000 as CHAR(10))+ ','+CAST([2003]/1000 as CHAR(10))+ ','+CAST([2004]/1000 as CHAR(10)) as Trend
,[2001] , [2002]  ,[2003] ,[2004] 
FROM 
(SELECT st.SalesTerritoryCountry, CalendarYear,cast(S.SalesAmount  as int) as salesamount
FROM dbo.FactInternetSales S
INNER JOIN DimTime T ON S.OrderDateKey = T.TimeKey
INNER JOIN DimSalesTerritory st on S.SalesTerritoryKey = st.SalesTerritoryKey) p
PIVOT
(
sum(SalesAmount)   
    for CalendarYear in 
([2001] , [2002]  ,[2003] ,[2004]     )) as pvt order by SalesTerritoryCountry
  


Los Colores

Se intenta unificar e integrar los colores de los componentes, procurando usar un mismo color por país para los tres casos.
Fue necesario definir una paleta de colores: una lista de códigos rgb preseleccionados.
Buscamos en Protovis, que provee varias paletas de colores Colores Protovis.
En  un 'resource' de tipo javascript asociado al dashboard se definieron las listas con colores ( para aplicar en los componentes y tablas) y un color general (para los encabezados y marcos de tablas).  
rgbPasaHex se encarga de la conversión a RGB.

 
colorFill=pv.Colors.category19();
colores= colorFill.range();
var colorBase=rgbPasaHex(colores[9].color);


 Colores en tabla Year Percentaje
En la propiedad PreExecution de la tabla, seteamos 'AddInOptions' para configurar el color del DataBar usando 'colorBase'

   this.setAddInOptions("colType","dataBar", function(val)  
    {
            return { startColor: colorBase, endColor: colorBase}
       
    });


Colores en la CCC Line Chart  
Asignamos la paleta de colores en la propiedad  postFetch  de CCC Line Chart ( que mostramos previamente)
 
   
    newLine.colors=colorFill;
    this.chartDefinition= newLine;
   

Colores en la tabla Country Trend: 


el nombre de cada país, tiene el mismo color que el sparkline y que la linea de tiempo correspondiente.  
Para modificar los labels, se define un span con el color correspondiente en hexa.
Para los sparklines, se define el 'strokeStyle' a medida que se construye la tabla.

 
   function f() {
    var idx=-2;
  
    this.setAddInOptions("colType","formattedText",   
         {textFormat: function(v, st) { 
                 idx = idx+1;
          var colorHexa = rgbPasaHex(colorFill(idx).color);     
             return ""+v.toUpperCase()+" }
      });

   var idj = -2;
     this.setAddInOptions("colType","pvSparkline",function(val) {
        idj=idj+1;
        return {lineWidth:2,strokeStyle:colorFill(idj).color}});

   }



Colores en los encabezados y en los bordes de las tablas
Para manipular los colores de las tablas y los distintos elementos del documento, se usaron variables. En este caso, la variable global 'colorBase'. La asignación de color debe estar en el  postExecution de cada una de las tablas.



 
function p(){
    var color=colorBase.toString();
    $("th").css( 'color' ,  color );
    $("td").css( 'border' ,  '1px dotted '+color );
    $(".tit").css("color",color); // definida una clase tit para los encabezados
  
}




Artículos relacionados:

Probando Pentaho I (Instalación de Pentaho Community)
Probando Pentaho II (Dashboard de ejemplo)
Probando Pentaho III (Introducción a Pentaho CTools)


 









Leer más...

Probando Pentaho III: Introducción a Pentaho CTools

jueves, 5 de septiembre de 2013

Encontré un muy buen documento (Introducción...) que me ayudó a sintetizar todo lo leído y probado respecto la construcción de Dashboards con CTools. Comparto mi traducción y síntesis:

Pentaho CTools es un framework para crear y mantener dashboards en la versión Community de Pentaho business intelligence server (bi-server)

Una de sus características relevantes es la creación de dashboards interactivos, integrados con el bi-server. Todos los datos disponibles se pueden visualizar, aprovechando la configuración de seguridad del bi-server de Pentaho.

Está compuesto por:

1. Community Dashboards Framework (CDF)
2. Community Chart Components (CCC)
3. Community Data Access (CDA)
4. Community Dashboard Editor (CDE)

1. CDF: motor generador de dashboards. Estos dashboards están formados por COMPONENTES, conectados entre si.

Componente: es un objeto de javascript que encapsula otros objetos con propiedades y funcionalidades. Puede ser visual o no. Tienen interacción entre ellos, la más básica es que un componente puede re-dibujarse a partir del cambio de una variable.
Se puede customizar su comportamiento.

2. CCC: componentes gráficos que permiten la interacción del usuario,  basados en Protovis y Raphaeljs


3. CDA: componente diseñado para recopilar, compaginar y distribuir información desde diferentes origenes.

Aunque CDF puede acceder a consultas SQL y MDX directamente, recomiendan el uso de CDA por asegurar accesos seguros, permitir joins de datos desde diferentes fuentes, exportar los datos de las queries fácilmente. También habilita la definición de las data sources y queries de SQL del lado del server. De esta manera, CDA disminuye el riesgo de inserción de código malicioso por medio de SQL injection (cuando la query esta almacenada del lado del cliente)

4. CDE: Editor que permite crear dashboards siguiendo estos pasos

    1. Crear el layout o presentación de la página.
    2. Especificar los data sources con la información a mostrar.
    3. Crear los componentes visuales específicos. Conectarlos a los datos y ubicarlos en el layout.
    4. Introducir más flexibilidad parametrizando los componentes y logrando interacción entre los mismos.

A continuación una descripción de las secciones de Layout, Components y Data Sources ...

Layout workspace

Formado por un área de estructura y otra de propiedades, relacionadas entre sí.




Layout Structure :

El layout mas simple esta formado por tres filas: Header, Contents y Footer.
Para modificar este layout, se pueden agregar columnas, filas, espacios, bloques de html, imágenes. Bloques de javascript.
Hay que tener en cuenta que las filas y columnas generadas están mapeadas a una estructura de <div> anidados, dentro de un archivo html generado en forma dinámica por el pentaho-CDE-plugin.

Properties:

Hay una lista de propiedades, describo las principales.
Nombre del elemento: se usa después para ubicar dentro del mismo los componentes gráficas.
Tamaños: toma blueprint css’ stylesheets. 'Width' se basa en las columnas de blueprint. 
Se puede ajustar, pero es mejor que estos tamaños sean dados por el componente en si.
Si los tamaños sumados de todos las columnas exceden el ancho de la página, tomarán la fila siguiente. Por otro lado, con blueprint los 'Heigths' son definidos por las alturas de lo que contiene, por eso, si una columna está vacía, queda invisible porque su altura es de 0 px.
Seleccion de color: área de color y saturación, pueden ser configuradas por el selector de colores.

Data source workspace



Hay once tipos de datasources, de los cuales probamos SQL Queries y MDX queries. 

Se puede seleccionar el acceso via JDBC ó JDNI.
Se recomienda acceder por JDNI en los casos en que se quiera acceder a mas de una tabla. Otra ventaja es que para setear JDNI se necesita solo el nombre de la datasource.
Dentro de las propiedades, se puede seleccionar un origen de datos creado anteriormente por Pentaho.
Al ingresar la consulta, se recomienda controlar la sintaxis de las consultas SQL o MDX en otro entorno. Un error en la consulta no se detecta fácilmente desde CDE.
También es útil probar la datasource creada por medio del Preview de CDA
Hay que guardar las modificaciones al datasource en cada cambio, y limpiar el cache de la CDA, entre una prueba/ corrección y prueba
Tener en cuenta que el cache del repositorio no es el mismo que el cache de la CDA.

Component workspace


El concepto de componente intenta simplificar la construcción de dashboards. Es un objeto de JavaScript que encapsula todas las propiedades y métodos. 

Destacamos:
  1. Genéricos: simple paramenter (javascript parameter), custom parameter(arrays, objetos, funciones), date parameter. Parametros con su inicialización, se usan para conectar los componentes entre si
  2. Scripts: funciones de javascript
  3. Otros. Usamos los botones, tablas.
  4. Charts: los componentes para gráficos específicamente. Pie chart, line chart, bar chart
  5. Selects: componentes usados para seleccionar valores. Permiten la interacción del usuario, desde text inputs hasta combos.
  6. Custom: Raphael component: Raphaeljs es una librería para Scalable Vector Graphics (svg).

Propiedades  de los componentes:
Cada tipo de componente tiene propiedades específicas, pero hay algunas comunes a todos que se pueden usar para controlar el ciclo de vida y comportamiento. Este cuadro resume el ciclo de vida de un componente y permite entender el sentido de las distintas propiedades.

















- executeAtStart: una variable booleana o (función que devuelva booleano). Indica si el componente será ejecutado (renderizado) en el load del dashboard o no.

- Parameters: array de parámetros a pasar al componente, en general basados en el input del usuario. Permiten customizar (al data source que está detrás)
- Parameter: Parámetro de salida de la función 
- Listeners: array de parámetros que disparan la ejecución y renderización del componente.
- PreExecution: función ejecutada antes de la inicializar o actualizar el componente. Si la función devuelve False, el componente no se actualiza.
- PostExecution: función que se ejecuta después del update del componente y se puede usar para indicar que la actualización terminó.
- PreChange: function(v), siendo v el nuevo valor del componente. Tiene sentido para componentes de tipo selector, para validar los inputs. Si esta función devuelve F no se ejecuta el evento 'fireChange'
- PostChange: se ejecuta después del cambio.
- Click action: Si la  CCC charts es clickable ( Clickable = true), se ejecuta una función cuyo prototipo es:
function(s, c, v) { <body> }, cons = label of the seriesc = category label (value at the x-axis)v = value (value at the y-axis)

El uso más común de esta función es modificar el valor de un parámetro por medio de   Dashboards.fireChange(param, value). Pero se pueden crear interacciones más complejas con un popup, por ejemplo. Que permitan que el usuario tome distintas acciones.


-Height - Width: usar solamente si al ubicar el componente dentro del layout no se ajusta a lo 

que necesitamos.
-Datasource: la cda datasource definida antes.
-HtmlObject: es el id del html del layout, definido antes, que será reemplazado por el componente.
-Listeners: qué parámetros definidos previamente,  disparan el cambio del componente
- Priority: por default 5, si es menor el componente se ejecuta primero. Se usa en los casos en que se quiere dar un orden de ejecución.
-Cross tab mode y series in rows
están relacionados con la estructura del dataset y con la información a mostrar.

Cross tab mode: si la consulta generada esta compuesta por series y categorías, en general si la consulta es MDX o una SQL con la clausula group by.
Series in rows: determina si las filas corresponden a las series o no.
If series in rows = false los datos deben venir como Serie, Category, Data. If series in rows =
true deben ser Category, Serie, Data.

Si crosstab mode = False los column headers (nombres) no son parte del dataset, por ende no serán visibles en el dashboard.




-Extension points:

Permiten setear el font family, font-size, text-orientation de los distintos componentes de texto del chart. Se forman como 'ItemTipo_propiedad', por ejemplo titleLabel_font.

Cuadro con ItemTipo más usados,  propiedades y ejemplos de valores para las propiedades






Artículos relacionados:

Probando Pentaho I (Instalación de Pentaho Community)
Probando Pentaho II (Dashboard de ejemplo)


 









Leer más...