ADNia fait partie de Cofomo

En savoir plus

Les fonctions DAX définies par l’utilisateur

3 minutes
Les fonctions DAX définies par l’utilisateur

Hatem Meddeb

Architecte

Les fonctions DAX définies par l’utilisateur
Publié le : 16 mars 2026
  • Valorisation
  • Article
Partager

En septembre 2025, une nouvelle fonctionnalité en prévision a été introduite dans Power BI : les Fonctions DAX définies par l’utilisateur (UDF). Cette introduction représente une réelle révolution dans l’utilisation du langage DAX. Les développeurs ne sont plus limités aux fonctions natives du DAX et n’ont plus besoin de créer des mesures aux logiques redondantes et difficiles à maintenir. Avec les UDF, ils sont capables de définir leurs propres fonctions leur permettant ainsi d’avoir une grande flexibilité dans le développement.

1. Les avantages pour le développement DAX

  • Centralisation et réutilisabilité : Une règle métier est définie une seule fois et peut être utilisée dans plusieurs mesures, colonnes calculées, calculs visuels ou dans d’autres fonctions définies par l’utilisateur.
  • Évolution et maintenance simplifiée : La modification d’une fonction met à jour automatiquement tous les calculs dépendants.
  • Portabilité : Les fonctions peuvent être regroupées dans des bibliothèques et être partagées entre différents modèles sémantiques.
  • Lisibilité : Les mesures sont plus lisibles en remplaçant les blocs complexes par des appels à des fonctions.
  • Moins d’erreurs : L’utilisation d’indicateurs de type et de fonctions de vérification rend la fonction plus résistante aux erreurs.

2. Définition et intégration dans le modèle

Avant de pouvoir essayer les fonctions définies par l’utilisateur, il faut les activer dans la rubrique « fonctionnalités en prévision » dans les options de Power BI desktop.

Activer fonctions DAX définis par l'utilisateur-rice dans Fonctionnalités en préversion

Les fonctions peuvent être définies, soit dans la vue de requête DAX (DQV) avec la commande DEFINE, ou dans la vue TDML (Tabular Model Definition Language) avec la commande createOrReplace.

Vue de requête DAX (DQV)

La syntaxe d’une fonction définie par l’utilisateur se présente de la manière suivante :

FUNCTION <NomFonction> = ( [NomParamètre] : [Type] [SousType] [Mode], … ) =>

<Corps de la fonction>

Exemple de comment écrire la fonction DAX

Le nom de la fonction doit être unique dans le modèle, il peut contenir des points, mais pas d’espaces ou de caractères spéciaux. Il ne doit pas être le nom d’une fonction intégrée DAX ou un mot réservé.

 

Une fonction définie par l’utilisateur peut accepter zéro ou plusieurs paramètres. Le nom d’un paramètre peut contenir des caractères alphanumériques ou des traits de soulignement « _ ».  Il ne doit pas être un mot réservé.

 

Pour chaque paramètre défini dans la fonction, les indicateurs [Type] [SousType] [Mode] peuvent être spécifiés. S’ils ne le sont pas, la valeur par défaut « anyval val » sera utilisée.

 

 

Ces indicateurs sont résumés dans le tableau suivant :

Type Sous-type Mode Remarques
anyval val Accepte tout type de donnée scalaire ou une table. C’est le type par défaut.
scalar val / expr Accepte une valeur scalaire.
variant val / expr Accepte une valeur scalaire.
Int64 val / expr Accepte un nombre entier.
Decimal val / expr Accepte une décimale avec précision fixe.
Double val / expr Accepte une décimale à virgule flottante.
String val / expr Accepte un texte.
Datetime val / expr Accepte une date/heure.
Boolean val / expr Accepte True/False.
Numeric val / expr Accepte une valeur numérique.
Table val / expr Accepte uniquement une table.
Anyref expr Accepte une référence à une table, colonne, mesure ou calendrier.

L’indicateur « mode » définit la manière de passage des paramètres et influence le comportement de la fonction.

 

Si le mode est « val », le paramètre est évalué immédiatement avant l’appel de la fonction et sa valeur est figée. En revanche, s’il est « expr », il est évalué à l’intérieur du corps de la fonction et change selon le contexte interne.

 

Une fonction définie par l’utilisateur peut comporter une documentation intégrée. L’utilisation de « /// » juste au-dessus de la fonction, permet d’afficher une description dans l’infobulle lors de son utilisation. Contrairement à « // » ou « /**/ » qui servent pour les commentaires.

 

Une fois qu’une fonction définie par l’utilisateur est enregistrée dans le modèle, son appel se fait de la même façon que les fonctions intégrées DAX.

 

Toutes les fonctions définies par l’utilisateur peuvent être affichées à partir de l’explorateur de modèles sous le nœud « Fonctions » ou via la requête DMV (Dynamic Management Views)  « EVALUATE INFO.FUNCTIONS(« ORIGIN », « 2 ») »

Données -> Modèle -> Fonctions

DAX, Démonstration

3. Limitations actuelles

  • Pas de récursivité : Une fonction ne peut pas s’appeler elle-même.
  • Pas de paramètres optionnels : Tous les arguments d’une fonction sont obligatoires.
  • Sécurité OLS : Les fonctions définies par l’utilisateur n’héritent pas de la sécurité au niveau de l’objet.
  • Refactoring : Renommer un objet utilisé dans une UDF ne met pas à jour automatiquement le code de la fonction.

4. Conclusion

Avec l’arrivée des fonctions définies par l’utilisateur dans Power BI, le DAX passe d’un langage d’expression de formules vers un outil de programmation flexible et modulaire qui permet de séparer la logique métier de la couche de présentation.

 

 

Référence :

https://learn.microsoft.com/en-us/dax/best-practices/dax-user-defined-functions

 

Avec ADNia, explorez d'autres perspectives pour aller plus loin avec vos données.

Poursuivez votre exploration avec des réflexions, analyses et bonnes pratiques sur le même sujet.

Flèche
Voir plus
Flèche