Partager via


Vue d’ensemble de DAX

Data Analysis Expressions (DAX) est un langage d’expression de formule utilisé dans Analysis Services, Power BI et Power Pivot dans Excel. DAX les formules incluent des fonctions, des opérateurs et des valeurs pour effectuer des calculs et des requêtes avancés sur les données dans les tables et colonnes associées dans les modèles de données tabulaires.

Cet article fournit uniquement une introduction de base aux concepts les plus importants dans DAX. Il décrit DAX dans le contexte de tous les produits qui l’utilisent. Certaines fonctionnalités peuvent ne pas s’appliquer à certains produits ou cas d’usage. Reportez-vous à la documentation de votre produit décrivant son implémentation particulière de DAX.

Calculs

DAX les formules sont utilisées dans les mesures, les colonnes calculées, les tables calculées et la sécurité au niveau des lignes.

Dispositions

Les mesures sont des formules de calcul dynamiques où les résultats changent en fonction du contexte. Les mesures sont utilisées dans les rapports qui prennent en charge la combinaison et le filtrage des données de modèle à l’aide de plusieurs attributs tels qu’un rapport Power BI ou un tableau croisé dynamique Excel ou un graphique croisé dynamique. Les mesures sont créées à l’aide de la barre de formule DAX dans le concepteur de modèles.

Une formule dans une mesure peut utiliser des fonctions d’agrégation standard créées automatiquement à l’aide de la fonctionnalité Somme automatique, comme COUNT ou SUM, ou vous pouvez définir votre propre formule à l’aide de la barre de formule DAX. Les mesures nommées peuvent être utilisées comme argument pour d'autres mesures.

Si vous définissez vous-même une formule de mesure dans la barre de formule, une info-bulle affiche un aperçu du résultat (filtré) du total dans le contexte actuel. Sinon, vous ne voyez pas immédiatement le résultat du calcul. La raison pour laquelle vous ne pouvez pas voir les résultats (filtrés) du calcul immédiatement est que le résultat d’une mesure ne peut pas être déterminé sans contexte. Pour évaluer une mesure, une application cliente de création de rapports peut fournir le contexte nécessaire pour récupérer les données pertinentes pour chaque cellule, puis évaluer l’expression pour chaque cellule. Ce client peut être un tableau croisé dynamique Excel ou un graphique croisé dynamique Excel, un rapport Power BI ou une expression de table dans une DAX requête dans SQL Server Management Studio (SSMS).

Quel que soit le client, une requête distincte est exécutée pour chaque cellule dans les résultats. Autrement dit, chaque combinaison d’en-têtes de lignes et de colonnes dans un tableau croisé dynamique, ou chaque sélection de segments et de filtres dans un rapport Power BI, génère un sous-ensemble différent de données sur lequel la mesure est calculée. Par exemple, à l’aide de cette formule de mesure très simple :

Total Sales = SUM([Sales Amount])

Lorsqu’un utilisateur place la mesure TotalSales dans un rapport, puis place la colonne Catégorie de produit d’une table Product dans Filtres, la somme de Sales Amount est calculée et affichée pour chaque catégorie de produit.

Contrairement aux colonnes calculées, la syntaxe d’une mesure inclut le nom de la mesure précédant la formule. Dans l’exemple fourni, le nom Total Sales apparaît avant la formule. Une fois que vous avez créé une mesure, le nom et sa définition apparaissent dans la liste Champs de l’application cliente de création de rapports, et en fonction des perspectives et des rôles sont disponibles pour tous les utilisateurs du modèle.

Pour plus d’informations, consultez : Mesures dans Power BI Desktop, Mesures dans Analysis Services, Mesures dans Power Pivot

Colonnes calculées

Une colonne calculée est une colonne que vous ajoutez à une table existante (dans le concepteur de modèles), puis créez une DAX formule qui définit les valeurs de la colonne. Lorsqu’une colonne calculée contient une formule valide DAX , les valeurs sont calculées pour chaque ligne dès que la formule est entrée. Les valeurs sont ensuite stockées dans le modèle de données en mémoire. Par exemple, dans une table Date, lorsque la formule est entrée dans la barre de formule :

= [Calendar Year] & " Q" & [Calendar Quarter]

Une valeur pour chaque ligne de la table est calculée en prenant des valeurs de la colonne Année civile (dans la même table Date), en ajoutant un espace et la lettre majuscule Q, puis en ajoutant les valeurs de la colonne Calendar Quarter (dans la même table Date). Le résultat de chaque ligne de la colonne calculée est calculé immédiatement et apparaît, par exemple, comme 2017 Q1. Les valeurs de colonne sont recalculées uniquement si la table ou toute table associée est traitée (actualisation) ou si le modèle est déchargé de la mémoire, puis rechargé, comme lors de la fermeture et de la réouverture d’un fichier Power BI Desktop.

Pour plus d’informations, consultez : Colonnes calculées dans Power BI DesktopColonnes calculées dans Analysis ServicesColonnes calculées dans Power Pivot.

Tables calculées

Une table calculée est un objet calculé, basé sur une expression de formule, dérivée de toutes ou partie d’autres tables du même modèle. Au lieu d’interroger et de charger des valeurs dans les colonnes de votre nouvelle table à partir d’une source de données, une DAX formule définit les valeurs de la table.

Les tables calculées peuvent être utiles dans une dimension de jeu de rôles. La table Date en est un exemple, où OrderDate, ShipDate et DueDate dépendent de la relation de clé étrangère. En créant explicitement une table calculée pour ShipDate, vous obtenez une table autonome disponible pour les requêtes, aussi entièrement opérable que toute autre table. Les tables calculées sont également utiles lors de la configuration d’un ensemble de lignes filtré, ou d’un sous-ensemble ou d’un sur-ensemble de colonnes d’autres tables existantes. Cela vous permet de conserver la table d’origine intacte tout en créant des variantes de cette table pour prendre en charge des scénarios spécifiques.

Les tables calculées prennent en charge les relations avec d’autres tables. Les colonnes de votre table calculée ont des types de données, une mise en forme et peuvent appartenir à une catégorie de données. Les tables calculées peuvent être nommées, et exposées ou masquées comme n’importe quelle autre table. Les tables calculées sont calculées à nouveau si l’une des tables à partir de quoi elle extrait les données est actualisée ou mise à jour.

Pour en savoir plus, consultez : Tables calculées dans Power BI DesktopTables calculées dans Analysis Services.

Sécurité au niveau ligne

Avec la sécurité au niveau des lignes, une formule DAX doit évaluer une condition booléenne TRUE/FALSE, qui définit les lignes pouvant être retournées dans les résultats d’une requête par les membres d’un rôle donné. Par exemple, pour les membres du rôle Sales, la table Customers avec la formule suivante DAX :

= Customers[Country] = "USA"

Les membres du rôle Ventes ne pourront afficher que les données des clients aux États-Unis et les agrégats, tels que SUM ceux retournés uniquement pour les clients aux États-Unis. La sécurité au niveau des lignes n’est pas disponible dans Power Pivot dans Excel.

Lorsque vous définissez la sécurité au niveau des lignes à l’aide de la formule DAX, vous créez un jeu de lignes autorisé. Cela ne signifie pas que les autres lignes ne sont pas accessibles ; en fait, elles ne sont simplement pas retournées dans l’ensemble de lignes autorisées. D’autres rôles peuvent autoriser l’accès aux lignes exclues par la DAX formule. Si un utilisateur est membre d’un autre rôle et que la sécurité au niveau des lignes de ce rôle autorise l’accès à cet ensemble de lignes particulier, l’utilisateur peut afficher les données de cette ligne.

Les formules de sécurité au niveau des lignes s’appliquent aux lignes spécifiées ainsi qu’aux lignes associées. Si une table possède plusieurs relations, les filtres appliquent la sécurité de la relation qui est active. Les formules de sécurité au niveau des lignes sont croisées avec d’autres formules définies pour les tables associées.

Pour plus d’informations, consultez : Sécurité au niveau des lignes (RLS) avec des rôles Power BIdans Analysis Services

Requêtes

DAX les requêtes peuvent être créées et exécutées dans SQL Server Management Studio (SSMS) et des outils open source tels que DAX Studio (daxstudio.org). Contrairement aux DAX formules de calcul, qui ne peuvent être créées que dans des modèles de données tabulaires, DAX les requêtes peuvent également être exécutées sur des modèles multidimensionnels Analysis Services. DAX les requêtes sont souvent plus faciles à écrire et plus efficaces que les requêtes MDX (Multidimensional Data Expressions).

Une DAX requête est une instruction similaire à une instruction SELECT dans T-SQL. Le type de requête DAX le plus simple est une instruction evaluate. Par exemple,

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

Renvoie dans Résultats une table répertoriant uniquement les produits avec un SafetyStockLevel inférieur à 200, dans l’ordre croissant par EnglishProductName.

Vous pouvez créer des mesures dans le cadre de la requête. Les mesures existent uniquement pendant la durée de la requête. Pour en savoir plus, consultez DAX les requêtes.

Formules

DAX les formules sont essentielles pour créer des calculs dans des colonnes et des mesures calculées et sécuriser vos données à l’aide de la sécurité au niveau des lignes. Pour créer des formules pour les colonnes et les mesures calculées, utilisez la barre de formule en haut de la fenêtre du concepteur de modèles ou de l’éditeur DAX . Pour créer des formules pour la sécurité au niveau des lignes, utilisez la boîte de dialogue Gestionnaire de rôles ou Gérer les rôles. Les informations de cette section sont destinées à vous aider à comprendre les principes de base des DAX formules.

Principes de base de la formule

DAX les formules peuvent être très simples ou assez complexes. Le tableau suivant présente quelques exemples de formules simples qui peuvent être utilisées dans une colonne calculée.

Formule Définition
= TODAY() Insère la date du jour dans chaque ligne d’une colonne calculée.
= 3 Insère la valeur 3 dans chaque ligne d’une colonne calculée.
= [Column1] + [Column2] Ajoute les valeurs dans la même ligne de [Column1] et [Column2] et place les résultats dans la colonne calculée de la même ligne.

Que la formule que vous créez soit simple ou complexe, vous pouvez utiliser les étapes suivantes lors de la création d’une formule :

  1. Chaque formule doit commencer par un signe égal (=).

  2. Vous pouvez taper ou sélectionner un nom de fonction ou taper une expression.

  3. Tapez les premières lettres de la fonction ou du nom que vous souhaitez ; la fonctionnalité Saisie semi-automatique affiche alors une liste de fonctions, tables et colonnes disponibles. Appuyez sur Tab pour insérer un élément de la liste Saisie semi-automatique dans la formule.

    Vous pouvez également cliquer sur le bouton Fx pour afficher la liste des fonctions disponibles. Pour sélectionner une fonction dans la liste déroulante, utilisez les touches de direction pour mettre en surbrillance l’élément, puis cliquez sur OK pour ajouter la fonction à la formule.

  4. Fournissez les arguments à la fonction en les sélectionnant dans une liste déroulante de tables et de colonnes possibles, ou en tapant des valeurs.

  5. Vérifiez les erreurs de syntaxe : vérifiez que tous les parenthèses sont fermés et que les colonnes, les tables et les valeurs sont référencées correctement.

  6. Appuyez sur Entrée pour accepter la formule.

Remarque

Dans une colonne calculée, dès que vous entrez la formule et que la formule est validée, la colonne est remplie avec des valeurs. Dans une mesure, la définition de la mesure est enregistrée avec la table quand vous appuyez sur Entrée. Si une formule n’est pas valide, une erreur s’affiche.

Dans cet exemple, examinons une formule dans une mesure nommée Days in Current Quarter :

Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))

Cette mesure est utilisée pour créer un rapport de comparaison entre une période incomplète et la période précédente. La formule doit tenir compte de la proportion de la période qui s’est écoulée et la comparer à la même proportion de la période précédente. Dans ce cas, le ratio [Days Current Quarter to Date]/[Days in Current Quarter] donne la proportion écoulée de la période actuelle.

Cette formule contient les éléments suivants :

Élément de la formule Descriptif
Days in Current Quarter Nom de la mesure.
= Le signe égal (=) commence la formule.
COUNTROWS COUNTROWS compte le nombre de lignes dans la table Date
() La parenthèse ouverte et fermante spécifie des arguments.
DATESBETWEEN La DATESBETWEEN fonction retourne les dates entre la dernière date de chaque valeur de la colonne Date de la table Date.
'Date' Spécifie la table Date. Les tables sont entre guillemets simples.
[Date] Spécifie la colonne Date dans la table Date. Les colonnes sont entre crochets.
,
STARTOFQUARTER La STARTOFQUARTER fonction retourne la date du début du trimestre.
LASTDATE La LASTDATE fonction retourne la dernière date du trimestre.
'Date' Spécifie la table Date.
[Date] Spécifie la colonne Date dans la table Date.
,
ENDOFQUARTER La fonction ENDOFQUARTER
'Date' Spécifie la table Date.
[Date] Spécifie la colonne Date dans la table Date.

Utilisation de la saisie semi-automatique des formules

La fonctionnalité de saisie semi-automatique vous aide à entrer une syntaxe de formule valide en vous proposant des options pour chaque élément de celle-ci.

  • Vous pouvez utiliser la saisie semi-automatique d’une formule existante avec des fonctions imbriquées. Texte juste avant que le point d’insertion soit utilisé pour afficher des valeurs dans la liste déroulante, et tout le texte après que le point d’insertion reste inchangé.

  • La saisie semi-automatique n’ajoute pas la parenthèse fermante des fonctions et ne vérifie pas automatiquement la correspondance des parenthèses. Vous devez vous assurer que chaque fonction est syntactiquement correcte ou que vous ne pouvez pas enregistrer ou utiliser la formule.

Utilisation de plusieurs fonctions dans une formule

Vous pouvez imbriquer des fonctions, ce qui signifie que vous utilisez les résultats d’une fonction comme argument d’une autre fonction. Vous pouvez imbriquer jusqu’à 64 niveaux de fonctions dans des colonnes calculées. Toutefois, l’imbrication peut compliquer la création ou la correction des formules. De nombreuses fonctions sont conçues pour être utilisées uniquement comme fonctions imbriquées. Ces fonctions retournent une table, qui ne peut pas être enregistrée directement en conséquence ; elle doit être fournie en tant qu’entrée à une fonction de table. Par exemple, les fonctions SUMX, AVERAGEXet MINX toutes nécessitent une table comme premier argument.

Fonctions

Une fonction est une formule nommée dans une expression. La plupart des fonctions ont des arguments obligatoires et facultatifs, également appelés paramètres, comme entrée. Lorsque la fonction est exécutée, une valeur est retournée. DAX inclut des fonctions que vous pouvez utiliser pour effectuer des calculs à l’aide de dates et d’heures, créer des valeurs conditionnelles, travailler avec des chaînes, effectuer des recherches basées sur des relations et la possibilité d’itérer sur une table pour effectuer des calculs récursifs. Si vous êtes familiarisé avec les formules Excel, la plupart de ces fonctions apparaissent très similaires ; Toutefois, DAX les formules sont différentes de l’une des manières importantes suivantes :

  • Une DAX fonction fait toujours référence à une colonne complète ou à une table. Si vous souhaitez utiliser uniquement des valeurs particulières d’une table ou d’une colonne, vous pouvez ajouter des filtres à la formule.

  • Si vous devez personnaliser des calculs sur une base ligne par ligne, DAX fournit des fonctions qui vous permettent d’utiliser la valeur de ligne actuelle ou une valeur associée comme type de paramètre, pour effectuer des calculs qui varient selon le contexte. Pour comprendre le fonctionnement de ces fonctions, consultez Contexte dans cet article.

  • DAX inclut de nombreuses fonctions qui retournent une table, plutôt qu’une valeur. La table n’est pas affichée dans un client de création de rapports, mais elle est utilisée pour fournir une entrée à d’autres fonctions. Par exemple, vous pouvez récupérer une table, puis compter les valeurs distinctes dans celle-ci, ou calculer des sommes dynamiques entre des tables ou des colonnes filtrées.

  • DAX les fonctions incluent diverses fonctions d’intelligence temporelle . Ces fonctions vous permettent de définir ou de sélectionner des plages de dates et d’effectuer des calculs dynamiques en fonction de ces dates ou plages. Par exemple, vous pouvez comparer des sommes sur plusieurs périodes parallèles.

Fonctions d’agrégation

Les fonctions d’agrégation calculent une valeur (scalaire) telle que le nombre, la somme, la moyenne, le minimum ou le maximum pour toutes les lignes d’une colonne ou d’une table, comme défini par l’expression. Pour plus d’informations, consultez fonctions d’agrégation.

Fonctions de date et d’heure

Les fonctions DAX de date et d’heure sont similaires aux fonctions de date et d’heure dans Microsoft Excel. Toutefois, les fonctions DAX sont basées sur un type de données datetime à partir du 1er mars 1900. Pour en savoir plus, consultez les fonctions date et heure.

Fonctions de filtrage

Les fonctions de filtre dans le DAX renvoient des types de données spécifiques, recherchent des valeurs dans les tables associées et filtrent en fonction des valeurs associées. Les fonctions de recherche fonctionnent à l’aide de tables et de relations, comme une base de données. Les fonctions de filtrage vous permettent de manipuler le contexte de données pour créer des calculs dynamiques. Pour plus d’informations, consultez Fonctions de filtre.

Fonctions financières

Les fonctions financières en DAX sont utilisées dans des formules qui effectuent des calculs financiers, tels que la valeur actuelle nette et le taux de rendement. Ces fonctions sont similaires aux fonctions financières utilisées dans Microsoft Excel. Pour en savoir plus, consultez fonctions financières.

Fonctions d'information

Une fonction d’information examine la cellule ou la ligne fournie en tant qu’argument et vous indique si la valeur correspond au type attendu. Par exemple, la fonction ISERROR retourne TRUE si la valeur que vous référencez contient une erreur. Pour en savoir plus, consultez Fonctions d’informations.

Fonctions logiques

Les fonctions logiques agissent sur une expression pour retourner des informations sur les valeurs de l’expression. Par exemple, la fonction TRUE vous permet de savoir si une expression que vous évaluez retourne une valeur TRUE. Pour en savoir plus, consultez Fonctions logiques.

Fonctions mathématiques et trigonométriques

Les fonctions mathématiques en DAX sont très similaires aux fonctions mathématiques et trigonométriques Excel. Certaines différences mineures existent dans les types de données numériques utilisés par les fonctions DAX. Pour en savoir plus, consultez les fonctions mathématiques et trigonométriques.

Autres fonctions

Ces fonctions effectuent des actions uniques qui ne peuvent pas être définies par l’une des catégories auxquelles appartiennent la plupart des autres fonctions. Pour en savoir plus, consultez Autres fonctions.

Fonctions relationnelles

Les fonctions de relation dans DAX vous permettent d'extraire des valeurs d’une autre table associée, de définir une relation particulière à utiliser dans une expression et de spécifier la direction du filtrage croisé. Pour plus d’informations, consultez Fonctions de relations.

Fonctions statistiques

Les fonctions statistiques calculent les valeurs liées aux distributions statistiques et à la probabilité, telles que l’écart type et le nombre de permutations. Pour en savoir plus, consultez fonctions statistiques.

Fonctions de texte

Les fonctions de texte dans DAX sont très similaires à leurs équivalents dans Excel. Vous pouvez retourner une partie d’une chaîne, rechercher du texte dans une chaîne ou concaténer des valeurs de chaîne. DAX fournit également des fonctions permettant de contrôler les formats des dates, des heures et des nombres. Pour plus d’informations, consultez Fonctions de texte.

Fonctions d’intelligence temporelle

Les fonctions d’intelligence temporelle fournies vous DAX permettent de créer des calculs qui utilisent des connaissances intégrées sur les calendriers et les dates. En utilisant des intervalles de temps et de date en combinaison avec des agrégations ou des calculs, vous pouvez créer des comparaisons significatives sur des périodes comparables pour les ventes, l’inventaire, et ainsi de suite. Pour plus d’informations, consultez fonctions d'Intelligence Temporelle (DAX).

Fonctions de manipulation de tables

Ces fonctions retournent une table ou manipulent des tables existantes. Par exemple, à l’aide ADDCOLUMNS de vous pouvez ajouter des colonnes calculées à une table spécifiée, ou retourner une table récapitulative sur un ensemble de groupes avec la SUMMARIZECOLUMNS fonction. Pour plus d’informations, consultez les fonctions de manipulation de table.

Variables

Vous pouvez créer des variables dans une expression à l’aide VARde . VAR n’est techniquement pas une fonction, il s’agit d’un mot clé pour stocker le résultat d’une expression en tant que variable nommée. Cette variable peut ensuite être passée en tant qu’argument à d’autres expressions de mesure. Par exemple:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

Dans cet exemple, TotalQty peut être passé en tant que variable nommée à d’autres expressions. Les variables peuvent être de n’importe quel type de données scalaire, y compris les tables. L’utilisation de variables dans vos DAX formules peut être incroyablement puissante.

Types de données

Vous pouvez importer des données dans un modèle à partir de nombreuses sources de données différentes qui peuvent prendre en charge différents types de données. Lorsque vous importez des données dans un modèle, les données sont converties en un des types de données du modèle tabulaire. Lorsque les données du modèle sont utilisées dans un calcul, les données sont ensuite converties en type DAX de données pour la durée et la sortie du calcul. Lorsque vous créez une DAX formule, les termes utilisés dans la formule déterminent automatiquement le type de données valeur retourné.

DAX prend en charge les types de données suivants :

Type de données dans le modèle Type de données dans DAX Descriptif
Whole Number Valeur entière de 64 bits (huit octets) 1, 2 Nombres qui n’ont pas de décimales. Les entiers peuvent être des nombres positifs ou négatifs, mais doivent être des nombres entiers compris entre -9 223 372 036 854 775 808 (-2^63) et 9 223 372 036 854 775 807 (2^63-1).
Decimal Number Un nombre réel 64 bits (huit octets) 1, 2 Les nombres réels sont des nombres qui peuvent avoir des décimales. Les nombres réels couvrent un large éventail de valeurs :

Valeurs négatives comprises entre -1,79E +308 et -2,23E -308

Zéro

Valeurs positives de 2,23E -308 à 1,79E + 308

Toutefois, le nombre de chiffres significatifs est limité à 17 chiffres décimaux.
Boolean Booléen Soit une valeur Vrai ou Faux.
Text Chaîne Chaîne de données de caractères Unicode. Il peut s’agir de chaînes, de nombres ou de dates représentés dans un format texte.
Date Date/heure Dates et heures dans un format d’affichage date/heure pris en charge.

Les dates valides sont toutes les dates postérieures au 1er mars 1900.
Currency Monnaie Le type de données monétaire autorise les valeurs comprises entre -922 337 203 685 477,5808 à 922 337 203 685 477,5807 avec quatre chiffres décimaux de précision fixe.
Variant Variante Utilisé pour les expressions, telles que DAX les mesures, qui peuvent retourner différents types de données. Par exemple, une DAX mesure qui retourne un nombre entier ou une chaîne sera de type variant.
N/A Vide Un type de données vide est un type de données dans DAX qui représente et remplace les valeurs nulles SQL. Vous pouvez créer un vide à l’aide de la BLANK fonction et tester les vides à l’aide de la fonction logique. ISBLANK

Les modèles de données tabulaires incluent également le type de données Table comme entrée ou sortie vers de nombreuses DAX fonctions. Par exemple, la FILTER fonction prend une table comme entrée et génère une autre table qui contient uniquement les lignes qui répondent aux conditions de filtre. En combinant des fonctions de table avec des fonctions d’agrégation, vous pouvez effectuer des calculs complexes sur des jeux de données définis dynamiquement.

Bien que les types de données soient généralement définis automatiquement, il est important de comprendre les types de données et comment ils s’appliquent, en particulier, aux DAX formules. Les erreurs dans les formules ou les résultats inattendus, par exemple, sont souvent causées par l’utilisation d’un opérateur particulier qui ne peut pas être utilisé avec un type de données spécifié dans un argument. Par exemple, la formule, = 1 & 2retourne un résultat de chaîne de 12. Toutefois, = "1" + "2"la formule retourne un résultat entier de 3.

Remarque

Les calculs sur les types de données de chaîne peuvent être limités à 64 Ko.

Contexte

Le contexte est un concept important à comprendre lors de la création DAX de formules. Le contexte vous permet d’effectuer une analyse dynamique, car les résultats d’une modification de formule reflètent la sélection actuelle de ligne ou de cellule, ainsi que toutes les données associées. La compréhension du contexte et de l’utilisation efficace du contexte est essentielle pour la création d’analyses dynamiques hautes performances et la résolution des problèmes dans les formules.

Les formules des modèles tabulaires peuvent être évaluées dans un contexte différent, en fonction d’autres éléments de conception :

  • Filtres appliqués dans un tableau croisé dynamique ou un rapport
  • Filtres définis dans une formule
  • Relations spécifiées à l’aide de fonctions spéciales dans une formule

Il existe différents types de contexte : contexte de ligne, contexte de requête et contexte de filtre.

Contexte de ligne

Le contexte de ligne peut être considéré comme « la ligne actuelle ». Si vous créez une formule dans une colonne calculée, le contexte de ligne de cette formule inclut les valeurs de toutes les colonnes de la ligne active. Si la table est liée à une autre table, le contenu inclut également toutes les valeurs de l’autre table associée à la ligne active.

Par exemple, supposons que vous créez une colonne calculée, = [Freight] + [Tax]qui ajoute des valeurs à partir de deux colonnes, Cargo et Tax, à partir de la même table. Cette formule obtient automatiquement uniquement les valeurs de la ligne actuelle dans les colonnes spécifiées.

Le contexte de ligne suit également toutes les relations qui ont été définies entre les tables, y compris les relations définies dans une colonne calculée à l’aide DAX de formules, pour déterminer quelles lignes des tables associées sont associées à la ligne actuelle.

Par exemple, la formule suivante utilise la RELATED fonction pour extraire une valeur fiscale à partir d’une table associée, en fonction de la région vers laquelle la commande a été livrée. La valeur fiscale est déterminée en utilisant la valeur de la région dans la table actuelle, en recherchant la région dans la table associée, puis en obtenant le taux d’imposition de cette région à partir de la table associée.

= [Freight] + RELATED('Region'[TaxRate])

Cette formule obtient le taux d’imposition de la région actuelle à partir de la table Région et l’ajoute à la valeur de la colonne Fret. Dans DAX les formules, vous n’avez pas besoin de connaître ou de spécifier la relation spécifique qui connecte les tables.

Contexte de lignes multiples

DAX inclut des fonctions qui itèrent des calculs sur une table. Ces fonctions peuvent avoir plusieurs lignes actuelles, chacune avec son propre contexte de ligne. En essence, ces fonctions vous permettent de créer des formules qui effectuent des opérations récursives sur une boucle interne et externe.

Par exemple, supposons que votre modèle contient une table Products et une table Sales . Les utilisateurs peuvent parcourir l’ensemble de la table des ventes, qui est pleine de transactions impliquant plusieurs produits, et trouver la plus grande quantité commandée pour chaque produit au cours d'une transaction.

Avec DAX vous pouvez générer une seule formule qui retourne la valeur correcte, et les résultats sont automatiquement mis à jour chaque fois qu’un utilisateur ajoute des données aux tables.

= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])

Pour obtenir un exemple détaillé de cette formule, consultez EARLIER.

Pour résumer, la EARLIER fonction stocke le contexte de ligne de l’opération qui a précédé l’opération actuelle. À tout moment, la fonction stocke en mémoire deux jeux de contexte : un ensemble de contexte représente la ligne actuelle de la boucle interne de la formule, et un autre ensemble de contexte représente la ligne actuelle pour la boucle externe de la formule. DAX alimente automatiquement les valeurs entre les deux boucles afin que vous puissiez créer des agrégats complexes.

Contexte de requête

Le contexte de requête fait référence au sous-ensemble de données qui est implicitement récupéré pour une formule. Par exemple, lorsqu’un utilisateur place une mesure ou un champ dans un rapport, le moteur examine les en-têtes de ligne et de colonne, les segments et les filtres de rapport pour déterminer le contexte. Les requêtes nécessaires sont ensuite exécutées sur des données de modèle pour obtenir le sous-ensemble correct de données, effectuer les calculs définis par la formule, puis remplir les valeurs dans le rapport.

Étant donné que le contexte change en fonction de l’emplacement de la formule, les résultats de la formule peuvent également changer. Par exemple, supposons que vous créez une formule qui additionne les valeurs dans la colonne Profit de la table Sales : = SUM('Sales'[Profit]). Si vous utilisez cette formule dans une colonne calculée dans la table Sales , les résultats de la formule seront identiques pour la table entière, car le contexte de requête de la formule est toujours l’ensemble du jeu de données de la table Sales . Les résultats auront des bénéfices pour toutes les régions, tous les produits, toutes les années, et ainsi de suite.

Toutefois, les utilisateurs ne souhaitent généralement pas voir le même résultat des centaines de fois, mais veulent plutôt obtenir le bénéfice d’une année particulière, d’un pays particulier, d’un produit particulier ou d’une combinaison de ces résultats, puis obtenir un total général.

Dans un rapport, le contexte peut être changé par le filtrage, l’ajout ou la suppression de champs et l’utilisation de segments. Pour chaque modification, le contexte de requête dans lequel la mesure est évaluée. Par conséquent, la même formule, utilisée dans une mesure, est évaluée dans un contexte de requête différent pour chaque cellule.

Contexte de filtre

Le contexte de filtre est l’ensemble de valeurs autorisées dans chaque colonne ou dans les valeurs récupérées à partir d’une table associée. Les filtres peuvent être appliqués à la colonne du Bureau ou dans la couche de présentation (rapports et tableaux croisés dynamiques). Les filtres peuvent également être définis explicitement par des expressions de filtre dans la formule.

Le contexte de filtre est ajouté lorsque vous spécifiez des contraintes de filtre sur l’ensemble de valeurs autorisées dans une colonne ou une table, à l’aide d’arguments pour une formule. Le contexte de filtre s’applique à d’autres contextes, tels que le contexte de ligne ou le contexte de requête.

Dans les modèles tabulaires, il existe de nombreuses façons de créer un contexte de filtre. Dans le contexte des clients consommateurs du modèle, comme les rapports Power BI, les utilisateurs peuvent créer des filtres instantanément en ajoutant des segments ou des filtres de rapport sur les en-têtes de ligne et de colonne. Vous pouvez également spécifier des expressions de filtre directement dans la formule, pour spécifier des valeurs associées, pour filtrer les tables utilisées en tant qu’entrées ou pour obtenir dynamiquement le contexte des valeurs utilisées dans les calculs. Vous pouvez également effacer ou effacer de manière sélective les filtres sur des colonnes particulières. Cela est très utile lors de la création de formules qui calculent les totaux généraux.

Pour en savoir plus sur la création de filtres dans des formules, consultez la FILTER fonction (DAX). Pour obtenir un exemple de la façon dont les filtres peuvent être effacés pour créer des totaux généraux, consultez la ALL fonction (DAX).

Pour obtenir des exemples d’effacement sélectif et d’application de filtres dans des formules, consultez ALLEXCEPT.

Détermination du contexte dans les formules

Lorsque vous créez une DAX formule, la formule est d’abord testée pour une syntaxe valide, puis testée pour vous assurer que les noms des colonnes et tables incluses dans la formule sont disponibles dans le contexte actuel. Si une colonne ou une table spécifiée par la formule est introuvable, une erreur est retournée.

Le contexte pendant les opérations de validation (et de recalcul) est déterminé comme décrit dans les sections précédentes, à l’aide des tables disponibles dans le modèle, des relations entre les tables et tous les filtres qui ont été appliqués.

Par exemple, si vous venez d’importer des données dans une nouvelle table et qu’elles ne sont liées à aucune autre table (et que vous n’avez pas appliqué de filtres), le contexte actuel est l’ensemble des colonnes de la table. Si la table est liée par des relations à d’autres tables, le contexte actuel inclut les tables associées. Si vous ajoutez une colonne de la table à un rapport qui a des segmenteurs et peut-être certains filtres de rapport, le contexte de la formule est le sous-ensemble de données dans chaque cellule du rapport.

Le contexte est un concept puissant qui peut également rendre difficile la résolution des problèmes de formules. Nous vous recommandons de commencer par des formules et des relations simples pour voir le fonctionnement du contexte. La section suivante fournit quelques exemples de la façon dont les formules utilisent différents types de contexte pour retourner dynamiquement les résultats.

Opérateurs

Le DAX langage utilise quatre types différents d’opérateurs de calcul dans les formules :

  • Opérateurs de comparaison pour comparer des valeurs et retourner une TRUEvaleur logique 'FALSE'.
  • Opérateurs arithmétiques pour effectuer des calculs arithmétiques qui retournent des valeurs numériques.
  • Opérateurs de concaténation de texte pour joindre deux chaînes de texte ou plus.
  • Opérateurs logiques qui combinent deux expressions ou plus pour retourner un résultat unique.

Pour plus d’informations sur les opérateurs utilisés dans DAX les formules, consultez DAX les opérateurs.

Utilisation de tables et de colonnes

Les tableaux des modèles de données tabulaires ressemblent à des tableaux Excel, mais sont différents de la façon dont ils fonctionnent avec des données et des formules :

  • Les formules fonctionnent uniquement avec des tables et des colonnes, et non avec des cellules individuelles, des références de plage ou des tableaux.
  • Les formules peuvent utiliser des relations pour obtenir des valeurs à partir de tables associées. Les valeurs récupérées sont toujours liées à la valeur de ligne actuelle.
  • Vous ne pouvez pas avoir de données irrégulières ou « non alignées » comme dans une feuille de calcul Excel. Chaque ligne d’une table doit contenir le même nombre de colonnes. Toutefois, vous pouvez avoir des valeurs vides dans certaines colonnes. Les tables de données Excel et les tables de données de modèle tabulaire ne sont pas interchangeables.
  • Étant donné qu’un type de données est défini pour chaque colonne, chaque valeur de cette colonne doit être du même type.

Référence aux tables et colonnes dans les formules

Vous pouvez faire référence à n’importe quelle table et colonne à l’aide de son nom. Par exemple, la formule suivante illustre comment référencer des colonnes de deux tables avec leur nom complet :


= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])

Lorsqu’une formule est évaluée, le concepteur de modèles vérifie d’abord la syntaxe générale, puis vérifie les noms des colonnes et des tables que vous fournissez par rapport aux colonnes et tables possibles dans le contexte actuel. Si le nom est ambigu ou si la colonne ou la table est introuvable, vous obtenez une erreur sur votre formule (une chaîne #ERROR au lieu d’une valeur de données dans les cellules où l’erreur se produit). Pour en savoir plus sur les exigences d’affectation de noms pour les tables, les colonnes et d’autres objets, consultez Exigences de nommage dans laDAX syntaxe.

Relations entre tables

En créant des relations entre les tables, vous pouvez utiliser des valeurs associées dans d’autres tables dans les calculs. Par exemple, vous pouvez utiliser une colonne calculée pour déterminer tous les enregistrements d’expédition liés au revendeur actuel, puis additionner les coûts d’expédition pour chacun d’eux. Toutefois, dans de nombreux cas, une relation peut ne pas être nécessaire. Vous pouvez utiliser la LOOKUPVALUE fonction dans une formule pour retourner la valeur dans result_columnName pour la ligne qui répond aux critères spécifiés dans les arguments search_column et search_value .

De nombreuses DAX fonctions nécessitent qu’une relation existe entre les tables, ou entre plusieurs tables, afin de localiser les colonnes que vous avez référencées et de retourner les résultats qui sont logiques. D’autres fonctions tenteront d’identifier la relation ; Toutefois, pour de meilleurs résultats, vous devez toujours créer une relation dans la cas où cela est possible. Les modèles de données tabulaires prennent en charge plusieurs relations entre les tables. Pour éviter la confusion ou les résultats incorrects, une seule relation à la fois est désignée comme relation active, mais vous pouvez modifier la relation active si nécessaire pour parcourir différentes connexions dans les données dans les calculs. USERELATIONSHIP la fonction peut être utilisée pour spécifier une ou plusieurs relations à utiliser dans un calcul spécifique.

Il est important d’observer ces règles de conception de formule lors de l’utilisation de relations :

  • Lorsque les tables sont connectées par une relation, vous devez vérifier que les deux colonnes utilisées comme clés ont des valeurs qui correspondent. L’intégrité référentielle n’est pas appliquée. Il est donc possible d’avoir des valeurs non correspondantes dans une colonne clé et de créer une relation. Si cela se produit, vous devez savoir que les valeurs vides ou les valeurs non correspondantes peuvent affecter les résultats des formules.

  • Lorsque vous liez des tables dans votre modèle à l’aide de relations, vous agrandissez l’étendue ou le contexte dans lequel vos formules sont évaluées. Les modifications dans le contexte résultant de l’ajout de nouvelles tables, de nouvelles relations ou de modifications dans la relation active peuvent entraîner la modification de vos résultats de manière à ce que vous ne puissiez pas anticiper. Pour en savoir plus, consultez Contexte dans cet article.

Processus et actualisation

Le processus et le recalcul sont deux opérations distinctes mais connexes. Vous devez bien comprendre ces concepts lors de la conception d’un modèle qui contient des formules complexes, de grandes quantités de données ou de données obtenues à partir de sources de données externes.

Le processus (actualisation) met à jour les données d’un modèle avec de nouvelles données à partir d’une source de données externe.

Le recalcul est le processus de mise à jour des résultats des formules pour refléter les modifications apportées aux formules elles-mêmes et pour refléter les modifications apportées aux données sous-jacentes. Le recalcul peut affecter les performances de la manière suivante :

  • Les valeurs d’une colonne calculée sont calculées et stockées dans le modèle. Pour mettre à jour les valeurs dans la colonne calculée, vous devez traiter le modèle en choisissant l’une de ces trois commandes de traitement : Traiter entièrement, Traiter les données ou Traiter le recalcul. Le résultat de la formule doit toujours être recalculé pour l’intégralité de la colonne, chaque fois que vous modifiez la formule.

  • Les valeurs calculées par une mesure sont évaluées dynamiquement chaque fois qu’un utilisateur ajoute la mesure à un tableau croisé dynamique ou ouvre un rapport. Quand l’utilisateur change le contexte, les valeurs retournées par la mesure changent également. Les résultats de la mesure reflètent toujours le contenu le plus récent dans le cache mémoire.

Le traitement et le recalcul n’ont aucun effet sur les formules de sécurité au niveau des lignes, sauf si le résultat d’un recalcul retourne une valeur différente, ce qui rend la ligne interrogeable ou non interrogeable par les membres du rôle.

Mises à jour

DAX est constamment amélioré. Les fonctions nouvelles et mises à jour sont publiées avec la prochaine mise à jour disponible, généralement mensuelle. Les services sont mis à jour en premier, suivis d’applications installées comme Power BI Desktop, Excel, SQL Server Management Studio (SSMS) et l’extension de projet Analysis Services pour Visual Studio (SSDT). SQL Server Analysis Services est mis à jour avec la prochaine mise à jour cumulative. Les nouvelles fonctions sont d’abord annoncées et décrites dans la documentation de référence des fonctions DAX, en même temps que les mises à jour de Power BI Desktop.

Toutes les fonctions ne sont pas prises en charge dans les versions antérieures de SQL Server Analysis Services et Excel.

Résolution des problèmes

Si vous obtenez une erreur lors de la définition d’une formule, la formule peut contenir une erreur syntaxique, une erreur sémantique ou une erreur de calcul.

Les erreurs syntactiques sont les plus simples à résoudre. Ils impliquent généralement une parenthèse ou une virgule manquantes.

L’autre type d’erreur se produit lorsque la syntaxe est correcte, mais la valeur ou une colonne référencée n’est pas logique dans le contexte de la formule. Ces erreurs sémantiques et de calcul peuvent être provoquées par l’un des problèmes suivants :

  • La formule fait référence à une colonne, une table ou une fonction non existante.
  • La formule semble correcte, mais lorsque le moteur de données récupère les données, il trouve une incompatibilité de type et génère une erreur.
  • La formule transmet un nombre ou un type incorrect d’arguments à une fonction.
  • La formule fait référence à une autre colonne qui a une erreur, et par conséquent ses valeurs ne sont pas valides.
  • La formule fait référence à une colonne qui n’a pas été traitée, ce qui signifie qu’elle a des métadonnées, mais aucune donnée réelle à utiliser pour les calculs.

Dans les quatre premiers cas, DAX signale la colonne entière qui contient la formule non valide. Dans le dernier cas, DAX grise la colonne pour indiquer que la colonne est dans un état non traité.

Applications et outils

Power BI Desktop

Power BI Desktop

Power BI Desktop est une application gratuite de modélisation et de création de rapports de données. Le concepteur de modèles inclut un DAX éditeur pour créer des DAX formules de calcul.

Power Pivot dans Excel

Power Pivot dans Excel

Le concepteur de modèles Power Pivot dans Excel inclut un DAX éditeur pour créer DAX des formules de calcul.

Visual Studio

Visual Studio

Visual Studio avec l’extension de projets Analysis Services (VSIX) est utilisé pour créer des projets de modèle Analysis Services. Le concepteur de modèle tabulaire, installé avec l’extension de projets, inclut un DAX éditeur.

SQL Server Management Studio

SQL Server Management Studio

SQL Server Management Studio (SSMS) est un outil essentiel pour l’utilisation d’Analysis Services. SSMS inclut un DAX éditeur de requête pour interroger les modèles tabulaires et multidimensionnels.

DAX Studio

DAX Icône Studio

DAX Studio est un outil client open source permettant de créer et d’exécuter DAX des requêtes sur Analysis Services, Power BI Desktop et Power Pivot dans les modèles Excel.

Éditeur tabulaire

Icône De l’éditeur tabulaire

L’éditeur tabulaire est un outil open source qui fournit une vue intuitive et hiérarchique de chaque objet dans les métadonnées du modèle tabulaire. L’éditeur tabulaire inclut un DAX éditeur avec mise en surbrillance de la syntaxe, qui permet de modifier facilement les mesures, les colonnes calculées et les expressions de table calculées.

Ressources d’apprentissage

Lors de l’apprentissage DAX, il est préférable d’utiliser l’application que vous utiliserez pour créer vos modèles de données. Analysis Services, Power BI Desktop et Power Pivot dans Excel ont tous des articles et tutoriels qui incluent des leçons sur la création de mesures, de colonnes calculées et de filtres de lignes à l’aide DAXde . Voici quelques ressources supplémentaires :

Videos

Utiliser DAX dans le parcours d’apprentissage Power BI Desktop.

Le Guide Définitif de DAX par Alberto Ferrari et Marco Russo (Microsoft Press). Désormais dans sa deuxième édition, ce guide complet fournit des notions de base sur les techniques innovantes de haute performance pour les modélisateurs de données débutants et les professionnels de la BI.

Image du livre Guide complet de DAX

Communauté

DAX a une communauté dynamique toujours prête à partager son expertise. Microsoft Power BI Community dispose d’un forum de discussion spécial uniquement pour DAX, DAX commandes et conseils.