vendredi 20 novembre 2009

Installation de PowerPivot sur un serveur sharepoint 2010

Quelques subtilités dans l'installation de PowerPivot sur une serveur sharepoint 2010. Instructions ici pour une installation standalone:
Single Server Install

DAX (Data Analysis Extensions) pour EXCEL 2010 (suite)



D'après un article publié sur http://blogs.msdn.com/powerpivot/
Remerciements à Howie Dickermann [MSFT]

DAX est un langage basé sur la syntaxe des formules d'EXCEL. Il est capable d'adresser plusieurs tables et comprend des fonctions permettant d'invoquer des bases relationnelles. Il comprend également des fonctionnalités permettant de créer dynamiquement des aggrégations, ce qui permet d'envisager d'afficher des valeurs calculées dans un TCD. Au grand bonheur des utilisateurs d'EXCEL, DAX reprend une partie des bibliothèques de fonctions d'EXCEL et beaucoup de fonctions sont identiques.

Quelques exemples:
= [First Name] & “ “ & [Last Name] formule de concaténation de texte classique
= SUM(Sales[Amount]) la fonction SUM somme sur une colonne plutôt que sur une plage de cellules
= RELATED (Product[Cost]) permet de référer la table produit dans un tableau basé sur la table SaleOrderDetails par exemple

Quand utiliser DAX ?

En partant du principe que l'utilsateur a chargé grâce à POWERPIVOT un certain nombre de tables, il est probable qu'il ne dispose pas de toutes les valeurs nécessaires dans ces tables.

Il peut être alors nécessaire de faire appel à 2 types d'objet de calcul pour poursuivre l'analyse:

les colonnes calculées et les mesures (ce vocabulaire est propre à la sémantique de l'analyse multidimensionnelle).

Colonnes calculées:

Elles sont identiques à celles d'EXCEL et il n'y a pas de nouveau concept sous jacent
Lorsque vous entrez une formule pour définir une colonne calculée, la formule est évaluée pour chaque cellule et vous disposez immédiatement du résultat.
Par exemple, si vous avez une colonne [Quantite] et une colonne [Prix], vous pouvez créer une colonne [Montant] qui est simplement [Quantite]*[Prix]
Les valeurs ainsi crées dans des colonnes calculées peuvent être exploitées dans le TCD de diverses façons. Une colonne calculée peut contenir:


  • Des valeurs numériques qui peuvent être agrégées dans la zone "Valeurs" de votre TCD
  • Des valeurs qui peuvent à leur tour constituer les lignes ou les colonnes de votre TCD
  • Des valeurs qui peuvent être utilisées dans un "slicer" pour découper le résultat de votre TCD

Mesures:

Les mesures dans Powerpivot sont des formules qui sont placées dans la zone "Valeurs" de votre TCD. Elles sont évaluées pour chaque cellule de la zone "Valeur". Chaque évaluation est le résultat résultant de la combinaison unique d'un colonne, d'un ligne et d'un filtre associé à cette cellule.

Il y a 2 types de mesures dans PowerPivot: les mesures "implicites" et les mesures "DAX".

Mesures "implicites: si vous cochez une valeur numérique dans la liste des champs disponibles de votre TCD, Powerpivot va automatiquement créer une mesure "somme de MonChamp" et cette mesure sera automatiquement placée dans la zone de valeur du TCD (voir diapo). Vous pouvez bien sûr changer le type d'agrégation en COUNT, AVERAGE, MIN ou MAX. Nous les appelerons les mesures "implicites" car il n'est pas nécessaire de sélectionner un champ (colonne) et un type d'agrégation. La formule associée à ce type de mesure est implicite et sera toujours une simple agrégation à partir d'un croisement de lignes et de colonnes.

Mesures DAX: quand vous créez une mesure en utilisant la boîte de dialogue "Nouvelle mesure", vous pouvez nommer la mesure et lui attribuer la formule DAX souhaitée. Vous n'êtes cette fois plus limité à une simple aggrégation de colonnes mais vous pouvez vous livrer à des traitements un peu plus sophistiqués.

Il faut cependant bien comprendre que lorsque vous saisissez une formule pour définir une mesure, celle ci n'est pas évaluée immédiatement. C'est lorsque votre mesure sera déposée dans la zone de valeurs de votre TCD qu'elle sera évaluée.

Bien sûr, que vous cochiez un champs pour en faire une mesure implicite ou que vous choisissiez "Nouvelle mesure" et entriez une formule DAX, votre mesure sera ajoutée à votre TCD.

Quelque exemples de colonnes calculées comprenant des fonctions DAX basiques



Le schéma de Sales dans AdvetureWorks

A partir de la table Sales, on définit une colonne [Amount] = [OrderQty] * [UnitPrice]

Vue dans Powepivot


vue dans SQL SERVER Management studio


A partir de la table Product, il est possible de récupérer le UnitCost pour l'intégrer dans notre tableau en utilisant la fonction RELATED().
UnitCost= RELATED('Product'[StandardCost]))

vue dans SQL SERVER Management studio

Il

Vue dans Powerpivot

Il existe également une fonction RELATEDTABLE() qui permet de permet de renvoyer l'ensemble des lignes liées à la table d'origine. Par exemple, à partir d'un tableau basé sur la table Product, il est possible de récupérer l'ensemble des ventes des produits:
=SUMX(RELATEDTABLE([SalesOrderDetails],SalesOrderDetails[UnitPrice])

Vue dans Powerpivot


Notons dans cet exemple que nous avans utilisé la fonction SUMX plutôt que la fonction SUM. La fonction SUMX prend 2 arguments: la table dans laquelle nous allons chercher les valeurs et une expression à retourner pour chaque ligne de cette table.

Dans notre exemple, nous retournons dans notre tableau le montant des ventes par produit dans notre TCD.

DAX ne se réfère pas aux emplacement des cellules pour référencer des données

Dans DAX, il n'existe pas de notion d'adressage de cellule pour une données. Les données ne sont pas identifiés par leur emplacement dans la feuille de calcul. DAX ne se réfère qu'aux colonnes dans la table. Plutot que de considérer une plage de cellules, il faut concevoir les données comme un jeu de tables constituées de colonnes et de lignes

Fonctions d'agrégation DAX

DAX inclut de nombreuses fonctions d'agrégations d'EXCEL dont les fonctions SUM, AVERAGE, MIN, MAX, COUNT mais ces fonctions prennent pour arguments des colonnes. Il existe également de nouvelles fonctions d'agrégation capable d'agréger n'importe quel expression à partir de lignes d'une table:

  • SUMX (Table, Expression)
  • AVERAGEX (Table, Expression)
  • COUNTAX (Table, Expression)
  • MINX (Table, Expression)
  • MAXX (Table, Expression)

Fonctions de table DAXDAX ne dispose pas de fonctions permettant de retourner une table. La formule qui définit la valeur d'une colonne calculée doit renvoyer une valeur scalaire afin de pouvoir être placée en colonne. Mais disposer de fonctions qui permettent de retourner des tables de données est très utiles surtout si vous souhaitez utiliser ces résultats intermédiaires pur les passer en arguments à d'autres fonctions. L'exemple ci dessus illustre ce mécanisme où l'on renvoie l'ensemble des lignes de la table SalesOrderDetails et qu'elles sont agrégées via la fonction SUMX pour être enfin renvoyées à la table Product.

Cette notion de fonctions renvoyant des tables peut être nouvelle pour un utilisateur d'EXCEL mais c'est un concept facile à assimiler. Quelques exemples de fonctions renvoyant des tables:

  • RelatedTable (Table) renvoie la table contenant les données liées
  • Filter (Table, Condition) renvoie la table filtrée par la condition
  • Distinct (Column) renvoie une colonne de la table par valeur distincte

En conclusion, les fonctionnalités puissantes mis en oeuvre grâce à DAX pourront dérouter les utilisateurs d'EXCEL mais ceux ci pourront rapidement en tirer bénéfice en terme de performance mais également ( et surtout) en terme de clarté et de maintenabilité de leurs multiples sources de données. Finies les macros alambiqués pour tenter d'improbables et de périlleuses jointures entre leurs feuilles de calcul. Fini le joyeux mélange entre données stockées et calculées. Fini les hasardeuses mises à jour en cascade de formules entre feuilles et fichiers. Désormais, toutes les données résident en tables dans Powerpivot avec une gestion relationnelle propre. L'interface classique d'EXCEL 2010 devient uniquement le client du fournisseur de données Powerpivot et peut être utilisé à plein régime pour l'analyse. Nul doute qu'à terme analystes et spécialistes IT s'y retrouvent.

jeudi 19 novembre 2009

Introduction aux Data Analysis Expressions (DAX) dans Powerpivot (ex Gemini)

Powerpivot (ex Gemini) et DAX étendant les possibilités des Tableaux croisés dynamiques (TCD) dans EXCEL



Les Tableaux croisés dynamiques (TCD) d’EXCEL ne sont pas nouveaux mais le fait de pouvoir les baser sur de multiples tables est une nouveauté rendu possible par l’add-in Powerpivot d’EXCEL 2010. Associé au nouveau langage d’expression DAX (Data Analysis Expression), cette nouvelle possibilité offre un outil puissant pour l’analyse des données vu du côté d'un "EXCELcolique". En effet, plus besoin d'une DSI jargonante, d'experts business intelligence et de cube Analysis Services à administrer (on peut rêver...)

Egalement fini le message "requête OLAP en cours d'exécution" lors du rafraichissement d'un TCD sur le poste client puisque tout est sur le poste client.
Pour ceux qui en douteraient encore, pas d'autre solution: testez ! j'ai donc tenté l'aventure avec une configuration très légère: portable 1Go RAM dual core Windows Seven evaluation Office 2010 Professional Plus beta et SQL SERVER 2008 R2 CTP. Je n'ai pas poussé cette pauvre machine dans ses derniers retranchements en lui assénant Sharepoint 2010.

L’exemple suivant est tiré de la base exemple AdventureWorks2008 en extrayant les tables product et salesorder ainsi que les tables associées.







Dans l’application Powerpivot lancé depuis EXCEL, sélection d’une source SQL SERVER. Il est cependant possible de choisir toute autre forme de format de données du type relationnel:






Sélectionner la table Product et cocher la case “tables associées”.


La liste des tables associées à [Product] apparait. On choisit de tous sélectionner. Idem pour les tables [SalesOrder]

L’import débute dans une fenêtre qui ressemble à la fenêtre d’exécution de SSIS. On notera au passage que les 121 317 lignes de la table SalesOrderDetails s’importe sans aucune difficulté.






Au final, l’ensemble des tables sont importés dans le classeur Powerpivot (et non dan un classeur EXCEL classique).


Créons le tableau en cliquant sur PivotTable. Et nous voici de retour sous EXCEL un TCD basé sur Product, ProductSubCategory, SalesOrderDetail et SalesTerritory:







Il ne reste plus qu'à ajouter les filtres et slicer avec une gestion de dépendance et le tour est joué. On peut ensuite publier sur Sharepoint le tableau de bord.


Si il avait fallu réaliser ce TCD sous EXCEL, il aurait fallu créer une feuille de calcul opérant une jointure entre Product, Product, ProductSubCategory, SalesOrderDetail et SalesTerritory avec les problèmes de performances et de synchronisation de cette feuille. Dans certaines situations avec des relations de type plusieurs à plusieurs, la création d’un seule feuille contenant l’ensemble des données n’est même pas possible.


Cette fois ci il est possible de renommer ces axes d’analyse et mesures et de créer ses propres formules de calcul depuis les mesures suivant une syntaxe familière aux utilisateurs avancés d'EXCEL: les DAX. Là non plus, point de MDX ni d'effort de modélisation ou de programmation.


En terme de volumétrie de données, notre fichier excel 2010 pèse 14,1 Mo


A titre de comparaison, le même fichier au format EXCEL 2007 avec les mêmes données à plat dans des feuilles pèse 14 Mo également donc je n’ai pas noté sur cet exemple d’amélioration sensible en terme de compression de données, mais peut être que la volumétrie n'est pas significative.


En terme de performance, difficile d'en juger: les temps de réponse sont imperceptibles ! là encore il faudrait tester sur de plus grosses volumétries.

En conclusion, le produit semble prometteur et surtout très performant. Il permet surtout à un non IT de pousser très loin la conception en terme d'outil d'analyse jusqu'à la réalisation d'une maquette quasi opérationnelle. Personnellement, j'irai même jusqu'à dire qu'il convient de s'interroger si il ne suffit pas de mettre les données de production à disposition de l'équipe d'analyste sur un serveur SQL et de les laisser concevoir leur tableaux de bord plutôt que de partir dans la phase de conception d'un modèle multidimensionel qui reste une phase longue, couteuse et non dénuée de risque.

En terme de stratégie commerciale, on peut également s'interroger de savoir si PowerPivot ne cannibalise pas quelque peu la suite BI SQL SERVER 2008. Après tout SQL SERVER 2008 n'est absolument pas indispensable pour bâtir avec PowerPivot et quelques vieux routiers des macros et formules EXCEL une plate forme décisionnelle tout à fait à la hauteur et ni SQL SERVER ni Analysis Services n'ont été sollicités pour réaliser cet exemple.