Vous êtes sur la page 1sur 41

DAX For Dummies

Pascal Rouzé & Julien Vidal


Consultants décisionnels
MCNEXT
www.mcnext.com

Office / B2B / LOB / Entreprise


PRÉSENTATION

DAX For Dummies


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


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
Colonnes et mesures calculées

Colonne calculée

Mesure calculée
DAX For Dummies
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 Services

DAX For Dummies


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

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)

DAX For Dummies


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


CAS D’UTILISATION

DAX For Dummies


Démonstration

Scénario 1 : Table Période

DAX For Dummies


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


Scénario 1 : Table Période

• Solution proposée adaptée


 PowerPivot
 DAX

DAX For Dummies


Scénario 1 : Table Période
• Le modèle dans PowerPivot
Dimensions Dimension

Mesure calculée

Colonne

Hiérarchie
Fait

DAX For Dummies


Scénario 1 : Table Période

DEMO

DAX For Dummies


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


Démonstration

Scénario 2 : Assurance

DAX For Dummies


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


Scénario 2 : Assurance

• Solution proposée adaptée


 PowerPivot
 DAX

DAX For Dummies


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

Dimension

Mesure calculée

Colonne Dimension

Fait

DAX For Dummies


Scénario 2 : Assurance

DEMO

DAX For Dummies


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


Démonstration

Scénario 3 : Grande distribution

DAX For Dummies


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


Scénario 3 : Grande distribution

• Solution proposée adaptée


 PowerPivot
 DAX

DAX For Dummies


Scénario 3 : Grande distribution
• Le modèle dans PowerPivot

Fait

Mesure calculée
Dimensions Dimension
Colonne

Hiérarchie

DAX For Dummies


Scénario 3 : Grande distribution

DEMO

DAX For Dummies


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


Démonstration

Scénario 4 : Assurance

DAX For Dummies


Scénario 4 : Assurance

• Le service de la gestion souhaite suivre le montant des


cotisations reçues :
 Évolution annuelle
 Répartition par institution

DAX For Dummies


Scénario 4 : Assurance

• Solution proposée adaptée


 SSAS en mode tabulaire
 DAX
 Rapport SQL Server Reporting Services

DAX For Dummies


Scénario 4 : Assurance
• Le modèle de données dans SSAS en mode tabulaire
Dimension
Dimension

Fait

DAX For Dummies


Scénario 4 : Assurance

DEMO

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

DAX For Dummies


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

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)

DAX For Dummies


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


RÉFÉRENCES

DAX For Dummies


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


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