Quest-ce que le self en Python ? Exemples concrets
Qu'est-ce que le self en Python ? Exemples concrets
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 :
Voici le modèle de données que vous allez utiliser :
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 :
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.
Une fois cela fait, déroulez la liste Répartition des incitations et cliquez sur Copier la requête .
Ensuite, sélectionnez Outils externes pour accéder au studio DAX et examinez le code généré par LuckyTemplates.
Ensuite, collez la requête copiée dans l'espace de travail.
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.
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 .
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
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.
Vous devez extraire ces mesures dans un fichier différent et le connecter au modèle de données que vous utilisez.
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.
Le résultat montre un tableau composé de 10 lignes et 3 colonnes étendues qui appartiennent aux colonnes résumées.
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.
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.
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.
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.
La requête suivante contient la date de fermeture des travaux qui provient du segment dans le rapport.
Dans le troisième code, vous verrez un autre type de perte d'emploi avec l'ID de données de rappel.
Dans une autre ligne, vous verrez les lignes de code les plus importantes.
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.
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%.
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.
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.
This will generate a Logical Query Plan with different operations.
Next, execute the IF statement by highlighting the statement and pressing enter.
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.
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.
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.
3. Use Code Evaluation Methods
In DAX, there are 3 methods in evaluating codes:
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.
When you execute this code, it will generate 5 storage engine queries.
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.
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.
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.
The next query gets the sum of the Jobs Estimate from the Jobs Stable. This is used in calculating the Average Estimate.
The last query gives the distinct Jobs Loss Type for the values written on the ADDCOLUMNS.
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.
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.
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.
In the next query, it gets a distinct Jobs Loss Type from the Jobs table.
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 .
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.
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.
La deuxième requête obtient la somme de l'estimation des emplois.
La dernière requête obtient le type de perte de travaux distinct à partir de la table des travaux.
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 :
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 .
Modifiez les références de mesure avec les variables.
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.
Maintenant, créez les variables pour toutes les données et remplacez toutes les références de mesure par leurs variables correspondantes.
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.
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 .
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.
Dans la 2e requête, vous remarquerez un ID de données de rappel.
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.
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 .
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.
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.
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.
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.
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.
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.
É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.
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.
Qu'est-ce que le self en Python ? Exemples concrets
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.
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.
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.
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.
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.
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.
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.
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.
Qu'est-ce que la passerelle LuckyTemplates ? Tout ce que tu as besoin de savoir