La revue de presse de l’hiver (2014)

Le printemps est déjà là : il est donc temps de vous délivrer une nouvelle revue de presse autour de sujets liés à l’OSBI.

C’est plutôt touffu, alors bonne lecture ! ;-)

Pentaho 5 :revue_presse

  • Découvrez les plugins Ivy : jauges, cartes vectorielles et video player
  • Plugin Pentaho 5 « PASH » (Pentaho Analysis Shell) pour  la saisie de commandes MDX en mode terminal dans Pentaho User Console

CTools :

  • Vos dashboards Pentaho CDE sur smartphone, avec Bootstrap
  • Exemple de réalisation de dashboards Pentaho CTools à partir de mockups : bluffant et efficace !
  • Utilisation de MongoDB comme source de données dans Pentaho CDA

Kettle :

Saiku :

A lire également => un article de Tom Barber sur la difficulté de faire vivre un projet Open Source tel que Saiku : « Selling Open Source Software ».

logo-saiku

Vous pouvez également apporter votre contribution à cet excellent projet libre en répondant à ce sondage :

http://meteorite.bi/questions.html

Mondrian & OLAP :

  • Trucs et astuces pour l’édition de schémas Mondrian générés par le modeleur automatique
  • Mise à jour du support des graphiques dans Pivot4J

BIRT :

  • Actuate annonce le lancement du BIRT Viewer Toolkit, pour vous permettre d’adapter le viewer de BIRT à vos besoins

JasperSoft :

Talend :

GEO(BI) :

  • Tutoriel d’initiation à QGIS

Livres :

Divers :

A ne pas rater :

  • Le tutoriel de Diethard Steiner Building a datamart with Pentaho Data Integration. Grâce à ce tuto vidéo, suivez pas à pas la mise en place d’une base dimensionnelle avec PDI : un  must à acheter impérativement pour ceux qui démarrent dans le domaine de la BI (avec Kettle)

Petite vidéo échantillon :

A bientôt !

Invoquer ses traitements Kettle depuis un navigateur web

Voilà une question qui revient assez régulièrement : peut-on déclencher un traitement Kettle stocké sur un serveur dans un référentiel (repository)… sans se connecter au même serveur ? (donc sans lancer manuellement le programme kitchen)

Réponse => Oui : à l’aide du web listener « Carte » disponible en standard dans PDI.

Exemple (pré-requis: Kettle 5) :

Ci-dessous un exemple (simpliste) de job envoyant juste un mail, le destinataire étant configurable via le paramètre de tâche ${destinataire} :

carte-pdi5

Ce job send_mail est stocké dans un référentiel Kettle nommé pdi-5.0, dans un répertoire intitulé taches :

carte-pdi5-02

Définition du fichier de configuration pour Carte :

Dans le répertoire data-integration (où est situé carte.bat/sh), créer le fichier XML « carte_config.xml » suivant :

  <slave_config>
 
   <slaveserver>
     <name>master</name>
     <hostname>localhost</hostname>
     <port>8082</port>
     <master>Y</master>
   </slaveserver>
 
   <repository>
     <name>pdi-5.0</name>
     <username>admin</username>
     <password>admin</password>
   </repository>
 
  </slave_config>

Exécution de Carte :

Lancer le programme carte.bat (ou .sh) en ligne de commande : carte.bat carte_config.xml

carte-pdi5-03

Appel du job via une url :

Ouvrir un navigateur web et saisir l’url suivante :

http://localhost:8082/kettle/runJob/?job=/taches/send_mail&destinataire=osbi.fr@gmail.com

Un identifiant et mot de passe vous sont demandés : saisir cluster/cluster (note: ceci est modifiable en éditant le fichier \data-integration\pwd\kettle.pwd)

Un message d’information vous informe que votre job s’est exécuté correctement :

carte-pdi5-04

Note: pour éviter de renseigner le mot de passe, on peut faire circuler l’authentification en http avec l’url suivante :

http://cluster:cluster@localhost:8082/kettle/runJob/?job=/taches/send_mail&destinataire=osbi.fr@gmail.com

Conclusion :

Si vous n’avez pas de BI Server Pentaho sous la main, « Carte » est l’outil idéal pour invoquer des transformations et des jobs via un navigateur web (il s’agit d’un web-listener basé sur Jetty avec une faible empreinte mémoire).

De nombreuses autres méthodes sont disponibles, je vous invite à les découvrir sur la page de wiki suivante :

http://wiki.pentaho.com/display/EAI/Carte+Web+Services

Et si vous souhaitez utiliser Carte pour exécuter vos jobs sur une grappe de serveurs ou en mode « remote » depuis Spoon, c’est également possible… Je vous invite à lire les excellents articles de Diethard Steiner sur ce sujet :

http://diethardsteiner.blogspot.fr/2013/03/creating-clustered-transformation-in.html

http://diethardsteiner.blogspot.fr/2011/01/pentaho-data-integration-remote.html

Enjoy PDI ;-)

Une brique sémantique pour la génération automatique de transformations Kettle

Cela fait déjà plusieurs mois que nous travaillons sur un sujet qui nous tient à cœur : la possibilité de décrire une transformation Kettle de façon textuelle dans le but de procéder à sa génération automatique. C’est ainsi que nous avons développé il y a peu de temps un nouveau plugin pour Kettle :

L’étape « Semantic Generation Step ».

Comment ça marche ?

Il suffit de créer un job, d’ajouter l’étape « Semantic Generation Step », puis de renseigner la description de la transformation en « langage naturel » (pour l’instant seule la langue anglaise est gérée).

Des options permettent ensuite d’indiquer si on veut une génération + exécution à la volée et/ou si l’on souhaite obtenir une création physique de la transformation sous forme de fichier KTR :

semantic_job

Ci-dessous la transformation générée automatiquement lorsque la case « Generate a hard copy » est cochée :

semantic_generated_transfo

Si jamais vous souhaitez avoir plus de renseignements et obtenir ce plugin, renseignez ce petit formulaire.

A noter que bientôt la langue française sera disponible, et qu’à terme nous comptons fournir une génération entièrement vocale. L’objectif est en effet de pouvoir créer des transformations Kettle en les décrivant oralement depuis son smartphone ou un enregistreur MP3

Tout cela sera synonyme de gain de productivité et de mobilité : avec ce système, vous pourrez enfin créer vos traitements Kettle tout en faisant vos courses ou en attendant le métro !

A bientôt..

Gestion dynamique de la sécurité dans un cube Mondrian

Introduction

Quand on déploie des cubes Mondrian dans Pentaho, on est bien souvent amené à gérer des droits d’accès sur une ou plusieurs dimensions d’un cube : par exemple pour un cube des ventes, ne permettre aux responsables commerciaux de visualiser uniquement les chiffres d’affaires concernant les zones dont ils ont la charge.

Cette opération de sécurisation d’accès aux données s’effectue assez simplement, via l’ajout d’attributs dans le schéma XML du cube, et ceci pour chaque rôle à filtrer, par exemple :

<Role name="California manager">
  <SchemaGrant access="none">
    <CubeGrant cube="Sales" access="all">
      <DimensionGrant hierarchy="[Measures]" access="all"/>
        <HierarchyGrant hierarchy="[Store]" access="custom" topLevel="[Store].[Store Country]">
          <MemberGrant member="[Store].[USA].[CA]" access="all"/>
          <MemberGrant member="[Store].[USA].[CA].[Los Angeles]" access="none"/>
        </HierarchyGrant>
        <HierarchyGrant hierarchy="[Customers]" access="custom" topLevel="[Customers].[State Province]" bottomLevel="[Customers].[City]">
          <MemberGrant member="[Customers].[USA].[CA]" access="all"/>
          <MemberGrant member="[Customers].[USA].[CA].[Los Angeles]" access="none"/>
        </HierarchyGrant>
        <HierarchyGrant hierarchy="[Gender]" access="none"/>
    </CubeGrant>
  </SchemaGrant>
</Role>

Cette sécurisation d’accès aux données fonctionne bien, mais montre rapidement ses limites dès que :

  1. le nombre de rôles devient important
  2. l’affectation des utilisateurs à ces rôles évolue souvent

Dans ces 2 cas, il devient alors très contraignant d’appliquer la sécurité car celle-ci nécessite obligatoirement une définition en dur dans le schéma XML

Comment donc procéder dans ce type de situation ?

Réponse : grâce à la sécurisation dynamique du schéma Mondrian offerte par le « Dynamic Schema Processor » (DSP)

Sécurisation dynamique du cube SteelWheels

Nous prendrons comme exemple l’adaptation du cube « SteelWheels » fourni dans la plate-forme Pentaho de démo (pré-requis : Pentaho 4.8 CE + plugin Saiku).

L’objectif est de pouvoir sécuriser dynamiquement les pays en fonction de qui se connecte.

Dans mon exemple, on sécurise les pays pour Joe, Suzy, Pat et Tiffany comme indiqué dans les codes couleurs ci-dessous :

DSP-pic1

Etape 1 – Stockage des habilitations

La façon la plus souple de conserver les droits d’accès, c’est encore une base de données. Ainsi les liens Utilisateur <=> Pays sont stockés dans une table « USER_FILTER » créée spécifiquement dans la base SampleData et chargée avec le traitement Kettle ci-dessous :

DSP-pic2

Etape 2 – Chargement des pays autorisés pour l’utilisateur

Une Xaction « set_session_vars.xaction » est créée, celle-ci permet de charger dans la session utilisateur la liste des pays autorisés. Cette Xaction charge en session (lors de la connexion de l’utilisateur à la PUC) la variable USER_COUNTRY, à savoir une chaine de caractère correspondant à la concaténation des pays accessibles et qui sera utilisée ultérieurement dans la clause « WHERE COUNTRY IN » d’un ordre SQL.

Ci-dessous la requête SQL sur la table user_filter permettant de récupérer la liste des pays autorisés en fonction de l’identifiant utilisateur (via le paramètre {login}) :

DSP-pic2b

Une fonction javascript permet d’instancier la variable USER_COUNTRY, via la concaténation de tous les pays retournés :

function getCountry(){
 
  var chaine="";
  var nbRecords = query_result.getRowCount();
 
  for (var j = 0; j< nbRecords ; j++) {
    var value = query_result.getValueAt(j, 1);
 
    if (j == nbRecords-1) {
       chaine = chaine + "'" + value + "'";
    } else {
       chaine = chaine + "'" + value + "',";
    }
  }
 return chaine;
}

Etape 3 – Activation automatique de « set_session_vars.xaction »

Afin que cette Xaction soit déclenchée automatiquement à la connexion, il faut ajouter les lignes ci-dessous dans le fichier /pentaho-solutions/system/sessionStartupActions.xml

<!– Start of PentahoHttpSession startup actions. –>
 
<bean class="org.pentaho.platform.engine.core.system.SessionStartupAction">
 
<property name="sessionType" value="org.pentaho.platform.web.http.session.PentahoHttpSession"/>
 
<property name="actionPath" value="bi-developers/rules/session-region-list.xaction"/>
 
<property name="actionOutputScope" value="session"/>
 
</bean>
 
<!–LIGNES A  AJOUTER –>
 
<bean class="org.pentaho.platform.engine.core.system.SessionStartupAction">
 
<property name="sessionType" value="org.pentaho.platform.web.http.session.PentahoHttpSession"/>
 
<property name="actionPath" value="DSP/set_session_vars.xaction"/>
 
<property name="actionOutputScope" value="session"/>
 
</bean>
 
<!–FIN des LIGNES A  AJOUTER –>

L’Xaction « get_session_vars.xaction » permet de vérifier la valeur de USER_COUNTRY après la connexion de chaque utilisateur.

  • pour Joe :

DSP-pic3

  • pour Pat :

DSP-pic4

 Etape 4 – Adaptation du schéma XML Mondrian

Une partie du schéma XML Mondrian doit être adaptée (/pentaho-solutions/steel-wheels/analysis/steelwheels.mondrian.xml)

On remplaçe ainsi la définition en dur de la table CUSTOMER_W_TER

<Table name="CUSTOMER_W_TER">
</Table>

par un ordre SQL prenant dans sa clause WHERE … IN le paramètre %USER_COUNTRY %

<View alias="CUSTOMERS">
<SQL dialect="generic">
<![CDATA[SELECT TERRITORY, COUNTRY, STATE, CITY FROM CUSTOMER_W_TER where COUNTRY in (%USER_COUNTRY%)]]>
</SQL>
</View>

 Etape 5 – Création d’une classe Java pour la mise à jour dynamique du schéma Mondrian

Un code Java permet de remplacer dynamiquement dans le schéma les informations contenues dans USER_COUNTRY. Celui-ci implémente la classe DynamicSchemaProcessor et doit être compilé puis exporté sous forme de jar dans le répertoire \biserver-ce\pentaho-solutions\system\saiku\lib

package com.atolcd;
import mondrian.i18n.LocalizingDynamicSchemaProcessor;
import mondrian.olap.Util;
import org.pentaho.platform.api.engine.IPentahoSession;
import org.pentaho.platform.engine.core.system.PentahoSessionHolder;
import java.io.InputStream;
import java.util.regex.PatternSyntaxException;
 
public class CountryDynamicSchemaProcessor
extends LocalizingDynamicSchemaProcessor
implements mondrian.spi.DynamicSchemaProcessor {
 
public CountryDynamicSchemaProcessor() {
   super();
   System.out.println("DSP: Création du DSP");
}
 
@Override
public String filter(String schemaUrl, Util.PropertyList connectInfo, InputStream stream) throws Exception {
 
   String schema = super.filter(schemaUrl, connectInfo, stream);
   IPentahoSession session = PentahoSessionHolder.getSession();
   String country = (String)session.getAttribute("USER_COUNTRY");
 
   if (country == null) {
      System.out.println("DSP: ATTENTION - Pas de country en session");
   }
   else {
      try {
         // remplacement à la volée de la chaîne %USER_COUNTRY% dans le schéma XML Mondrian
         schema = schema.replaceAll("%USER_COUNTRY%", country);
      }
      catch (PatternSyntaxException pse) {
         pse.printStackTrace();
      }
   }
   return schema;
  }
}

 Etape 6 – Configuration Saiku

Afin que Saiku affecte bien un cache dédié à chaque utilisateur, la modification suivante doit être effectuée.

Mettre la valeur true pour le paramètre userAware dans le fichier plugin.spring.xml

<bean id="connectionManager" class="org.saiku.plugin.PentahoSecurityAwareConnectionManager" init-method="init">
     <property name="dataSourceManager" ref="pentahoDsManager" />
     <property name="userAware" value="true" />
     <property name="connectionPooling" value="true" />
</bean>

Etape 7 – Mise à jour du catalogue

Configurer la datasource dans le fichier /system/olap/datasources.xml comme suit, afin de spécifier l’utilisation d’un DSP

<Catalog name="SteelWheels">
    <DataSourceInfo>Provider=mondrian;DataSource=SampleData;DynamicSchemaProcessor=com.atolcd.CountryDynamicSchemaProcessor;</DataSourceInfo>
    <Definition>solution:steel-wheels/analysis/steelwheels.mondrian.xml</Definition>
</Catalog>

Télécharger l’exemple

Cet exemple est issu d’une configuration dynamique effectuée chez un de nos clients sur plus d’une centaine de rôles.

Vous pouvez télécharger l’ensemble des fichiers décrits ci-dessus dans l’archive zip : Package DSP Mondrian (61 downloads)

Pour encore plus de souplesse, vous pouvez aussi vous appuyer sur les rôles Pentaho (au lieu des identifiants utilisateurs) à l’aide de la variable PrincipalRoles !

Pour obtenir des informations complémentaires, vous pouvez également vous procurer l’excellent livre « Mondrian in Action »

A bientôt ;-)

Gartner Magic Quadrant (Février 2014)

Le carré magique Gartner 2014 vient d’arriver :

Que remarque t’on par rapport aux années précédentes ? :

  • QlikView et Tableau Software devancent désormais les solutions historiques (SAP, IBM, Oracle, Microsoft…)
  • Côté open source, Pentaho passe cette année devant JasperSoft, Actuate étant relégué assez loin derrière. Et toujours pas de SpagoBI en vue dans le carré magique (malgré une note informative sur la solution).

Retrouvez les commentaires des analystes du Gartner dans la note détaillée :

« Magic Quadrant et Business Analytics Platforms – February 2014 »

Vous pouvez également visualiser et comparer les carrés magiques de 2012 et 2013 dans cet article.

Bien sûr, prenez un peu de recul en lisant tout ça, en lisant par exemple l’analyse de Philippe Nieuwbourg sur Decideo.fr avec les commentaires qui vont avec (je pense à celui très éclairant de Jean-Michel Franco) ! ;-)

A bientôt

Les boucles dans Kettle 5

Voici le premier post d’une série d’articles à venir en 2014 concernant Pentaho 5 (ce sera d’ailleurs le 26ème et dernier post de l’année)

Comment ne pas commencer cette série par Kettle ? :-)

Le « Job Executor »

Il y a plus de 3 ans, j’expliquais ici même comment implémenter des traitements itératifs dans Kettle, et il n’est pas exagéré de dire que jusqu’à Kettle 4.x, la tâche était plutôt… ardue !!

Désormais, grâce à la nouvelle étape « Exécution de tâche » (Job Executor) disponible dans une transformation, c’est devenu un véritable jeu d’enfant…

Voici donc comment adapter l’exemple fourni à l’époque pour Kettle 4 (je ne reprends pas toutes les explications, référez-vous donc à l’article original)

Etape 1 :

Créer un job qui appelle la transformation « Chargement Fichier »  :

La transformation « Chargement fichier » s’occupe de l’intégration d’un seul fichier CSV  (celle-ci est identique à l’article d’origine) :

Etape 2 :

Créer une transformation qui s’occupe de récupérer la liste des fichiers CSV à traiter (« Extraction fichier Excel »).

Placer ensuite l’étape « Exécution de tâche » et faire pointer celle-ci sur le job créé précédemment.

Dans l’onglet « Paramètres », associer aux champs Région et Année du flux respectivement les variables VAR_REGION et VAR_ANNEE :

Etape 3 :

C’est TOUT !

Vous n’avez plus qu’à exécuter la transformation.

Un fichier « temp_file.txt » sera alors créé dans votre répertoire de travail et contiendra l’ensemble du contenu des fichiers traités par la boucle.

Pour tester :

  • Dézipper celui-ci dans le répertoire de votre choix
  • Ouvrir et exécuter dans Spoon la transformation « transfo_principale.ktr »

Les (autres) nouveautés de Kettle 5

Il y a beaucoup d’autres nouvelles fonctionnalités dans Kettle 5, je vous renvoie donc à l’article de Matt à ce sujet.

Je suis sûr que tout comme moi vous apprécierez particulièrement le nouvel onglet « Prévisualiser » ajouté dans le panneau des résultats d’exécution : d’une très grande utilité pendant la phase de développement !

Bon réveillon, et à l’année prochaine !