La fonction CALCULATE DAX : problèmes et solutions

La fonction CALCULATE DAX : problèmes et solutions

Dans le blog d'aujourd'hui, nous allons explorer pourquoi vous ne devriez pas utiliser la fonction DAX pour obtenir la moyenne par catégorie et proposer des solutions alternatives pour obtenir les mêmes résultats que vous souhaitez. Vous pouvez regarder la vidéo complète de ce tutoriel au bas de ce blog .

Obtenir une moyenne par catégorie dans DAX est étrangement compliqué. En utilisant la fonction CALCULATE pour résoudre ces calculs, les nouveaux utilisateurs DAX peuvent trouver le code DAX plus difficile à comprendre qu'il ne devrait l'être. La bonne nouvelle est qu'il existe des solutions plus simples à ce problème. 

Table des matières

Présentation de la fonction CALCULATE DAX

Il y a quelques mois, j'ai présenté au pour LuckyTemplates. Cela s'appelait la contre-culture DAX où j'ai fourni quelques points de vue alternatifs sur DAX. 

L'un des principaux concerne l'utilisation de la fonction CALCULER. J'ai expliqué pourquoi vous ne devriez pas utiliser CALCULATE, surtout si vous débutez avec DAX. 

CALCULATE est une fonction très complexe à comprendre et à utiliser. Il fait certaines hypothèses sur votre modèle de données et peut vous causer beaucoup de problèmes. 

J'ai également creusé dans la mesure rapide de Microsoft pour Running Total parce qu'elle ne fonctionne pas dans des situations de table unique et qu'elle a besoin d'un schéma en étoile pour fonctionner correctement.

J'ai donc montré une alternative plus simple qui fonctionne, qu'il s'agisse d'un schéma en étoile ou d'un modèle de table unique sans avoir besoin de CALCULATE. 

CALCULER Formule DAX

Ce blog se plongera dans une mesure rapide appelée Moyenne par catégorie . Si vous êtes dans LuckyTemplates Desktop, commencez par accéder au volet Champs et créez une nouvelle mesure rapide .

La fonction CALCULATE DAX : problèmes et solutions

Dans la fenêtre Mesure rapide qui apparaîtra, choisissez Moyenne par catégorie dans la liste déroulante Calcul . Ensuite, faites glisser ? Valeur dans le champ de texte Valeur de base et Mois dans le champ Catégorie .

La fonction CALCULATE DAX : problèmes et solutions

Cliquez ensuite sur OK et vous obtiendrez un visuel qui ressemble à ceci. 

La fonction CALCULATE DAX : problèmes et solutions

Sur l'axe des x se trouvent les trimestres : Trimestre 1, 2, 3 et 4. 

Et ce que vous voulez faire est de résumer les valeurs pour chaque mois indiqué ci-dessous, puis de prendre la moyenne de ces valeurs. En bref, la moyenne par catégorie, qui est le sujet de notre blog. 

La fonction CALCULATE DAX : problèmes et solutions

Notre modèle de données pour cela est très simple. Nous avons une table avec Dates , Values ​​qui sont générées aléatoirement et Month , MonthSort et Quarters dans des colonnes séparées. 

La fonction CALCULATE DAX : problèmes et solutions

Et nous avons la même chose dans notre table de dates avec Calendar Table, Month, MonthSort et Quarter. Cela signifie que nous pouvons choisir le Trimestre ou le Mois dans le tableau des dates ou dans le premier tableau. 

La fonction CALCULATE DAX : problèmes et solutions

La bonne nouvelle avec Average Per Category est que cela fonctionne réellement, que vous ayez un modèle de table unique ou un schéma en étoile.

Dans ces visuels, nous utilisons le Trimestre du premier tableau…

La fonction CALCULATE DAX : problèmes et solutions

 … tandis que celui-ci utilise le Trimestre de notre table de dates. Cela fonctionne dans les deux sens. 

La fonction CALCULATE DAX : problèmes et solutions

Mais le problème avec la moyenne par catégorie est simplement le code DAX. 

La fonction CALCULATE DAX : problèmes et solutions

Ce code DAX est bizarre, car même si vous êtes un expert DAX, il vous confondra probablement au premier coup d'œil. Il est étrangement construit avec une instruction CALCULATE sans clause de filtre et encapsule simplement une instruction sum. 

En fait, c'est une de mes bêtes noires quand je vois des gens sur les forums qui utilisent CALCULATE qui enveloppe juste une somme sans raison. Mais dans ce cas, il y a en fait une raison.

Cela me dépasse chaque fois que je les vois parce que c'est juste une indication immédiate qu'ils n'ont aucune idée de ce qu'ils font avec la fonction CALCULATE. Je recommande donc de rester à l'écart à la place. 

Code DAX pour la moyenne par catégorie

Le code DAX ci-dessus utilise . Cette fonction n'est pas dans un segment CALCULATE, ce qui, encore une fois, la rend bizarre. Soi-disant, cette fonction est conçue pour être utilisée dans les instructions CALCULATE en fonction de sa documentation.

Le code utilise également , avec lequel je ne suis pas d'accord. Ils ne doivent jamais utiliser VALUES car les valeurs distinctes ont tendance à renvoyer une ligne vide s'il existe une ligne non correspondante. Cela peut vous causer beaucoup d'ennuis, mais c'est un sujet pour une autre vidéo.

Essentiellement, ce qui se passe ici, c'est qu'ils utilisent une fonction VALUES pour obtenir toutes nos catégories. Par exemple, au premier trimestre, il s'agit de janvier, février et mars. VALUES renvoie également une table mais ils utilisent une instruction KEEPFILTER pour la rendre valide en tant que premier paramètre dans . 

Ils conservent également la fonction CALCULATE à exécuter dans le contexte de KEEPFILTERS. En raison de la façon dont AVERAGEX fonctionne, il prend la deuxième expression et l'exécute dans le contexte de la première expression. 

Quel est le problème, alors ?

Dans l'ensemble, cela fonctionne bien, mais pas pour quelqu'un de nouveau sur DAX. Je pense que Microsoft a vraiment raté le coche lorsqu'il a créé cette mesure rapide, car les mesures rapides sont censées être destinées aux nouveaux utilisateurs de DAX.

Les mesures rapides sont une excellente idée, comme "Écrivons quelques mesures courantes avec différents calculs pour vous parce que vous êtes nouveau sur DAX et que vous ne savez pas tout ce qu'il y a à savoir sur DAX". Mais pourquoi les construiraient-ils de manière aussi étrange et compliquée ? 

Comment quelqu'un de nouveau sur DAX est-il censé jeter un coup d'œil à cela et comprendre ce qui se passe alors que même probablement les professionnels de DAX se grattent un peu la tête à ce sujet ? 

Donc, pour moi, ils ont raté une occasion en or d'aider les gens à apprendre DAX avec leurs mesures rapides en insistant pour qu'ils incluent CALCULATE et en devant sauter à travers des cerceaux pour obtenir le CALCULATE. 

La solution la plus simple

Utilisation de la fonction RÉSUMÉ

Comme je l'ai mentionné plus tôt, il existe un moyen plus efficace et plus simple de le faire.

Commencez par créer une variable de table à l'aide de VAR_Table . Ensuite, nous utiliserons pour prendre le tableau, le résumer par mois, créer une colonne Valeur et résumer nos valeurs.

Enfin, nous prendrons la moyenne de nos valeurs à l'aide de la fonction AVERAGEX

La fonction CALCULATE DAX : problèmes et solutions

Ce code est plus simple et tellement plus logique. Il n'inclut pas CALCULATE, dont vous n'avez de toute façon pas besoin. 

Vous pouvez tomber sur un article de blog critiquant SUMMARIZE. Le blog dit que la façon dont SUMMARIZE fonctionne en interne est assez compliquée.

Cela suggère également que vous pouvez vous attirer des ennuis dans un cas spécifique, mais vous ne le rencontrerez jamais. Cela ne se produirait que si votre calcul implique un calcul très complexe et un très grand tableau. Ce n'est qu'alors que SUMMARIZE vous donnera des résultats bancaux. 

C'est du moins ce que prétend l'article du blog. Et c'est bien si vous voulez éviter SUMMARIZE. Dans ce cas, utilisez plutôt la fonction .

Utilisation de la fonction GROUPBY

Personne n'a de problème avec l'utilisation de la fonction GROUPBY, alors apprenons également à l'utiliser. Encore une fois, créez une variable de table à l'aide de VAR_Table. Ensuite, nous GROUPBY Mois et créons une colonne Valeur.

Ensuite, nous appliquons en utilisant CURRENTGROUP , c'est ainsi que fonctionne GROUPBY. Résumons notre valeur et prenons à nouveau l' AVERAGEX à travers elle. 

Notre code devrait ressembler à ceci.

La fonction CALCULATE DAX : problèmes et solutions

Comparaison des résultats : fonctions SUMMARIZE vs GROUPBY vs CALCULATE DAX

Voyons maintenant si les raccourcis que nous avons renvoyés donnent les mêmes résultats. 

Comme vous pouvez le voir dans les images ci-dessous, SUMMARIZE étiqueté comme Meilleure moyenne par catégorie et GROUPBY étiqueté comme Meilleure moyenne par catégorie 2 renvoient les mêmes nombres. 

La fonction CALCULATE DAX : problèmes et solutions

Nos deux formules renvoient 3,4 K pour Q1, 3,6 K pour Q2, 3,4 K pour Q3 et 3,5 K pour Q4. Et encore une fois, ils fonctionnent dans un modèle de données de table unique en utilisant Quarters pour notre table.

Ils fonctionnent également dans un schéma en étoile où nous utilisons Quarters dans notre table de dates. 

La fonction CALCULATE DAX : problèmes et solutions


Mesures rapides - Comment les utiliser dans les modèles LuckyTemplates
à l'aide de la fonction de calcul dans LuckyTemplates
Moyens efficaces d'utiliser la fonction GROUPBY dans LuckyTemplates

Conclusion

Nous n'avons pas besoin de nous forcer dans une logique de contexte tordue juste pour obtenir CALCULATE dans nos formules. Utilisez simplement des fonctions DAX standard simples et vous pouvez obtenir les mêmes choses. 

En fait, probablement dans 80% à 90% des cas, il n'y a absolument aucune raison de s'embêter à utiliser CALCULATE pour quoi que ce soit. A la place, vous pouvez utiliser les fonctions SUMMARIZE et GROUPBY qui sont plus simples et plus logiques.

Si vous souhaitez explorer ce fichier PBIX, je l'ai déjà publié dans la Galerie des mesures rapides et nommé le fichier Better Average Per Category . Faites simplement défiler la page jusqu'en bas pour trouver le fichier PBIX que vous pouvez télécharger et vous jouez avec vous-même. 

Tous mes vœux,

Greg Decker


Quest-ce que le self en Python ? Exemples concrets

Quest-ce que le self en Python ? Exemples concrets

Qu'est-ce que le self en Python ? Exemples concrets

Comment enregistrer et charger un fichier RDS dans R

Comment enregistrer et charger un fichier RDS dans R

Vous apprendrez à enregistrer et à charger des objets à partir d'un fichier .rds dans R. Ce blog expliquera également comment importer des objets de R vers LuckyTemplates.

First N Business Days Revisited - Une solution de langage de codage DAX

First N Business Days Revisited - Une solution de langage de codage DAX

Dans ce didacticiel sur le langage de codage DAX, découvrez comment utiliser la fonction GENERATE et comment modifier dynamiquement le titre d'une mesure.

Présentez des informations à laide de la technique des visuels dynamiques multi-threads dans LuckyTemplates

Présentez des informations à laide de la technique des visuels dynamiques multi-threads dans LuckyTemplates

Ce didacticiel explique comment utiliser la technique Multi Threaded Dynamic Visuals pour créer des informations à partir de visualisations de données dynamiques dans vos rapports.

Introduction au filtrage du contexte dans LuckyTemplates

Introduction au filtrage du contexte dans LuckyTemplates

Dans cet article, je vais parcourir le contexte du filtre. Le contexte de filtrage est l'un des principaux sujets que tout utilisateur de LuckyTemplates doit d'abord connaître.

Meilleurs conseils pour utiliser les applications dans le service en ligne LuckyTemplates

Meilleurs conseils pour utiliser les applications dans le service en ligne LuckyTemplates

Je souhaite montrer comment le service en ligne LuckyTemplates Apps peut aider à gérer différents rapports et informations générés à partir de diverses sources.

Analyser les changements de marge bénéficiaire au fil du temps - Analytics avec LuckyTemplates et DAX

Analyser les changements de marge bénéficiaire au fil du temps - Analytics avec LuckyTemplates et DAX

Découvrez comment calculer les modifications de votre marge bénéficiaire à l'aide de techniques telles que la création de branches de mesure et la combinaison de formules DAX dans LuckyTemplates.

Idées de matérialisation pour les caches de données dans DAX Studio

Idées de matérialisation pour les caches de données dans DAX Studio

Ce didacticiel abordera les idées de matérialisation des caches de données et comment elles affectent les performances des DAX dans la fourniture de résultats.

Rapports dentreprise à laide de LuckyTemplates

Rapports dentreprise à laide de LuckyTemplates

Si vous utilisez encore Excel jusqu'à présent, c'est le meilleur moment pour commencer à utiliser LuckyTemplates pour vos besoins en matière de rapports commerciaux.

Quest-ce que la passerelle LuckyTemplates ? Tout ce que tu as besoin de savoir

Quest-ce que la passerelle LuckyTemplates ? Tout ce que tu as besoin de savoir

Qu'est-ce que la passerelle LuckyTemplates ? Tout ce que tu as besoin de savoir