dax for dummies / dax pour les nuls !

Post on 25-Dec-2014

682 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

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

top related