Dans une suite décisionnelle, le tableau de bord (ou “dashboard”) est un élément clef pour fournir des informations synthétiques facilement accessibles. Le pilotage stratégique, le pilotage opérationnel et les indicateurs de performances (KPIs) sont autant de cas d’utilisations des tableaux de bords. La plupart du temps, un dashboard présente un maximum d’informations dans un minimum de place, en faisant appel à une grande interactivité et à de multiples composants graphiques.

Mettre en place des tableaux de bords dans la version libre (Community) de Pentaho n’a pas été toujours une chose très aisée (ce n’est pas le cas de la version Enterprise qui propose un module WYSIWYG full Web à destination des utilisateurs métier). Dans les premières versions de la plate-forme, les dashboards devaient être codés directement en langage JSP (Java Server Page), ce qui nécessitait une connaissance très avancée des classes Java internes, des libraires graphiques (JFreeChart) et du fonctionnement des séquences d’actions (Xactions). Très difficile donc (voir impossible) de mettre en place des dashboards sans avoir un profil de développeur JAVA !!

C’est dans ce contexte qu’est né en 2009 le projet communautaire Pentaho CDF (Community Dashboard Framework), à l’initiative de Pedro Alves (de WebDetails). Son objectif était simple: fournir une API complète permettant de s’affranchir de la complexité interne de Pentaho grâce au paradigme MVC (Modèle-Vue-Contrôleur).

Au fur et mesure, d’autres projets se sont greffés à Pentaho CDF, pour constituer ce qu’on appelle désormais les “C*tools” :

  • CDA (Community Data Access), pour accéder de manière simple et flexible à de multiples sources de données (en SQL, MDX, XML, PDI, Metadata, scripting…). CDA dispose notamment d’un mécanisme de mise en cache et permet d’effectuer des jointures entre des sources hétérogènes par simple configuration XML.
  • CCC (Community Charting Components), une très bonne librairie de visualisation graphique s’appuyant sur Protovis, un projet open source de data-visualization (Javascript+SVG)
  • CST (Community Startup Tabs), un plugin qui permet de paramétrer les onglets à afficher au lancement de la “Pentaho User Console”, en fonction des droits de l’utilisateur connecté
  • CDE (Community Dashboard Editor), pour la création et la publication de tableaux de bords directement depuis l’interface web de Pentaho.

Les C*tools permettent de délivrer des tableaux de bord d’une qualité professionnelle, en minimisant la complexité liée à de l’écriture de code. Jetez plutôt un œil sur cette présentation afin d’en prendre pleinement la mesure :

Installation des C*tools

Chacun des C*tools est disponible sous forme de plugin serveur Pentaho, l’installation consiste au dépôt d’un simple dossier dans le répertoire /pentaho-solutions/system

(Note: les C*tools fonctionnent à partir de la version 3.6 de Pentaho)

En raison des dépendances entre les différents plugins, il est vivement conseillé d’utiliser le script d’installation ctools-installer.sh (Linux). Ce script fonctionne également sous Windows à condition d’installer Cygwin (émulateur Linux pour Windows). Retrouvez tous les détails pour effectuer cette installation dans ce post de Pedro Alves.

Exemple de mise en place d’un tableau de bord

 

1. Principes de base de Pentaho CDE

Pour réaliser un tableau de bord avec Pentaho CDE, il faut avant toute chose avoir une idée assez précise du résultat final !

Cela revient à définir une petite maquette dans laquelle on va spécifier :

  • la structure du dashboard (le “Layout”)
  • les différents composants (“Components”) du dashboard : graphiques, tableaux de données, objets web (listes déroulantes, cases à cocher, calendrier…)
  • les interactions entre les composants, au travers de paramètres (“Parameters”)
  • les sources de données nécessaires à l’alimentation des composants (“Data Sources”)

Prenons un exemple simple de tableau de bord à réaliser :

Ce tableau de bord s’appuie sur les données de la base de démo de Pentaho (SampleData). Il contient un en-tête avec le titre, une zone pour le choix des paramètres (sélection de l’année) ainsi que 2 objets graphiques représentant respectivement le montant total des ventes par zone (Camembert) et le détail des ventes par gamme de produit sur 2 années consécutives (Histogramme)

2. Création du Layout

Dans CDE, l’onglet Layout permet de positionner et d’agencer les différents composants de la page web.

Pentaho CDE repose sur le framework CSS BluePrint qui permet une mise en page simplifiée. Le point le plus important à noter est que ce framework repose sur une grille de 24 colonnes, d’où l’obligation de faire en sorte que la somme des attributs “span” de toutes les colonnes d’une même ligne soit égale à 24.

Notre tableau de bord présente la structure suivante :

La mise en place est illustrée par la vidéo ci-dessous. Notez qu’on peut personnaliser de façon très avancée la mise en forme grâce à l’utilisation de feuilles de styles CSS comme celle ajoutée dans la vidéo (c’est d’ailleurs sans doute ce point qui nécessite le plus de connaissances techniques) :

 

3. Création des requêtes et affectation aux différents composants

3 requêtes SQL sont à créer pour le tableau de bord, chacune de ces requêtes étant associée à un composant.

La requête “select_year_query” permet d’alimenter les années affichées de la liste déroulante :

SELECT DISTINCT YEAR_ID FROM ORDERFACT

La requête “piechart_query” permet de créer le diagramme en secteur (“Pie Chart”) :

SELECT
CUSTOMER_W_TER.TERRITORY,
SUM(ORDERFACT.TOTALPRICE)
FROM
CUSTOMER_W_TER INNER JOIN ORDERFACT ON CUSTOMER_W_TER.CUSTOMERNUMBER = ORDERFACT.CUSTOMERNUMBER
WHERE
ORDERFACT.YEAR_ID = 2004
GROUP BY
CUSTOMER_W_TER.TERRITORY

La requête “barchart_query” permet d’alimenter l’histogramme (“Bar Chart”) :

SELECT
PRODUCTS.PRODUCTLINE,
ORDERFACT.YEAR_ID,
SUM(ORDERFACT.TOTALPRICE) AS TOTAL
FROM
PRODUCTS INNER JOIN ORDERFACT ON PRODUCTS.PRODUCTCODE = ORDERFACT.PRODUCTCODE
INNER JOIN CUSTOMER_W_TER ON ORDERFACT.CUSTOMERNUMBER = CUSTOMER_W_TER.CUSTOMERNUMBER
WHERE
ORDERFACT.YEAR_ID IN (2003,2004)
AND CUSTOMER_W_TER.TERRITORY = 'Japan'
GROUP BY
PRODUCTS.PRODUCTLINE,
ORDERFACT.YEAR_ID

La vidéo qui suit illustre :

  • la création (et le test) des 2 premières requêtes SQL sous forme de Data Sources (CDA)
  • la création des 2 premiers composants: la liste déroulante & le diagramme en secteur
  • l’affectation des 2 requêtes aux composants respectifs

 

4. Mise en place des listeners (gestion des événements)

Certains composants sont “à l’écoute” d’autres composants via des “Listeners” (écouteurs): c’est de cette façon que les graphiques sont rendus dynamiques.

Ainsi dans notre exemple, les données présentées dans le diagramme en secteur (Pie Chart) dépendent de l’année sélectionnée dans la liste déroulante, tandis que celles de l’histogramme (Bar Chart) dépendent à la fois de l’année mais aussi de la zone cliquée depuis le camembert.

Deux paramètres sont à créer pour notifier les évènements possibles pour les mises à jour. Nommons ces paramètres “param_year” et “param_zone”, ceux-ci étant définis depuis le menu “Components

Tout composant qui est notifié (via son Listener) du changement de valeur d’un des paramètres est susceptible de se remettre à jour automatiquement. Ainsi les graphiques deviennent dynamiques; il suffit pour cela de positionner les paramètres correspondants dans les clauses WHERE des requêtes SQL.

La vidéo qui suit illustre :

  • la création du paramètre “param_year” et sa prise en compte dans le diagramme en secteur
  • la création de l’histogramme (Bar Chart)
  • la création du paramètre “param_zone” et sa prise en compte dans l’histogramme conjointement avec le paramètre année. On rend le Pie Chart cliquable en définissant sa propriété “Clickable” à “True” et en saisissant le code Javascript ci-dessous dans la propriété “Click Action”. La méthode fireChange permet d’alerter les listeners du changement de valeur d’un paramètre.
function(s,c,v){
      /* permet de changer la valeur de param_zone lors d'un clic sur une zone du PieChart
          s: série, c: catégorie, v: valeur    */
          Dashboards.fireChange('param_zone',c);
}

 

5. Finalisation du tableau de bord

Pour obtenir un tableau de bord présentable, il convient de faire quelques petites retouches :

 

 

Autres liens (très) utiles …

Voici quelques ressources incontournables qui devraient vous permettre d’exploiter au mieux la puissance des C*tools :

- Le site du projet: ctools.webdetails.org et celui de la société qui le porte, WebDetails

- Un guide de référence complet : [download id="64"]

- L’excellent tutoriel de Slawomir Chodnicki: “Creating Dashboards with CDE”

- Un tutoriel de TIKAL montrant l’élaboration d’un dashboard depuis un template sur des données en provenance de Bugzilla

- Le blog de Ambient BI, qui explique notamment les techniques pour incorporer des indicateurs et des barres proportionnelles dans des objets de type “Tableau” (vraiment génial, je conseille également la démo en ligne)

- Un article détaillant l’installation de Cygwin pour le setup de Ctools sous Windows

- Un très bon tutoriel conçu par StrateBI et un autre tutoriel pour la mise en place de filtres avancés (les 2 en espagnol)

- Des dashboards de démonstration conçus lors de sessions de formations aux CTools

- La section consacrée aux Ctools sur le forum pentaho

Un autre exemple… et les sources !

Je vous propose de télécharger l’exemple proposé, avec en bonus un tableau de bord un peu plus élaboré.

Ce dernier comprend des titres dynamiques, un graphique de type “Line Chart” ainsi qu’un objet “Table” très commode pour représenter des indicateurs d’évolution entre les années N et N-1 (vidéo ci-dessous)

Cliquer ici pour télécharger les sources

Note : le fichier “Demo CDE.zip” est à décompresser dans le répertoire /pentaho-solutions

 

=> Retrouvez plus de tutoriels Pentaho sur osbi.fr

Taggué avec :
 

One Response to Les tableaux de bords dans Pentaho avec les C*tools

  1. MADEN dit :

    Bonjour,

    Est il possible d’utiliser les paramètre avec des requetes MDX (mondrian jndi) ???
    si oui, comment faire quel variable utiliser ? ${variable} ne fonctionne pas chez moi …

    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>