Fonctions définies par l’utilisateur DAX

Les fonctions définies par l’utilisateur (DAX) DAX (Data Analysis Expressions) vous permettent de empaqueter une logique DAX réutilisable et paramétrée dans vos modèles, ce qui facilite l’écriture, la maintenance et le partage de votre code DAX. Au lieu de répéter des formules pour des mesures, des colonnes calculées et des visuels, les UDF (fonctions définies par l’utilisateur) apportent une flexibilité de style de programmation à vos modèles sémantiques. Cela vous permet de définir une fois des fonctions et de les utiliser partout où le langage DAX est pris en charge.

Les fonctions DAX définies par l’utilisateur sont en disponibilité générale dans Power BI Desktop et le Service Power BI à compter de la version de juin 2026. Pour en savoir plus, consultez les fonctions définies par l’utilisateur DAX.

Pourquoi utiliser des fonctions définies par l’utilisateur ?

  • Réutilisabilité et cohérence : définissez un calcul une fois et réutilisez-le partout.
  • Facilité de maintenance : Mettez à jour la logique à un emplacement unique pour corriger ou faire évoluer les règles.
  • Création plus sûre : les indicateurs de type facultatifs et les helpers de vérification de type prennent en charge le code prévisible et résistant aux erreurs.
  • Objets de modèle de première classe : les UDFs (fonctions définies par l’utilisateur) vivent dans le modèle et peuvent être consultées dans l'explorateur de modèles.

Définir une fonction

Vous pouvez définir une fonction définie par l’utilisateur dans Power BI Desktop à l’aide de la vue de requête DAX (DQV), de la vue TMDL ou de la vue Model. Vous pouvez également afficher et modifier des fonctions définies par l’utilisateur dans le navigateur grâce à la modélisation web de Power BI Service.

Syntaxe générale

La syntaxe générale d’une fonction UDF est la suivante :

/// Optional description above the function
/// @param {ParameterType} ParameterName - ParameterDescription
/// ...
/// @returns Return description
FUNCTION <FunctionName> = ( [<ParameterName> [: [<ParameterType>] [<ParameterSubtype>] [<ParameterPassingMode>]] [= <DefaultExpression>], ...] ) => <FunctionBody>

Exemple : Fonction fiscale simple

Voici un exemple simple dans DQV qui ajoute une taxe au montant donné. Vous pouvez également évaluer les fonctions définies par l'utilisateur (UDF) dans DQV.

DEFINE
    /// AddTax takes in amount and returns amount including tax
    FUNCTION AddTax = (
            amount : NUMERIC
        ) =>
        amount * 1.1

EVALUATE
{ AddTax ( 10 ) }
// Returns 11

Une fois qu’une fonction UDF est définie, vous pouvez mettre à jour le modèle ou utiliser l’objectif de code pour ajouter la fonction à votre modèle.

Screenshot de la vue de requête DAX dans Power BI Desktop, mettant en évidence deux emplacements où vous pouvez enregistrer une fonction définie par l’utilisateur. Le premier est le modèle de mise à jour avec le bouton Modifier en haut de la vue. La deuxième est une ligne d’état dans l’éditeur de code intitulé Update model : Add new function.

Le même exemple peut être créé en mode TMDL.

createOrReplace
    /// AddTax takes in amount and returns amount including tax
    function AddTax = (amount : NUMERIC) => amount * 1.1

Une fois qu’une fonction UDF est définie, vous pouvez appliquer des modifications pour ajouter la fonction à votre modèle.

Screenshot de la vue TMDL dans Power BI Desktop, mettant en surbrillance le bouton Appliquer en haut de la vue. Ce bouton est l’emplacement où vous pouvez enregistrer une fonction définie par l’utilisateur.

Gérer les fonctions définies par l’utilisateur

Une fois défini et ajouté au modèle, vous pouvez afficher et gérer toutes les fonctions définies par l’utilisateur à partir de l’Explorateur de modèles sous le nœud Functions .

Screenshot d’un panneau explorateur de modèles dans Power BI Desktop montrant le nœud Functions développé. Trois fonctions définies par l’utilisateur sont répertoriées : AddTax, AverageOrderValue et CustomerLifetimeValue.

En mode requête DAX (DQV), vous pouvez utiliser des requêtes rapides via l’Explorateur de modèles pour définir et évaluer facilement des fonctions.

Capture d’écran d’un volet Explorateur de modèles dans Power BI Desktop affichant le nœud Functions développé. Deux menus contextuels sont ouverts : le premier propose Quick queries, Renommer, Supprimer du modèle, Masquer dans la vue Rapport, Réafficher tout, Réduire tout et Développer tout. Quick query est mis en surbrillance et sélectionné. Le deuxième menu est mis en surbrillance et propose les options Quick queries suivantes : Evaluate, Define and evaluate, Define new function et Define all functions in this model.

Dans la vue TMDL, vous pouvez glisser-déposer des fonctions sur la zone de dessin ou utiliser Script TMDL via l’Explorateur de modèle.

Une capture d’écran d’un volet de l’Explorateur de modèles dans Power BI Desktop affiche le nœud Fonctions développé. Deux menus contextuels sont ouverts : le premier propose Script vers TMDL, Renommer, Supprimer du modèle, Masquer dans l’affichage Rapport, Réafficher tout, Réduire tout et Développer tout. L’option Script vers TMDL est mise en surbrillance et sélectionnée. Le deuxième menu est mis en surbrillance et propose pour Script vers TMDL les options Onglet Script et Presse-papiers.

Si vous utilisez un Power BI Project, les fonctions sont également stockées dans functions.tmdl dans le dossier definition.

Capture d’écran de Visual Studio Code d’un projet Power BI. L’Explorateur est ouvert au dossier de modèle sémantique. 'functions.tmdl' est ouvert dans l’éditeur de code. Trois fonctions sont affichées : CustomerLifetimeValue, AverageOrderValue et AddTax.

Utiliser des fonctions définies par l’utilisateur

Après avoir ajouté une fonction UDF au modèle, vous pouvez l’utiliser partout où DAX est pris en charge. Ici, nous utilisons AddTax comme exemple.

Utilisez les fonctions définies par l’utilisateur (UDF) avec le contexte de filtre complet avec mesures.

Total Sales with Tax = AddTax ( [Total Sales] )

Appliquez des UDF à chaque ligne d’une table à l’aide de colonnes calculées.

Sales Amount with Tax = CONVERT ( AddTax ( 'Sales'[Sales Amount] ), CURRENCY )

Utilisez des fonctions définies par l’utilisateur directement dans des visuels avec des calculs visuels.

Sales Amount with Tax = AddTax ( [Sales Amount] )

Imbriquez des UDF dans des scénarios avancés.

DEFINE
    /// AddTax takes in amount and returns amount including tax
    FUNCTION AddTax = (
            amount : NUMERIC
        ) =>
        amount * 1.1

	FUNCTION AddTaxAndDiscount = (
			amount : NUMERIC,
			discount : NUMERIC
		) =>
		AddTax ( amount - discount )

EVALUATE
{ AddTaxAndDiscount ( 10, 2 ) }
// Returns 8.8

Paramètres

Les fonctions définies par l’utilisateur DAX prennent en charge zéro ou plusieurs paramètres. Pour rendre vos fonctions plus sûres et plus prévisibles, vous pouvez éventuellement spécifier des indicateurs de type de paramètre :

  • Type : quel type de valeur le paramètre accepte (AnyVal, Scalar, TableAnyRef, CalendarRef, ColumnRef, , , MeasureRefou TableRef).
  • Sous-type (uniquement pour le type scalaire) : type de données scalaire spécifique (Variant, , Int64, DecimalDouble, String, DateTimeBooleanou Numeric).
  • ParameterMode : lorsque l’argument est évalué (val pour une évaluation stricte ou expr pour une évaluation paresseuse).

Les indicateurs de type suivent le formulaire : [type] [subtype] [parameterMode]

Exemple : Conversion de type

DEFINE
    /// returns x cast to an Int64
    FUNCTION CastToInt = (
            x : SCALAR INT64 VAL
        ) =>
        x

EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5

Cet exemple utilise un type Scalar, un sous-type Int64 et un mode de paramètre val. Vous pouvez également obtenir le même effet en incluant simplement le Int64 sous-type comme indiqué dans l’exemple ci-dessous. Les chaînes non numériques entraînent une erreur.

DEFINE
    /// returns x as an Int64
    FUNCTION CastToInt = (
            x : INT64
        ) =>
        x

EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5

Vérification de type

Validez les types de paramètres à l’intérieur de votre fonction à l’aide de fonctions de vérification de type DAX intégrées telles que :

Pour obtenir la liste complète des fonctions de vérification de type disponibles, consultez les fonctions définies par l’utilisateur DAX.

Pour plus d’informations sur l’utilisation de fonctions définies par l’utilisateur, consultez les ressources suivantes :