dax for dummies / dax pour les nuls !

41
DAX For Dummies Pascal Rouzé & Julien Vidal Consultants décisionnels MCNEXT Office / B2B / LOB / Entreprise www.mcnext.com

Upload: microsoft-developpeurs

Post on 25-Dec-2014

682 views

Category:

Documents


3 download

DESCRIPTION

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).

TRANSCRIPT

Page 1: DAX for dummies / DAX pour les NULS !

DAX For Dummies

Pascal Rouzé & Julien VidalConsultants décisionnels

MCNEXT

Office / B2B / LOB / Entreprise

www.mcnext.com

Page 2: DAX for dummies / DAX pour les NULS !

PRÉSENTATION

DAX For Dummies

Page 3: DAX for dummies / DAX pour les NULS !

DAX For Dummies

180 collaborateurs Depuis 2007 à Paris - Lyon - Genève

Stand 97 – Zone bleu foncé

BusinessIntelligence Talk

Biz

NETDot Share

Point

Microsoft

100 %

Page 4: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• Le DAX (Data Analysis eXpression) est le langage utilisé par :PowerPivot le modèle tabulaire dans Analysis ServicesPower View

• Il est utilisé pour créer des mesures et colonnes calculées et pour interroger des modèles tabulaires.

DAX

Page 5: DAX for dummies / DAX pour les NULS !

DAX For Dummies

Mesures et colonnes calculées Colonne calculée

Mesure calculée

Colonnes et mesures calculées

Page 6: DAX for dummies / DAX pour les NULS !

DAX For Dummies

BISM (BI Semantic Model)Third-partyapplications

Excel PowerPivot

Databases LOB Applications Files

OData Feeds Cloud Services

SharePointPower View

Data ModelMulti-

dimensionalTabular

MDX DAX

ROLAPVertiPa

qMOLA

P

Business logic and queries

Data AccessDirect Query

DAX

MDX

ReportingServices

DAX/MDXMDX

Support des modèles MD

prochainement

Page 7: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• 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, 2013

Prérequis pour utiliser PowerPivot

Page 8: DAX for dummies / DAX pour les NULS !

DAX For Dummies

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)

Page 9: DAX for dummies / DAX pour les NULS !

DAX For Dummies

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.

• Plus de 170 fonctions avec SQL Server 2012

Fonctions DAX

Page 10: DAX for dummies / DAX pour les NULS !

CAS D’UTILISATION

DAX For Dummies

Page 11: DAX for dummies / DAX pour les NULS !

Démonstration

Scénario 1 : Table Période

DAX For Dummies

Page 12: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• 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.

Scénario 1 : Table Période

Page 13: DAX for dummies / DAX pour les NULS !

DAX For Dummies

Scénario 1 : Table Période

• Solution proposée adaptéePowerPivotDAX

Page 14: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• Le modèle dans PowerPivot

Scénario 1 : Table Période

Dimensions Dimension

Fait

Mesure calculée

Colonne

Hiérarchie

Page 15: DAX for dummies / DAX pour les NULS !

DAX For Dummies

DEMO

Scénario 1 : Table Période

Page 16: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• 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() )

Scénario 1 : Table Période

Page 17: DAX for dummies / DAX pour les NULS !

Démonstration

Scénario 2 : Assurance

DAX For Dummies

Page 18: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• Le service actuariat désire connaître le dernier montant des rentes versées à chaque bénéficiaire à une date spécifique.

Scénario 2 : Assurance

Page 19: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• Solution proposée adaptéePowerPivotDAX

Scénario 2 : Assurance

Page 20: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• Le modèle de données dans PowerpivotScénario 2 : Assurance

Mesure calculée

Colonne

Dimension

Dimension

Fait

Page 21: DAX for dummies / DAX pour les NULS !

DAX For Dummies

DEMO

Scénario 2 : Assurance

Page 22: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• Mesures DAX Mesures intermédiaires :– [TotalRente]:=SUM('FaitRente'[MontantRente])

Mesure finale :– [DerniereRente]=CALCULATE([TotalRente];

LASTNONBLANK('Date'[PK_Date];[TotalRente]))– [DateDerniereRente]=LASTNONBLANK('FaitRente'[DateRenteValeur];

[TotalRente])

Scénario 2 : Assurance

Page 23: DAX for dummies / DAX pour les NULS !

Démonstration

Scénario 3 : Grande distribution

DAX For Dummies

Page 24: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• 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.

Scénario 3 : Grande distribution

Page 25: DAX for dummies / DAX pour les NULS !

DAX For Dummies

Scénario 3 : Grande distribution

• Solution proposée adaptéePowerPivotDAX

Page 26: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• Le modèle dans PowerPivot

Scénario 3 : Grande distribution

Dimensions Dimension

Fait

Mesure calculée

Colonne

Hiérarchie

Page 27: DAX for dummies / DAX pour les NULS !

DAX For Dummies

DEMO

Scénario 3 : Grande distribution

Page 28: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• 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])

Scénario 3 : Grande distribution

Page 29: DAX for dummies / DAX pour les NULS !

Démonstration

Scénario 4 : Assurance

DAX For Dummies

Page 30: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• Le service de la gestion souhaite suivre le montant des cotisations reçues :Évolution annuelleRépartition par institution

Scénario 4 : Assurance

Page 31: DAX for dummies / DAX pour les NULS !

DAX For Dummies

Scénario 4 : Assurance

• Solution proposée adaptéeSSAS en mode tabulaireDAXRapport SQL Server Reporting Services

Page 32: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• Le modèle de données dans SSAS en mode tabulaire

Scénario 4 : Assurance

Dimension

Dimension

Fait

Page 33: DAX for dummies / DAX pour les NULS !

DAX For Dummies

DEMO

Scénario 4 : Assurance

Page 34: DAX for dummies / DAX pour les NULS !

DAX For Dummies

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]))

Page 35: DAX for dummies / DAX pour les NULS !

DAX For Dummies

Requête en DAX (2/2)-- Suite de la requêteEVALUATE

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 d'avoir un paramètre année

)-- Fin FILTER,'InstitutionPrevoyance'[RangIpN],1)-- Fin TOPN

ORDER BY 'Date'[Année_Nom] DESC,'FaitCotisation'[TotalCotisation] DESC;--Fin EVALUATE

Page 36: DAX for dummies / DAX pour les NULS !

DAX For Dummies

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)

Page 37: DAX for dummies / DAX pour les NULS !

DAX For Dummies

Requête en MDX (2/2)-- Suite de la requêteMEMBER [Measures].[PourcentageTotalCotisation] AS

([Measures].[Montant Cotisation],STRTOMEMBER(@Annee))/SUM(ROOT([Institution Prevoyance]),([Measures].[Montant Cotisation],STRTOMEMBER(@Annee)))

MEMBER [Measures].[CategorieClassementIP] ASCASE

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 1FROM [Cube]

Page 38: DAX for dummies / DAX pour les NULS !

RÉFÉRENCES

DAX For Dummies

Page 39: DAX for dummies / DAX pour les NULS !

DAX For Dummies

• DAX Resource Center Wiki http://social.technet.microsoft.com/wiki/contents/articles/dax-r

esource-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/

Références

Page 40: DAX for dummies / DAX pour les NULS !

DAX For Dummies

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 ?

Quiz

Page 41: DAX for dummies / DAX pour les NULS !

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 TechDays

http://notes.mstechdays.fr