DAX for dummies / DAX pour les NULS !

4 542 vues

Publié le

DAX DAX DAX ! Rien que du dax = Mise en œuvre des fonctions clés et avancées du langage DAX supportées par SSAS 2012 en mode tabulaire à partir de problématiques métiers classiques. Cas d'école et exemples concrets : le DAX par la pratique. Découvrez et maitrisez la puissance du langage DAX. Couplez le DAX avec PowerView pour explorer de façon interactive les données des modèles sémantiques BI Tabulaires et Multidimentionnels des cubes SSAS. Session coanimée par Julien Vidal et Pascal Rouzé (speakers aux techdays 2012).

  • Soyez le premier à commenter

DAX for dummies / DAX pour les NULS !

  1. 1. DAX For Dummies Pascal Rouzé & Julien Vidal Consultants décisionnels MCNEXT www.mcnext.comOffice / B2B / LOB / Entreprise
  2. 2. PRÉSENTATIONDAX For Dummies
  3. 3. 100 % 180 collaborateurs Depuis 2007 à Paris - Lyon - Genève Dot Share NET Point Business Intelligence Biz Microsoft Talk Stand 97 – Zone bleu foncéDAX For Dummies
  4. 4. DAX • Le DAX (Data Analysis eXpression) est le langage utilisé par :  PowerPivot  le modèle tabulaire dans Analysis Services  Power View • Il est utilisé pour créer des mesures et colonnes calculées et pour interroger des modèles tabulaires.DAX For Dummies
  5. 5. Colonnes et mesures calculées Colonne calculée Mesure calculéeDAX For Dummies
  6. 6. BISM (BI Semantic Model) Third-party Reporting SharePoint Excel PowerPivot applications Services Power View Support des MDX modèles MD MDX DAX/MDX DAX prochainement Multi- Data Model dimensional Tabular Business logic and queries MDX DAX MOLA Direct Data Access ROLAP VertiPaq P Query Databases LOB Applications Files OData Feeds Cloud ServicesDAX For Dummies
  7. 7. Prérequis pour utiliser PowerPivot • Système d’exploitation 32 ou 64 bits • 1 GB de RAM, 2 GB recommandés • Windows XP SP3, Vista SP1, Windows 7 & 8 • .NET Framework 3.5 SP1 • Microsoft Office 2010, 2013DAX For Dummies
  8. 8. Type de données Type Description Whole Number Valeur entière Decimal Number Nombre réel Currency Devise TRUE/FALSE Booléen Text Chaîne de caractères Date Date/Heure commençant en 1900 Binary Donnée binaire importée depuis une source de données (une image par exemple)DAX For Dummies
  9. 9. Fonctions DAX • Plus de 170 fonctions avec SQL Server 2012 Fonctions d’information ISBLANK(…), ISERROR(…), etc. Fonctions de date MONTH(…), DATESYTD(…), PARALLELPERIOD(…), etc. Fonctions de chaîne TRIM(…), CONCATENATE(…), FORMAT(…), etc. Fonctions statistiques SUM(…), SUMX(…), COUNTROWS(…), MIN(…), etc. Fonction de filtres ALL(…), FILTER(…), etc. Fonctions logiques IF(…), SWITCH(…), AND, OR, etc. Fonctions mathématiques ABS(…), EXP(…), LOG(…), etc.DAX For Dummies
  10. 10. CAS D’UTILISATIONDAX For Dummies
  11. 11. Démonstration Scénario 1 : Table PériodeDAX For Dummies
  12. 12. Scénario 1 : Table Période • Les utilisateurs veulent pouvoir effectuer rapidement des comparaisons à partir de n’importe quelle date (par rapport à l’année dernière, Year-To-Date, etc.). Pour cela, on va créer une dimension « Période » spécifique.DAX For Dummies
  13. 13. Scénario 1 : Table Période • Solution proposée adaptée  PowerPivot  DAXDAX For Dummies
  14. 14. Scénario 1 : Table Période • Le modèle dans PowerPivot Dimensions Dimension Mesure calculée Colonne Hiérarchie FaitDAX For Dummies
  15. 15. Scénario 1 : Table Période DEMODAX For Dummies
  16. 16. Scénario 1 : Table Période • Mesures DAX  Mesures intermédiaires : – [YTD Montant des commandes]:=TOTALYTD([Montant des commandes]; Date Commande[Date]) – [Montant des commandes A-1]:=CALCULATE([Montant des commandes]; SAMEPERIODLASTYEAR(Date Commande[Date])) …  Mesure finale : – [Commandes]:=IF( HASONEVALUE(Période[Période]); SWITCH(VALUES(Période[Période]); "Courant"; [Montant des commandes]; "YTD"; [YTD Montant des commandes]; "Courant A-1"; [Montant des commandes A-1]; … BLANK() ); BLANK() )DAX For Dummies
  17. 17. Démonstration Scénario 2 : AssuranceDAX For Dummies
  18. 18. Scénario 2 : Assurance • Le service actuariat désire connaître le dernier montant des rentes versées à chaque bénéficiaire à une date spécifique.DAX For Dummies
  19. 19. Scénario 2 : Assurance • Solution proposée adaptée  PowerPivot  DAXDAX For Dummies
  20. 20. Scénario 2 : Assurance • Le modèle de données dans Powerpivot Dimension Mesure calculée Colonne Dimension FaitDAX For Dummies
  21. 21. Scénario 2 : Assurance DEMODAX For Dummies
  22. 22. Scénario 2 : Assurance • Mesures DAX  Mesures intermédiaires : – [TotalRente]:=SUM(FaitRente[MontantRente])  Mesure finale : – [DerniereRente]=CALCULATE([TotalRente]; LASTNONBLANK(Date[PK_Date];[TotalRente])) – [DateDerniereRente]=LASTNONBLANK(FaitRente[DateRenteValeur]; [TotalRente])DAX For Dummies
  23. 23. Démonstration Scénario 3 : Grande distributionDAX For Dummies
  24. 24. Scénario 3 : Grande distribution • Le directeur financier d’une société de grande distribution veut pouvoir déterminer la moyenne du nombre d’articles vendus par magasin depuis le début du mois.DAX For Dummies
  25. 25. Scénario 3 : Grande distribution • Solution proposée adaptée  PowerPivot  DAXDAX For Dummies
  26. 26. Scénario 3 : Grande distribution • Le modèle dans PowerPivot Fait Mesure calculée Dimensions Dimension Colonne HiérarchieDAX For Dummies
  27. 27. Scénario 3 : Grande distribution DEMODAX For Dummies
  28. 28. Scénario 3 : Grande distribution • Mesures DAX  Mesures intermédiaires : – [Qte MTD]:=TOTALMTD(SUMX(Vente; Vente[Quantite]); Date Vente[Date]) – [Nb Magasins]:=CALCULATE(COUNTROWS(DISTINCT(Magasin[Code Magasin])); Magasin[Code Magasin] <> ""; FILTER(Vente; [Qte MTD] > 0))  Mesure finale : – [Moyenne Par Magasin]:=IF(ISBLANK([Nb Magasins]); BLANK(); [Qte MTD] / [Nb Magasins])DAX For Dummies
  29. 29. Démonstration Scénario 4 : AssuranceDAX For Dummies
  30. 30. Scénario 4 : Assurance • Le service de la gestion souhaite suivre le montant des cotisations reçues :  Évolution annuelle  Répartition par institutionDAX For Dummies
  31. 31. Scénario 4 : Assurance • Solution proposée adaptée  SSAS en mode tabulaire  DAX  Rapport SQL Server Reporting ServicesDAX For Dummies
  32. 32. Scénario 4 : Assurance • Le modèle de données dans SSAS en mode tabulaire Dimension Dimension FaitDAX For Dummies
  33. 33. Scénario 4 : Assurance DEMODAX For Dummies
  34. 34. Requête en DAX (1/2) DEFINE – Définition des mesures calculées MEASURE FaitCotisation[TotalCotisation] = SUM(FaitCotisation[MontantCotisation]) MEASURE FaitCotisation[TotalCotisationPrevYear] = CALCULATE(FaitCotisation[TotalCotisation],PREVIOUSYEAR(Date[PK_Date])) MEASURE InstitutionPrevoyance[RangIpN] = IF(ISBLANK(FaitCotisation[TotalCotisation]),BLANK(), RANKX(ALL(InstitutionPrevoyance[InstitutionPrevoyance]),FaitCotisation[TotalCotisation])) MEASURE InstitutionPrevoyance[RangIpN-1] = IF(ISBLANK(FaitCotisation[TotalCotisationPrevYear]),BLANK(), CALCULATE([RangIpN],PREVIOUSYEAR(Date[PK_Date]))) MEASURE InstitutionPrevoyance[CategorieClassementIP] = IF(InstitutionPrevoyance[RangIpN]<6,"Sous-Total Top 5",IF(InstitutionPrevoyance[RangIpN]<11,"Sous- Total Top 10","Autres IP")) MEASURE InstitutionPrevoyance[PourcentageTotalCotisation] =FaitCotisation[TotalCotisation]/ CALCULATE(FaitCotisation[TotalCotisation],ALL(InstitutionPrevoyance[InstitutionPrevoyance]))DAX For Dummies
  35. 35. Requête en DAX (2/2) -- Suite de la requête EVALUATE TOPN (10, FILTER ( ADDCOLUMNS ( SUMMARIZE(FaitCotisation,Date[Année_Nom],InstitutionPrevoyance[InstitutionPrevoyance]), "Cotisation N", FaitCotisation[TotalCotisation], "Cotisation N-1",FaitCotisation[TotalCotisationPrevYear], "Rang N",InstitutionPrevoyance[RangIpN], "Rang N-1",InstitutionPrevoyance[RangIpN-1], "ClassementCategorieIP",InstitutionPrevoyance[CategorieClassementIP], "PourcentageTotalCotisation",InstitutionPrevoyance[PourcentageTotalCotisation] ) ,Date[Année_Nom]=2012 -- pour SSRS remplacer 2012 par VALUE(@Annee) nous permet davoir un paramètre année )-- Fin FILTER ,InstitutionPrevoyance[RangIpN],1 )-- Fin TOPN ORDER BY Date[Année_Nom] DESC,FaitCotisation[TotalCotisation] DESC;--Fin EVALUATEDAX For Dummies
  36. 36. Requête en MDX (1/2) – Définition des jeux et des mesures calculées WITH SET JeuCodeIPAnneeNTrieCotisationDesc AS HEAD(EXTRACT(NONEMPTY(ORDER((EXCEPT([Institution Prevoyance].[Code Institution Prevoyance].[Code Institution Prevoyance].MEMBERS,[Institution Prevoyance].[Code Institution Prevoyance].&[Inconnu])-[Institution Prevoyance].[Code Institution Prevoyance].&)*(STRTOMEMBER(@Annee)),[Measures].[MontantCotisation] , BDESC )), [Institution Prevoyance].[Code Institution Prevoyance]),10) SET JeuCodeIPAnneeNMoins1TrieCotisationDesc AS EXTRACT(ORDER((EXCEPT([Institution Prevoyance].[Code Institution Prevoyance].[Code Institution Prevoyance].MEMBERS,[Institution Prevoyance].[Code Institution Prevoyance].&[Inconnu])-[Institution Prevoyance].[Code Institution Prevoyance].&)*(STRTOMEMBER(@AnneePrecedent)),[Measures].[Montant Cotisation] , BDESC ),[Institution Prevoyance].[Code Institution Prevoyance]) MEMBER [Measures].[RangIpAnneeN] AS Rank([Institution Prevoyance].[Code Institution Prevoyance].CurrentMember, JeuCodeIPAnneeNTrieCotisationDesc) MEMBER [Measures].[RangIpAnneeNMoins1] AS Rank([Institution Prevoyance].[Code Institution Prevoyance].CurrentMember, JeuCodeIPAnneeNMoins1TrieCotisationDesc)DAX For Dummies
  37. 37. Requête en MDX (2/2) -- Suite de la requête MEMBER [Measures].[PourcentageTotalCotisation] AS ([Measures].[Montant Cotisation],STRTOMEMBER(@Annee))/SUM(ROOT([Institution Prevoyance]),([Measures].[Montant Cotisation],STRTOMEMBER(@Annee))) MEMBER [Measures].[CategorieClassementIP] AS CASE WHEN ([Measures].[RangIpAnneeN] <6) THEN "Sous-Total Top 5" WHEN ([Measures].[RangIpAnneeN] <11) THEN "Sous-Total Top 10" ELSE "Autres IP" END MEMBER [Measures].[MontantCotisation] AS ([Measures].[Montant Cotisation],STRTOMEMBER(@Annee)) SELECT {[Measures].[MontantCotisation],[Measures].[PourcentageTotalCotisation],[Measures].[RangIpAnneeN],[Measures].[RangIpAnneeNMoins1] ,[Measures].[CategorieClassementIP]} ON 0, JeuCodeIPAnneeNTrieCotisationDesc*[Institution Prevoyance].[Institution Prevoyance].[Institution Prevoyance].MEMBERS ON 1 FROM [Cube]DAX For Dummies
  38. 38. RÉFÉRENCESDAX For Dummies
  39. 39. Références • DAX Resource Center Wiki  http://social.technet.microsoft.com/wiki/contents/articles/dax-resource- center.aspx • MSDN Library – Data Analysis Expressions Reference  http://msdn.microsoft.com/en-us/library/gg413422%28v=sql.110%29.aspx • Paul Te Braak – Blog  http://paultebraak.wordpress.com/category/dax/ • Chris Webb – Blog  http://cwebbbi.wordpress.com/category/dax/ • Marco Russo – Blog  http://sqlblog.com/blogs/marco_russo/DAX For Dummies
  40. 40. Quiz 1. Comment faire des regroupements de données en DAX ? 2. Peut-on joindre des jeux de données en DAX ? 3. Comment afficher la liste de mes produits en DAX ? 4. Sur une dimension historisée (par exemple produits), comment puis-je calculer le nombre de mes produits ?DAX For Dummies
  41. 41. Donnez votre avis ! Depuis votre smartphone, sur : http://notes.mstechdays.fr De nombreux lots à gagner toutes les heures !!! Claviers, souris et jeux Microsoft… Merci de nous aider à améliorer les TechDayshttp://notes.mstechdays.fr

×