Archive pour la catégorie ‘Business Intelligence’

Un peu plus sur le BISM

21 mai 2011

Pour commencer, rappelons que BISM est l’acronyme de Business Intelligence Semantic Model. J’en ai parlé dans un précédent article sur Denali.
Le TechEd 2011 aux U.S. vient de se terminer et on en sait un peu plus (pas beaucoup mais suffisamment pour livrer des news dans un post).

Ma description du BISM reste juste ; il vient bien en complément de l’UDM. L’objectif de Microsoft est effectivement de fusionner totalement UDM et BISM à terme.

Pour nos projets décisionnels, on aura donc un modèle commun appelé BISM.

  • On l’implémentera de façon traditionnelle (Kimball) ou sous une forme plus “relationnelle” à la PowerPivot.
  • Ce modèle supportera les langages de requêtage  MDX et DAX (même si évidemment, je doute d’une totale bijectivité).
  • Analysis Services fera tourner tout cela en MOLAP ou en Vertipaq (en fonction de l’implémentation)
  • L’ensemble des outils amont (ETL) et aval (SSRS, Crescent, Excel, etc.) supporteront les 2 implémentations (de façon transparente – espérons-le)

BISM

Donc 2 chemins, 2 implémentations pour une même résultat ? Comment faire le choix ?

Je le rappelle, les 2 ne sont pas incompatibles et des voies de migration existe(ront). Il a été annoncé que les cubes SSAS 2008 deviendront de facto un BI Semantic Model ; aussi, on pourra importer un modèle PowerPivot dans SSAS.

Et pour un nouveau projet ? C’est là qu’il faut attendre d’avoir un peu de recul sur les spécificités de chaque modélisation car on sait bien que la vraie vie d’un projet est remplie de contraintes.

Quoiqu’il en soit, les outils, les couches d’accès aux données, la philosophie même, seront indépendants de ce choix puisque c’est BISM qui fera l’abstraction (même si la prochaine CTP annoncée fera la séparation).
Evidemment, dans quelques années, on ne se posera plus la question Clignement d'œil

La stack BI de Microsoft reste donc cohérente et nous promet de répondre à tous les besoins décisionnels de tous les utilisateurs au final.

Proratisation des objectifs dans le temps dans Analysis Services : utilisation de SCOPE

12 mars 2011

Rappel sur la notion d’objectifs

Quand on crée des KPI, on a besoin de travailler les objectifs des indicateurs.

On peut écrire les objectifs en dur dans les KPI (dans Analysis Services via Visual Studio ou dans un outil plus adapté comme le Dashboard Designer de Performance Point). Mais bien évidemment, ce n’est pas la “bonne pratique” recommandée.

La première étape est de créer une table d’objectifs. Vu du cube, c’est une simple table de faits, ventilée sur les dimensions adéquates. Cependant, il est rare que les objectifs soient connus (et encore moins saisis) à une granularité très fine.

Problématique

Prenons l’exemple d’une mesure chiffre d’affaire. En phase de planning budgétaire, on va déterminer les objectifs de CA par mois par exemple. Il y a rarement de linéarité sur cette mesure mais il est rare qu’on descende à la journée. Smile

Admettons qu’on veuille avoir un indicateur au jour le jour car on intègre des factures quotidennement. On va avoir un problème sur notre KPI car en début de mois, nous serons loin de l’objectif et nous ne pourrons savoir si on est “dans les clous” qu’une fois le mois quasiment terminé car le seul chiffre que l’on ait est celui du mois. Difficile de piloter de cette façon.

Solution(s)

L’idée est donc de proratiser notre objectif sur la dimension temps pour obtenir l’objectif sur la granularité voulue (dans notre exemple la jour). Je vous propose donc 3 solutions dans cet article :

Remplir la table de faits à la bonne granularité

La première solution est la plus simple car il suffit de remplir directement notre table d’objectifs à la bonne granularité et donc avoir un objectif quotidien.

Le problème de cette solution est qu’il faut modifier beaucoup de lignes si je devais revoir l’objectif d’un mois par exemple. Nous avons donc un problème de praticité même si évidemment, on ne remplit la table qu’une fois et on la modifie rarement.

Ventiler les objectifs dans le DSV

Le modèle d’Analysis Services permet d’avoir une abstraction sur le DatawareHouse via le DSV (Data Source View). Cette abstraction permet d’interférer sur le modèle de données via du code T-SQL.

La seconde solution utilise cette possibilité pour changer la granularité de la table d’origine. En T-SQL, on démultiplie les lignes afin d’en obtenir une par jour et on divise l’objectif selon le nombre de jours. Je vous passe le script car je ne souhaite pas focaliser sur cette méthode.

Ventiler les objectifs dans le cube

La troisième solution est d’opérer la ventilation non pas en T-SQL mais dans le cube, en MDX.

Pour cela, il suffit tout simplement de surcharger le calcul des cellules du cube et le langage MDX nous permet de le faire simplement. On utilise l’instruction SCOPE et on redéfinit le contenu de la cellule. Cela se fait dans l’onglet Calculations d’un cube dans Visual Studio.

Scope
  ( { [Temps].[Calendrier].[Date] }, { [Measures].[Budget] } );

This =
  ([Temps].[Calendrier].Parent)
  /
  [Temps].[Calendrier].CurrentMember.Siblings.Count;

End Scope;

La première partie du script définit la portée du calcul. Jusqu’à l’instruction End Scope, on est donc borné à la mesure Budget au niveau Date, plus rien d’autre n’existe.

This= redéfinit les cellules de la portée avec un nouveau calcul. Ici, je prends le tuple parent (donc le budget du niveau mois, qui, lui, est défini) et je le divise par le nombre de dates en dessous (ie. le nombre de jours dans le mois).

J’obtiens donc une proratisation du budget mensuel par jour.

A noter qu’avec le scope, je ne perturbe pas le niveau mois car ce script passe après le calcul initial des cellules (CALCULATIONPASS, mais ça c’est une autre histoire Smile with tongue out).

Conclusion

Je n’ai pas de préférence pour l’une ou l’autre de ses méthodes. La plus technique est sans aucun celle en MDX. Toutefois, utiliser un script T-SQL dans le DSV est pragmatique car on s’appuie ensuite sur la simplicité de l’aggrégation du cube.

D’un point de vue performances, je n’ai jamais fait de tests. Je le mets dans ma TODO-List et ce sera l’occasion d’un nouvel article.

Présentation Business Intelligence au CLSO

27 février 2011

 

Jeudi dernier, j’ai été invité par le Club Logistique Sud-Ouest pour y présenter l’intérêt de la Business Intelligence en entreprise

http://www.clublogistique.fr/

L’exercice n’est pas si simple puisque je n’avais pas le droit de dire les mots Microsoft, SQL Server, Reporting Services, etc. Une vraie épreuve pour un geek.

Néanmoins j’ai rempli ma mission en parlant des usages de l’informatique décisionnelle. J’ai quand même parlé d’Excel mais là, lensemble de l’auditoire connaissait Smile.

Bref, une expérience à renouveler. Merci à Nicolas de m’avoir invité et j’espère que j’ai pu convaincre quelques (futurs) utilisateurs.

Les slides se trouvent sur ce lien.

Améliorer le tableau croisé dynamique de Excel

28 mai 2009

J’ai souvent eu des questions d’utilisateurs avancés d’Excel pour enrichir l’utilisation du tableau croisé dynamique.

Même si nativement, Excel est sans doute le meilleur client Analysis Services, il lui reste quelques lacunes, qui nécessitent souvent l’intervention des équipes informatiques. Un exemple est l’ajout de calculs simples (ratio, sommes, etc.).

Pour faire cela, on doit écrire un membre calculé en MDX qui prend en charge le calcul. Je vous avais montré comment en ajouter un dans Report Builder 2.0 dans un précédent post.

Maintenant, la même opération est possible directement dans Excel grâce à un add-in qui vient de sortir sur CodePlex : OlapPivotTableExtend

Vous pouvez trouver toutes les infos et le télécharger ici : http://www.codeplex.com/OlapPivotTableExtend.

Il y a évidemment plein d’autres fonctionnalités : recherche, bibliothèque de calcul, etc. L’une de mes préférées est sans aucun doute de pouvoir récupérer la requête MDX générée, chose qu’il fallait faire avec du code VBA ou bien un Profiler.

L’après Performance Point

23 février 2009

La rumeur a couvé dans les blogs dès le 23 janvier. Elle a vite été confirmée par un communiqué de Microsoft à ses partenaires et communautés le 26 janvier. 

“Microsoft arrête le développement du module planning de Performance Point.”

Mais comment comprendre cette décision ? Comment interpréter cette annonce ? Que faire quand on a un projet en cours, ou à venir, basé sur ce produit ? C’est ce dont nous allons discuter dans cet article en apportant un éclairage sur la roadmap de Microsoft.

 

Tout d’abord, faisons taire les rumeurs les plus folles, Microsoft n’arrête pas la Business Intelligence ! Il y a beaucoup d’autres usages que l’élaboration budgétaire dans la BI. Et bien au contraire, avec l’annonce faite sur Performance Point, Microsoft ne fait que recentrer sa stratégie. En effet, rappelons qu’au cœur de la stratégie Business Intelligence de Microsoft se trouve SQL Server (avec Analysis Services, Reporting Services, Integration Services, le Data Mining, etc.) pour la partie plate-forme décisionnelle et Microsoft Office (notamment Excel et Sharepoint) pour les interfaces utilisateurs.

Evidemment, un éditeur qui arrête un produit, c’est toujours dommageable. Mais quand cet éditeur est Microsoft, avec toute sa puissance, ses lignes de produits, il faut y voir un rééquilibrage. Comme je l’expliquais dans une précédente tribune (http://blog.djeepy1.net/post/2008/12/25/Microsoft-Connect), Microsoft est très à l’écoute de ses clients et des communautés ce qui, j’en suis persuadé, va l’obliger à communiquer plus clairement la nouvelle ligne.

Ca a commencé d’ailleurs aux TechDays, avec une session spéciale proposée par Lionel Billon (Product Manager SQL Server) pour répondre aux questions sur le sujet.

Donc que deviennent les modules de Performance Point ?

Tout d’abord, la partie M&A (Monitoring & Analytics), avec les tableaux de bord et les scorecards, passe dans le giron de Sharepoint (MOSS plus exactement) et ce module s’appellera à terme PerformancePoint Services. C’est-à-dire que si vous avez déjà un portail MOSS (en licence Enterprise CAL avec Software Assurance :-( ), vous n’aurez pas de coût supplémentaire pour mettre en place des tableaux de bord ou faire bénéficier à vos utilisateurs d’interfaces d’analyse sophistiquées. Sinon, c’est le moment d’en profiter et de creuser Excel Services, la GED, le travail collaboratif, etc. ;-).

Concernant la migration, le passage de relais et toutes les questions de mise en œuvre, vous pouvez partir sur le Dashboard Designer actuel qui permet de créer des tableaux de bord déjà sur Sharepoint. Microsoft gardera la compatibilité à terme (ou fournira un outil de migration).

Donc de ce côté, c’est plutôt une bonne nouvelle et je vous encourage à continuer dans vos projet de M&A.

Du côté de la planification et de l’élaboration budgétaire, Microsoft confirme l’arrêt du module tel qu’il est actuellement. Je reste convaincu qu’il ressortira à un moment ou à un autre dans un autre produit ou sous une autre forme mais rien n’a été confirmé. Les pistes sont un mode Open Source sur CodePlex, ou alors un module de Forecasting dans Dynamics. Moi, je parierai bien sur une intégration dans une future version d’Office car l’add-in de saisie et de spreading était pas mal.

Mais il faut se faire une raison, le produit tel qu’il est ne sera pas continué.

Mais rassurons les actuels clients : comme pour tous ses produits, Microsoft assurera un support sur Performance Point pendant 10 ans. Ce sont uniquement les nouveaux développements qui cesseront après la livraison du SP3.

 

Maintenant, une remarque plus personnelle sur ces annonces ; et cela n’engage que moi. Je suis complètement en phase avec ce recentrage. Mettre les tableaux de bord dans MOSS me semble un choix judicieux et cohérent avec le discours Sharepoint et BI global. En plus, cela va dans le sens des réductions de coûts pour le client, et c’est toujours bon à prendre.

Concernant Planning, je crois au bien fondé du produit. J’ai pu assister à une session de formation partenaires chez Microsoft et j’ai été très séduit. Cependant, un point a choqué mon esprit de technicien, c’est la facilité de créer des modèles (et donc des cubes) et la dangerosité engendrée, à savoir se retrouver avec pleins de cubes, qui n’auraient pas forcément les même données et qui pourraient entrainer une complexification de la gestion en terme de maintenance. Un des buts à la base était d’en finir avec le “Excel-Hell” mais si c’est pour se retrouver avec un “Model-Hell” (ou un Cube-Hell). Et puis Planning Server ne permet pas de résoudre la complexité d’intégration des données, à la charge de la DSI.

Donc  l’arrêt de Planning Server m’embête parce que les add-in de saisie Excel sont très bien (même s’il est déjà possible avec un peu de développement d’écrire dans un cube – fonctionnalité WriteBack – depuis 2000) et ce produit permet de vulgariser la modélisation de cube et de DataWarehouse pour un utilisateur métier. Et puis les routines de gestion des conversions de devises, de dé-doublonnage, de revenue sharing, etc. sont très intéressantes. Mais en même temps, si c’est pour mieux intégrer ces modules dans l’écosystème existant (Office, MOSS, SQL Server) moi je dis Banco.

 

J’espère avoir répondu aux questions sur l’avenir de Performance Point Server. S’il en restait, n’hésitez pas à me contacter. Je tâcherais d’y répondre ou de transmettre à qui de droit.

Reporting Services – Obtenir le numéro de semaine

10 février 2009

Comme j’ai une mauvaise mémoire et que je cherche cette expression à chaque fois. Je profite de ma tribune publique pour l’écrire et la partager.

Le but est de récupérer le numéro de la semaine d’une date dans une expression Reporting Services. En fait, je connais bien la fonction à utiliser : DatePart(). Le problème c’est que DatePart prend comme premier paramètre un code identifiant l’élément de la date à récupérer. Et le souci c’est que ce code n’est pas tout à fait le même qu’en T-SQL (qui contient une fonction DatePart aussi) et que la documentation est spartiate à cet égard.

Donc la bonne syntaxe est :

=Datepart("ww", Today())

Pour identifier la semaine, il faut utiliser le code ww (et non wk, w, week, etc.)

Reporting Services – Instruction Switch du moteur d’expressions

5 février 2009

Un petit billet pour rappeler l’utilisation de l’instruction SWITCH du moteur d’expressions de Reporting Services (que l’on soit dans Visual Studio ou dans Report Builder 2.0).

Cette instruction correspond à une instruction CASE (C#, T-SQL) ou Select (VB.NET). Sauf que contrairement aux autres langages, il n’y a pas la gestion du cas par défaut. Je vais vous montrer comment le gérer.

La syntaxe est la suivante :

Switch (
<condition 1>, <valeur 1>,
<condition 2>, <valeur 2>,
<condition 3>, <valeur 3>
)

A chaque fois qu’une condition est satisfaite, la valeur correspondante est retournée, le code étant débranchant. Evidemment, il arrive souvent que vous ne puissiez écrire tous les cas possibles et imaginables. Dans ce cas, il faut écrire la condition par défaut et voici comment je fais personnellement :

Switch (
<condition 1>, <valeur 1>,
<condition 2>, <valeur 2>,
<condition 3>, <valeur 3>,
1=1, <valeur par défaut>
)

La dernière condition étant toujours vraie, elle simule une instruction ELSE (T-SQL) ou DEFAULT (C#, VB.NET).

Report Builder 2.0 – Créer un membre calculé sans passer par SSAS

27 janvier 2009

Une demande souvent récurrente en reporting ad hoc, c’est le besoin de faire des calculs, plus ou moins simples, qui n’ont pas été prévus dans le cube. Dans ce cas, on est souvent obligé de passer par le service informatique qui n’a pas forcément le temps ou les ressources pour traiter la demande rapidement.

Dans Analysis Services, les calculs se font avec des membres caclulés (Calculated member) qui se codent en MDX et se déploient directement dans le cube. Il est possible d’écrire un membre calculé pour une requête, valable le temps de la session. Report Builder 2.0 s’appuie sur cette possibilité pour proposer à l’utilisateur d’écrire ses propres membres calculés dans le concepteur de requêtes.

Attention, la requête s’écrit en MDX, ce qui limite l’usage pour des utilisateurs non développeurs mais soulignons toutefois la présence de cette fonctionnalité facile d’accès.

Il y a une utilisation efficace de cette fonctionnalité. Dans beaucoup de requêtes multidimensionnelles, on a besoin de ramener des propriétés d’une dimension dans une optique d’affichage, mais sans croiser les dimensions et complexifier la requête dans le cube OLAP. Par défaut, on glisse la propriété dans le designer de requête. Ceci a pour effet de générer un croisement de dimension en MDX ( {PropA * PropB} ). Quand on veut remonter une propriété pour affichage, on préfère la mettre dans les mesures, ce qui est possible avec un membre calculé.

On crée donc un membre calculé et on le fait pointer sur la propriété courrante :

[Product].[Color].CurrentMember.Name

On utilisera .Name ou .Value en fonction de ce que l’on veut remonter.

 

Report Builder 2.0 – Le reporting ad hoc pour l’utilisateur final

8 janvier 2009

La nouvelle version de Report Builder qui accompagne SQL Server 2008 est l’outil parfait pour des utilisateurs non-informaticiens (Information Workers). Sans avoir besoin de Visual Studio, on peut créer des rapport riches, complexes et puissants en quelques minutes à partir d’un modèle de données existant (Report Model ou Cube OLAP) et les mettre à disposition de tous sur le serveur de rapports.

Voici un webcast qui présente cet outil puissant et intuitif dans la création d’un rapport vu et réalisé par l’utilisateur final (ie. moi dans un rôle de composition ;-) ).

Report builder 2.0 - Présentation
Report builder 2.0 – Présentation

SSIS – Processing d’un cube dynamique

8 janvier 2009

Dans un processus d’ETL qui alimente un Datawarehouse, on finit quasiment à chaque fois par un process du cube afin qu’il intègre les nouvelles données pour les utilisateurs.

La tâche Analysis Services Processing permet de faire cette action simplement ; en effet, juste un petit écran de configuration et tout fonctionne.

Cette tâche se connecte en fait à la base SSAS et envoie un batch de commande XMLA, le langage de “gestion” de Analysis Services.

Le problème est que l’assistant de configuration se base sur la base OLAP par défaut (Initial Catalog) de votre chaîne de connexion pour se configurer ; ce qui pose problème quand elle est différente entre la plate-forme de développement et celle de production, ou encore si on veut faire un package un peu générique.

Il faudra donc passer par une variable et une expression pour dynamiser cette étape :

  1. Configurer le composant pour faire le process de votre base sur votre plate-forme de développement 
  2. Ajouter une variable (avec le Package pour scope) de type String
  3. Aller dans les propriétés du composant et copier la valeur de ProcessingCommands
    <Batch><Process>
      <Object><DatabaseID>BIWise</DatabaseID></Object>
      <Type>ProcessFull</Type>
    </Process></Batch>
  4. Aller dans la propriété Expressions et en ajouter une. Elle doit ressembler à ceci (attention à l’échappement des “)
    <DatabaseID>” + @[User::OlapDatabaseID] +  “</DatabaseID>

N’oubliez pas de configurer la variable en post-déploiement ou en pré-exécution.


Suivre

Get every new post delivered to your Inbox.

Joignez-vous à 203 followers