Mesurer dans LuckyTemplates : conseils et techniques doptimisation

Mesurer dans LuckyTemplates : conseils et techniques doptimisation

Dans ce didacticiel, vous apprendrez à optimiser une mesure dans LuckyTemplates. L'optimisation des mesures dans votre rapport améliore les performances de vos codes en produisant des informations et des données précieuses. Vous découvrirez également les différentes méthodes d'évaluation et comment les appliquer pour optimiser votre rapport. Vous pouvez regarder la vidéo complète de ce tutoriel au bas de ce blog.

Table des matières

1. Analyser les performances du code

Dans cet exemple, vous devez optimiser ce rapport :

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Voici le modèle de données que vous allez utiliser :

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

La table Jobs contient toutes les informations concernant n'importe quel travail qui a été effectué au cours d'une période donnée.

Ce tableau est la base de toutes les mesures que vous allez optimiser :

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Tout d'abord, vous devez tester les performances du rapport.

Accédez à l' onglet Affichage et choisissez Analyseur de performances . Cliquez ensuite sur Démarrer l'enregistrement et actualiser les visuels . Attendez que l'analyseur rende le visuel.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Une fois cela fait, déroulez la liste Répartition des incitations et cliquez sur Copier la requête .

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Ensuite, sélectionnez Outils externes pour accéder au studio DAX et examinez le code généré par LuckyTemplates.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Ensuite, collez la requête copiée dans l'espace de travail.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Variables dans la mesure

La première variable est DateClosed qui est le slicer sur le tableau de bord. Il utilise une colonne de la table Fact pour obtenir les valeurs de certaines périodes dans le segment.

La variable suivante est JobLost qui vérifie la valeur False ou Blank des données Job Lost.

La dernière variable est MatrixVisual . C'est le cœur du code. Il affiche la colonne résumée générée par LuckyTemplates pour remplir les visuels de matrice. Il regroupe le Job Loss Type dans cette matrice et injecte les filtres issus des slicers. Ensuite, il ajoute des colonnes étendues.

Une fois que la colonne de synthèse a terminé l'exécution, vous verrez les résultats dans le volet sous le code.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

LuckyTemplates utilise le résultat pour remplir les visuels matriciels.

Cache froid pour DAX Studio

Ensuite, vous devez vérifier le temps nécessaire à l'exécution de l'ensemble du code. Pour ce faire, activez Server Timings, puis choisissez Clear Cache Then Run .

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Lorsque vous essayez d'optimiser une mesure dans LuckyTemplates à l'aide de DAX Studio , il est préférable d'opérer dans le scénario de cache à froid afin que l'heure que vous obtenez soit correcte. Après cela, appuyez sur F5 et attendez que l'opération se termine dans l' onglet Server Timings .

Une fois terminé, vous pouvez voir que le temps d'exécution total est de 3,6 secondes. Il a passé la plupart du temps dans le moteur de formule et a passé 57 millisecondes dans le moteur de stockage

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Vous pouvez également voir qu'il a trouvé 383 requêtes de moteur de stockage. De toutes ces requêtes, il y en a 327 qui sont jetées dans la mémoire afin qu'elles puissent être réutilisées.

2. Analyser une mesure dans LuckyTemplates

Ensuite, vous devez optimiser ces 3 mesures identiques.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Vous devez extraire ces mesures dans un fichier différent et le connecter au modèle de données que vous utilisez.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Après cela, démarrez le Server Timings pour voir le temps pris par les 3 mesures pour remplir les visuels.

Les résultats de l'exécution montrent que les mesures consomment 1,85 secondes pour récupérer un résultat.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Le résultat montre un tableau composé de 10 lignes et 3 colonnes étendues qui appartiennent aux colonnes résumées.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

La colonne Type de perte contient 10 valeurs uniques que le code calcule pour obtenir les pourcentages d'incitation.

Le temps pris par le code est exponentiellement élevé. C'est là et quand vous devez les optimiser.

La mesure du pourcentage d'incitation RB dans LuckyTemplates

Il s'agit d'une mesure RB Incentive% dans LuckyTemplates. C'est l'une des 3 principales mesures utilisées dans cet exemple.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Vous pouvez voir qu'il essaie de calculer le pourcentage d'incitation.

Il a une variable, JobType, qui récupère la valeur Lost Type dans le contexte de filtre actuel. Il vérifie également s'il n'y a qu'une seule valeur visible dans le contexte de filtre actuel. Vous devez utiliser une fonction  pour que chaque fois qu'une condition est remplie, elle donne le résultat correspondant.

Ce code de mesure génère beaucoup de graisse moteur de stockage ce qui augmente le temps dans la durée globale du code.

Maintenant, revenez à DAX Studio pour vérifier la quantité de requêtes de moteur de stockage générées par la mesure.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Vous pouvez voir qu'il a fallu 600 millisecondes pour s'exécuter et 43 requêtes du moteur de stockage pour récupérer simplement les données des 10 lignes.

Données du moteur de stockage

Maintenant, vérifiez les données demandées au moteur de stockage. Dans la première requête, il y a un type de perte d'emplois et DCOUNT  du type de perte d'emplois.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

La requête suivante contient la date de fermeture des travaux qui provient du segment dans le rapport.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Dans le troisième code, vous verrez un autre type de perte d'emploi avec l'ID de données de rappel.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Dans une autre ligne, vous verrez les lignes de code les plus importantes.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

La première chose que vous voyez est la des paiements de travaux reçus, facturés et des dépenses réelles.

Vient ensuite la fonction WHERE  qui énonce une condition et son résultat correspondant. Le résultat variera en fonction de la sélection du slicer et de l'instruction switch dans la mesure RB Incentive%.

Vous remarquerez également que le code des lignes 12 et 14 est le même.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Si vous faites défiler vers la droite, vous pouvez voir qu'il existe des lignes avec les mêmes requêtes. Les requêtes sur les lignes sont dirigées par l'instruction switch dans la mesure RB Incentive%.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Si vous revenez à la mesure RB Incentive% dans LuckyTemplates, vous pouvez voir le nombre de fois qu'une requête est répétée et comment cela se reflète dans les requêtes du moteur de stockage.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

La logique derrière IF et Switch

Maintenant, pour comprendre pourquoi les requêtes sont exécutées plusieurs fois, vous devez comprendre la logique des fonctions  et SWITCH .

Vous devez les exécuter séparément sur un plan de requête. Mais avant cela, assurez-vous de vous connecter à la base de données et d'activer le plan de requête.

Exécutez l' instruction SWITCH  dans le plan de requête. Ensuite, mettez en surbrillance la  déclaration, puis appuyez sur Entrée.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

This will generate a Logical Query Plan with different operations.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Next, execute the IF statement by highlighting the statement and pressing enter.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

You can see that it generates the same Logical Query Plan.

This is because whenever you use a SWITCH function, the engine internally converts that function into an IF statement. But a SWITCH statement is recommended because it increases the readability of your code.

After that, you need to understand how a code is executed inside the IF or SWITCH function.

This is an example code that has a SWITCH statement inside.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

It has measures for Gross Profit, Total Estimate, and Total Invoiced which are all the SUM of different columns. It also has an function over the of Jobs Loss Type and a SWITCH and TRUE statement.

When you execute this code, you’ll see the logic behind the functions.

The first query gets the distinct Jobs Loss Type from the Jobs table.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Aside from the Jobs Loss Type, it also gets the sum of the Jobs Estimate.

Inside the WHERE condition, you can also see the values that exist in the Jobs Loss Type column.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

3. Use Code Evaluation Methods

In DAX, there are 3 methods in evaluating codes:

  • Strict Evaluation
  • Eager Evaluation
  • IF.Eager Evaluation

These methods will help you optimize a code or measure in LuckyTemplates.

1st Method: Strict Evaluation

The example shown below uses the Strict Evaluation method.

The logic behind it is that if the context of the Jobs Loss Type is equal to A, it will provide the Gross Profit. Otherwise, it gives the Total Estimate. The code does this for each row in the Jobs Loss Type.

This is another example measure in LuckyTemplates that uses Strict Evaluation.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

When you execute this code, it will generate 5 storage engine queries.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

With Strict Evaluation, the code provides the Total Estimate if the Gross Profit multiplied by 1.4 is greater than the Average Estimate. Otherwise, it will give the Gross Profit.

Using Strict Evaluation produces more storage engine queries because the IF statement checks the competition of the Gross Profit multiple times and will eventually hamper the performance of the whole operation.

2nd Method: Eager Evaluation

This is the same code as the previous example.

But instead of calculating the measures inside the IF statement, it calculated everything in the before RETURN.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

It means that before checking the statements, it gets all the values of the Gross Profit and Total Estimate for all Jobs Loss Type.

When you execute this code, the number of storage engines is reduced to 3.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

It improves the performance of the whole operation.

In the first operation query, it gets the Jobs Loss Type and the sum of Jobs Estimate and Gross Profit.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

The next query gets the sum of the Jobs Estimate from the Jobs Stable. This is used in calculating the Average Estimate.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

The last query gives the distinct Jobs Loss Type for the values written on the ADDCOLUMNS.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Using the Eager Evaluation gets everything in one single data cache. The data is also evaluated and iterated on the formula engine. The IF statement will return either the Total Estimate or Gross Profit depending on the True or False evaluation.

Eager Evaluation isn’t always the best method in optimizating your codes. Strict Evaluation will result in a better performance if you have complex codes. It all depends on the functions you use inside the DAX code.

The downside of Eager Evaluation is if you create valuables before an IF or SWITCH statement and use those variables inside the statement that should never be executed, the engine will still calculate those variables.

Eager Evaluation Disadvantages

Here is an example of the downside:

Ideally, if the Jobs Loss Type is equal to A it should get Gross Profit. Otherwise, it gets Total Estimate.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Since there’s no value inside the Job Loss Type column that is equal to A, it should always get Total Estimate. However, it still provides the Gross Profit in the data cache.

If you look at the first query, it gets the Jobs Loss Type and the sum of the Jobs Gross Profit and Estimate.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

In the next query, it gets a distinct Jobs Loss Type from the Jobs table.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

3rd Method: IF.EAGER Evaluation

La méthode suivante est l'  évaluation de la fonction IF.EAGER  qui reproduit le comportement de l'évaluation Eager.

Il vous permet d'écrire un code qui représente l'évaluation stricte et de l'exécuter avec Eager Evaluation.

Si vous regardez cet exemple de code, c'est exactement la même chose que le code d'évaluation stricte. La seule différence est que cela utilise la fonction IF.EAGER  au lieu de IF .

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Avant d'exécuter le code, assurez-vous de vous connecter au modèle LuckyTemplates et d'activer la synchronisation du serveur. Une fois terminé, appuyez sur F5.

Vous pouvez voir qu'il a généré 3 requêtes de moteur de stockage.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

La première requête obtient le type de perte d'emplois et la somme de l'estimation des emplois et du bénéfice brut.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

La deuxième requête obtient la somme de l'estimation des emplois.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

La dernière requête obtient le type de perte de travaux distinct à partir de la table des travaux.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Vous remarquerez qu'il a exécuté le même comportement que l'Eager Evaluation.

Résumé des méthodes d'évaluation

En essayant d'améliorer les performances de vos calculs, vous devez vous rappeler ce qui suit :

  • L'évaluation stricte est utilisée pour les codes complexes. Cela s'applique également lorsque vous ne souhaitez pas évaluer toutes les valeurs fournies par la table.
  • Eager Evaluation est préférable si vos codes sont simples.
  • Utilisez IF.EAGER si vous souhaitez écrire des codes à l'aide de l'évaluation stricte et l'exécuter avec l'évaluation hâtive.

Mais notez que vous devez tester ces trois méthodes pour savoir ce qui est vraiment le mieux à utiliser dans votre rapport.

4. Optimiser une mesure dans LuckyTemplates

La principale leçon de ce tutoriel est l'optimisation de vos codes.

Revenez en arrière et regardez la mesure RB Incentive% qui est exécutée à l'aide de l'évaluation stricte. Ensuite, essayez de l'évaluer en utilisant Eager Evaluation.

Commencez par créer des variables et saisissez la fonction  RETURN .

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Modifiez les références de mesure avec les variables.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Après cela, confirmez la mesure et accédez au studio DAX pour voir si cela a amélioré les performances.

Il montre que le temps total est de 642 millisecondes et que le nombre total de requêtes du moteur de stockage a été réduit à 39.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Maintenant, créez les variables pour toutes les données et remplacez toutes les références de mesure par leurs variables correspondantes.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Ensuite, confirmez la mesure et exécutez le code dans le studio DAX.

Le temps d'exécution total et le nombre total de requêtes du moteur de stockage ont été réduits de 600 millisecondes à 170 millisecondes et de 43 requêtes à 15 requêtes, respectivement.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Vous pouvez également voir qu'il n'y a pas de doublons. Avoir des variables dans votre code améliore leur lisibilité et leurs performances.

Optimisation avancée pour une mesure dans LuckyTemplates

Ensuite, vous devez optimiser davantage vos codes DAX.

Au lieu d'utiliser , utilisez la fonction  .

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

HASONEVALUE  compte le nombre de valeurs disponibles dans le contexte de filtre qui est une opération très intensive. Pendant ce temps, ISINSCOPE vérifie si la colonne fournie est utilisée pour le regroupement ou non.

Après avoir modifié les fonctions, confirmez la mesure et exécutez-la dans DAX Studio.

Vous pouvez voir que le nombre de requêtes du moteur de stockage est maintenant de 12. Le temps d'exécution total est également devenu 105 millisecondes.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Dans la 2e requête, vous remarquerez un ID de données de rappel.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Cela se produit parfois lorsque vous utilisez SELECTEDVALUE avec le champ de texte. Lorsque vous voyez des données de rappel, le moteur de stockage appelle le moteur de formule pour aider à résoudre la complexité du code. Cela ralentit les performances de votre mesure.

Supprimer les données de rappel

Vous devez supprimer les données de rappel pour obtenir de meilleures performances dans votre rapport. Pour ce faire, vous devez créer une table de configuration dans le modèle de données.

Accédez à l' option Saisir des données et collez les données. Nommez la table LossTypeConfigTable .

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Cliquez ensuite sur Modifier pour modifier le type de données de la colonne que vous allez importer.

Le type de données de l'ID de type de perte doit être une valeur d'enseignant afin qu'il puisse être utilisé dans la fonction SELECTEDVALUE .

Une fois chargé dans le modèle, créez une relation entre la table Jobs et la table LossTypeConfigTable en fonction du type de perte.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Après avoir créé une relation, accédez à la table Jobs et ajoutez une nouvelle colonne. Appelez-le ID de perte, puis saisissez la formule.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Utilisez la fonction  pour la table de configuration, puis extrayez l'ID du type de perte.

Ensuite, revenez à la mesure RB Incentive% et référencez le champ numérique au lieu du champ de texte. Dans SELECTEDVALUE , remplacez Loss Type par Loss ID.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Ensuite, modifiez toutes les mesures à l'intérieur du code. Utilisez une valeur entière au lieu de valeurs textuelles lors de la vérification du type de travail.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Une fois que vous avez modifié le code, confirmez la mesure et exécutez-la dans DAX Studio.

L'ID de données de rappel est éliminé dans la requête et le temps d'exécution du code est réduit à 93 millisecondes.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

La mesure RB Incentive% est maintenant entièrement optimisée.

5. Optimiser d'autres mesures dans LuckyTemplates

Vous devez également optimiser les mesures WR Incentive% et QB Incentive%.

Copiez et collez le code exact utilisé dans la mesure RB Incentive%. Ensuite, exécutez les 3 mesures ensemble.

Le temps d'exécution total est optimisé et réduit de 1855 millisecondes à 213 millisecondes. Il n'y a également que 12 requêtes de moteur de stockage.

Les deux premières requêtes créent le contexte de filtre et les autres représentent le nombre exact de valeurs dans la colonne Type de perte d'emplois.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Étant donné que toutes les mesures ont été optimisées, exécutez le code d'origine et observez l'évolution des performances. Les données montrent qu'il est maintenant calculé en 1,9 seconde.

Mesurer dans LuckyTemplates : conseils et techniques d'optimisation

Les performances de l'ensemble du code sont désormais optimisées, ce qui rend votre rapport plus rapide et meilleur.


Optimisez les fonctions DAX avec ce nouveau cours
Transformations LuckyTemplates simples pour des données plus optimisées
Optimisez les formules LuckyTemplates à l'aide de DAX avancé

Conclusion

Dans les rapports LuckyTemplates, les mesures doivent être optimisées pour garantir le bon fonctionnement de vos codes DAX. Cela améliore également les performances globales de votre rapport.

Vous avez appris les différentes méthodes pour optimiser votre mesure dans LuckyTemplates et vous avez appris à évaluer laquelle utiliser en fonction du contexte de votre rapport.


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