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).
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. 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. Colonnes et mesures calculées
Colonne calculée
Mesure calculée
DAX For Dummies
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 Services
DAX For Dummies
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, 2013
DAX For Dummies
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. 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
11. Démonstration
Scénario 1 : Table Période
DAX For Dummies
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. Scénario 1 : Table Période
• Solution proposée adaptée
PowerPivot
DAX
DAX For Dummies
14. Scénario 1 : Table Période
• Le modèle dans PowerPivot
Dimensions Dimension
Mesure calculée
Colonne
Hiérarchie
Fait
DAX For Dummies
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. Démonstration
Scénario 2 : Assurance
DAX For Dummies
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
23. Démonstration
Scénario 3 : Grande distribution
DAX For Dummies
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. Scénario 3 : Grande distribution
• Solution proposée adaptée
PowerPivot
DAX
DAX For Dummies
26. Scénario 3 : Grande distribution
• Le modèle dans PowerPivot
Fait
Mesure calculée
Dimensions Dimension
Colonne
Hiérarchie
DAX For Dummies
27. Scénario 3 : Grande distribution
DEMO
DAX For Dummies
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. Démonstration
Scénario 4 : Assurance
DAX For Dummies
30. 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
31. Scénario 4 : Assurance
• Solution proposée adaptée
SSAS en mode tabulaire
DAX
Rapport SQL Server Reporting Services
DAX For Dummies
32. Scénario 4 : Assurance
• Le modèle de données dans SSAS en mode tabulaire
Dimension
Dimension
Fait
DAX For Dummies
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. 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
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. 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
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. 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. 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
Notes de l'éditeur
Intro Office / B2B / LOB / entreprise
Les blocs de couleurssontéditables et peuventreprendre la couleur du type de session qui estdonnée.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Les blocs de couleurssontéditables et peuventreprendre la couleur du type de session qui estdonnée.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Exemple de page image
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
SSAS en mode tabulaire : nouveau besoin, gestion complémentaire des accès aux données via les rôlesSSRS comme outil de restitution (pas de sharepoint, Office en version ancienne)
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Exemple de page image
Les actuaires sont chargés d’effectuer les calculs de PM (provisions mathématiques) qui entrent en jeu notamment pour les ratios de solvabilité imposés par les contraintes législatives,
SSAS en mode tabulaire : nouveau besoin, gestion complémentaire des accès aux données via les rôlesSSRS comme outil de restitution (pas de sharepoint, Office en version ancienne)
SSAS en mode tabulaire : nouveau besoin, gestion complémentaire des accès aux données via les rôlesSSRS comme outil de restitution (pas de sharepoint, Office en version ancienne)
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Exemple de page image
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.
Exemple de page image
Les blocs de couleurssontéditables et peuventreprendre la couleur du type de session qui estdonnée.
SSAS en mode tabulaire : nouveau besoin, gestion complémentaire des accès aux données via les rôlesSSRS comme outil de restitution (pas de sharepoint, Office en version ancienne)
Les blocs de couleurssontéditables et peuventreprendre la couleur du type de session qui estdonnée.
Define measure : ne dure que le temps de la requêteCalculate : permet le changement de contexte pour filtrer les donnéesIl existe d’autres fonctions pour arriver au même but (sameperiodlastyear)
Exemple de page de code pour le secteur dev
A titre indicatif
A titre indicatif
Les blocs de couleurssontéditables et peuventreprendre la couleur du type de session qui estdonnée.
Les blocs de couleurssontéditables et peuventreprendre la couleur du type de session qui estdonnée.