De quel département êtes-vous ?

Vos informations générales

Quel est votre objectif ?

Quel est le nombre d'utilisateurs
pour votre projet ?

A quelle étape vous trouvez-vous actuellement ?

Quel est le délais de mise en place que vous souhaitez ?

Précédent

Déclenchez le signal !
Nous sommes les héros de Tableau Software, Microsoft Power BI et Alteryx ? Découvrez quelques unes de nos réalisations Let's rock ! Led Zeppelin et le basketball français en statistiques.

Maîtrisez votre temps !
Nous travaillons avec les outils Snowflake, Gathering Tools et Alteryx. Découvrez le retour de nos clientsOney Data et Keolis

Votre futur vous attend !

Découvrez notre Data Driven Journey et la solution Alteryx.

Rassemblons vos forces !

Découvrez notre Data Driven Journey et notre communauté. Renseignez-vous sur nos formation au Data-Universe.

Drive your insights!

Découvrez notre Communauté et nos réalisations Let's rock ! Led Zeppelin et la gestion d'une équipe de basketball en statistiques.

Évoluez à l'infini et au-delà !

Découvrez notre méthode exclusive : Data Driven Journey. Accédez à notre panel de formations.

23 Jan 2020.

Power BI X DAX, découvrez toutes les possibilités offertes par ce langage

Power BI X DAX, découvrez toutes les possibilités offertes par ce langage

INTroduction 

DAX (Data Analysis Expressions) est le langage utilisé dans Power BI pour créer des formules et ainsi compléter un modèle de données pour répondre à une analyse.DAX est un ensemble de fonctions, d’opérateurs et de constantes pouvant être utilisés dans une expression pour retourner une ou plusieurs valeurs.

Ce premier article a pour objectif de poser les bases pour avoir une idée des possibilités offertes par ce langage.

 Une notion importante : Colonne vs Mesure

Les fonctions DAX vont être utilisées dans les expressions de colonnes ou de mesures. Il est important de bien comprendre cette notion avant d’aller plus loin :

Power BI ft. DAX tableau

Attention, certaines fonctions DAX ne seront pas disponibles ou non optimisées en mode DirectQuery. En effet, en mode mémoire, c’est le moteur VertiPaq qui va interpréter les différentes fonctions DAX, mais en mode DirectQuery, les fonctions peuvent être traduites pour le moteur relationnel de destination qui ne prend pas en compte toutes les fonctions. Certaines fonctions ne sont tout simplement pas compatibles et d’autres peuvent être compatibles, mais poser des problèmes de performances en mode DirectQuery. Voici un lien pour en savoir plus sur la compatibilité des fonctions DAX entre les 2 modes d’accès aux données.

Découvrez la comptabilité des formules DAX en mode DirectQuery

Utilisation des variables 

L’utilisation de variables en DAX permet une meilleure lisibilité et un développement bien plus aisé, et améliore souvent la performance de l’expression.

Considérons le besoin suivant : “Est-ce que l’on a un produit dans nos stocks qui correspond à plus de 2% de nos ventes totales en termes de revenus ?

Ci-dessous deux approches différentes pour répondre à ce besoin :

Power BI ft. DAX variable

Avant le mot clé « return », on déclare nos variables et après le mot clé « return » on les utilise.
Il est ainsi plus facile de comprendre une formule complexe composée de variable. Par ailleurs, une variable peut être réutilisée indéfiniment dans la formule.

Opérations sur les dates 

Pour une utilisation optimale des fonctions temporelles dans Power BI, il est recommandé d’utiliser une table « calendrier » dans notre modèle de données.

Power BI ft. DAX table de données

Il existe plusieurs méthodes pour rajouter cette table. Soit elle existe déjà dans notre source de données, dans ce cas nous pouvons l’utiliser, sinon il est possible grâce à la fonction DAX CALENDARAUTO() de créer cette table directement dans notre modèle de données Power BI.

Voici un exemple de script permettant la création d’une table de date complète :

Power BI ft. DAX table de variable

Cette table doit être marquée comme table de date pour pouvoir utiliser les fonctions de dates.

Power BI ft. DAX table

Prenons un exemple avec la fonction TOTALYTD qui doit nous retourner une somme cumulée. Dans le cas ou notre table de date n’est pas marquée comme table de date nous obtenons ce résultat :

Power BI ft. DAX

Ici, on peut constater que la colonne TOTAL_YTD contient les mêmes valeurs que notre colonne SalesAmount.

Après avoir « marqué » la table des dates, nous obtenons le résultat attendu, nous avons bien un total cumulé :

D’autres opérations sur les dates 

  • L’expression ci-dessous ajoute deux colonnes à notre table ‘Table_name’ qui correspondent à la première entrée de date pour chaque ligne (relation 1 à plusieurs) ainsi qu’à la date actuelle, de manière à échelonner les graphiques sur une base temporelle adaptée.

Table = ADDCOLUMNS(‘Table_name’;”DateFirst”;CALCULATE(FIRSTDATE(‘Date'[Date]));”Datenow”;CALCULATE(NOW()))

  • Considérons la mesure suivante qui retourne le montant total des ventes :

Total Sales = SUM(Sales[Revenue])

Dans le but de comparer cette mesure avec les données obtenues au même moment un an auparavant, nous pouvons utiliser la fonction DAX suivante :

LY Sales = CALCULATE([Total Sales];SAMEPERIODLASTYEAR(‘Date'[Date]))

Ce type de manipulation permet d’obtenir des comparaisons année par année, comme l’illustre la visualisation suivante. Commençons par créer une mesure qui va calculer la différence entre nos 2 mesures calculées précédemment :

Sales Var = [Total Sales] – [LY Sales]

Nous obtenons le résultat suivant en traçant le total des ventes par année sur un graphique en cascade :

Power BI ft. DAX graphique cascade

Power BI dispose de sa propre fonction intégrée pour ce type de manipulation. En revanche, il est tout à fait possible d’étendre cette notion de « même période l’année dernière » à n’importe quelle autre entité temporelle répertoriée dans notre table de dates. Par exemple, considérons le champ « Mois » dans notre table de dates :

LM Sales = CALCULATE([Total Sales];DATEADD(‘Date'[Date];-1;MONTH))
 

Nous obtenons le résultat suivant, en ciblant l’année 2014 :  

Sécurité au niveau des lignes (Row Level Security)

La sécurité dans Power BI peut être géré au niveau de Power BI Services en affectant des utilisateurs dans les différents espaces de travail ou modèle de données. Mais la sécurité peut également être gérée au niveau des lignes d’une source de données. A l’image de SSAS, on va pouvoir ajouter la notion de rôle au niveau d’un rapport et y affecter utilisateurs, groupes ou listes de distribution.

Pour afficher des données en fonction des utilisateurs connectés, on va pouvoir utiliser deux fonctions DAX :

Username() : cette fonction retournera le nom d’utilisateur(domain\user-name) dans Power BI Desktop (en local). Cette fonction peut être utilisée par exemple pour récupérer le nom de domaine et/ou le nom de l’utilisateur. Sur Power BI services cette fonction retournera l’email de l’utilisateur.

UserPrincipalName() : cette fonction peut être utilisée dans une mesure ou dans la définition d’un rôle, mais ne peut pas être utilisée dans une colonne. Cette fonction retournera l’e-mail de l’utilisateur.

Bien entendu, il sera nécessaire d’avoir un modèle de données contenant des informations sur les utilisateurs pour pouvoir faire le lien avec l’utilisateur connecté.

Quelques liens utiles 

Le guide complet avec toutes les fonctions

Un outil de développement de requête DAX

2 vidéos d’introduction

3 tutoriels complets
(chercher DAX dans la zone de recherche)

Blog très complet sur l’utilisation de la sécurité dans SSAS et Power BI

La sécurité dans Power BI

A propos des auteurs

Julien Larcher / Consultant BI Actinvision
Julien Oudille / Consultant BI Actinvision