1. Introduction▲
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 (KPI) sont autant de cas d'utilisations des tableaux de bord. 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 bord 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 JSP (JavaServer 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 bord 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 :
2. 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.
3. Exemple de mise en place d'un tableau de bord▲
3-A. 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émonstration 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 deux objets graphiques représentant respectivement le montant total des ventes par zone (camembert) et le détail des ventes par gamme de produit sur deux années consécutives (histogramme).
3-B. 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 vingt-quatre 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 à vingt-quatre.
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) :
Cliquez pour lire la vidéo
3-C. Création des requêtes et affectation aux différents composants▲
Trois 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
OR
DERFACT
La requête « piechart_query » permet de créer le diagramme en secteur (« Pie Chart ») :
SELECT
CUSTOMER_W_TER.
TERRITORY,
SUM(OR
DERFACT.
TOTALPRICE)
FROM
CUSTOMER_W_TER INNER JOIN
OR
DERFACT ON CUSTOMER_W_TER.
CUSTOMERNUMBER =
OR
DERFACT.
CUSTOMERNUMBER
WHERE
OR
DERFACT.
YEAR_ID =
2004
GROUP BY
CUSTOMER_W_TER.
TERRITORY
La requête « barchart_query » permet d'alimenter l'histogramme (« Bar Chart ») :
SELECT
PRODUCTS.
PRODUCTLINE,
OR
DERFACT.
YEAR_ID,
SUM(OR
DERFACT.
TOTALPRICE) AS
TOTAL
FROM
PRODUCTS INNER JOIN
OR
DERFACT ON PRODUCTS.
PRODUCTCODE =
OR
DERFACT.
PRODUCTCODE
INNER JOIN
CUSTOMER_W_TER ON OR
DERFACT.
CUSTOMERNUMBER =
CUSTOMER_W_TER.
CUSTOMERNUMBER
WHERE
OR
DERFACT.
YEAR_ID IN
(2003
,2004
)
AND
CUSTOMER_W_TER.
TERRITORY =
'Japan'
GROUP BY
PRODUCTS.
PRODUCTLINE,
OR
DERFACT.
YEAR_ID
La vidéo qui suit illustre :
- la création (et le test) des deux premières requêtes SQL sous forme de Data Sources (CDA) ;
- la création des deux premiers composants : la liste déroulante ainsi que le diagramme en secteur ;
- l'affectation des deux 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);
}
4-A. Finalisation du tableau de bord▲
5. 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 indicateurset 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 C*tools 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 deux en espagnol) ;
- des dashboards de démonstration conçus lors de sessions de formations aux C*tools ;
- la section consacrée aux C*tools sur le forum pentaho.
6. 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).
Cliquez 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.
7. Remerciements▲
Je tiens ici à remercier l'équipe de Developpez.com pour ses relectures attentives et ses suggestions, et en particulier KalyParker et Maxime Gault.