dax for dummies / dax pour les nuls !
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
DAX For Dummies
Pascal Rouzé & Julien VidalConsultants décisionnels
MCNEXT
Office / B2B / LOB / Entreprise
www.mcnext.com
PRÉSENTATION
DAX For Dummies
DAX For Dummies
180 collaborateurs Depuis 2007 à Paris - Lyon - Genève
Stand 97 – Zone bleu foncé
BusinessIntelligence Talk
Biz
NETDot Share
Point
Microsoft
100 %
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
DAX For Dummies
Mesures et colonnes calculées Colonne calculée
Mesure calculée
Colonnes et mesures calculées
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
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
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 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
CAS D’UTILISATION
DAX For Dummies
Démonstration
Scénario 1 : Table Période
DAX For Dummies
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
DAX For Dummies
Scénario 1 : Table Période
• Solution proposée adaptéePowerPivotDAX
DAX For Dummies
• Le modèle dans PowerPivot
Scénario 1 : Table Période
Dimensions Dimension
Fait
Mesure calculée
Colonne
Hiérarchie
DAX For Dummies
DEMO
Scénario 1 : Table Période
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
Démonstration
Scénario 2 : Assurance
DAX For Dummies
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
DAX For Dummies
• Solution proposée adaptéePowerPivotDAX
Scénario 2 : Assurance
DAX For Dummies
• Le modèle de données dans PowerpivotScénario 2 : Assurance
Mesure calculée
Colonne
Dimension
Dimension
Fait
DAX For Dummies
DEMO
Scénario 2 : Assurance
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
Démonstration
Scénario 3 : Grande distribution
DAX For Dummies
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
DAX For Dummies
Scénario 3 : Grande distribution
• Solution proposée adaptéePowerPivotDAX
DAX For Dummies
• Le modèle dans PowerPivot
Scénario 3 : Grande distribution
Dimensions Dimension
Fait
Mesure calculée
Colonne
Hiérarchie
DAX For Dummies
DEMO
Scénario 3 : Grande distribution
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
Démonstration
Scénario 4 : Assurance
DAX For Dummies
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
DAX For Dummies
Scénario 4 : Assurance
• Solution proposée adaptéeSSAS en mode tabulaireDAXRapport SQL Server Reporting Services
DAX For Dummies
• Le modèle de données dans SSAS en mode tabulaire
Scénario 4 : Assurance
Dimension
Dimension
Fait
DAX For Dummies
DEMO
Scénario 4 : Assurance
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ê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
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ê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]
RÉFÉRENCES
DAX For Dummies
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
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
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