Moteur de stockage - Son rôle dans loptimisation des requêtes DAX dans LuckyTemplates

Dans ce didacticiel, nous allons examiner le deuxième moteur des services d'analyse : le moteur de stockage.

Nous avons discuté du moteur de niveau supérieur, le moteur de formule , dans un précédent didacticiel. Lorsque les utilisateurs comprennent le fonctionnement de ces deux moteurs, il est plus facile d'optimiser et d'améliorer les performances de vos requêtes DAX.

L'objectif principal du moteur de stockage est de travailler directement avec la base de données.

Le moteur de formule n'a pas d'accès direct à la base de données, il passe donc normalement par le moteur de stockage à cette fin.

Le moteur de stockage est disponible en deux types : le mode d'importation et DirectQuery . Vous pouvez mélanger et faire correspondre les deux types dans le même modèle de données pour créer un modèle composite.

Table des matières

Utilisation du mode d'importation dans le moteur de stockage

Parlons d'abord du mode d'importation. Ceci est également plus communément appelé Vertipaq, mais aussi appelé xVelocity ou In Memory Columnar Database.

Il y a quatre choses essentielles à comprendre sur le fonctionnement du mode d'importation.

Tout d'abord, Vertipaq crée une copie des données directement à partir de la source de données et la stocke dans la RAM au format compressé .

Deuxièmement, les données traitées en mode d'importation sont basées sur la dernière opération d'actualisation . Cela signifie que si vous avez actualisé vos données pour la dernière fois la semaine dernière, les données que vous traitez sont toujours les mêmes que celles de la semaine dernière. Ceci est particulièrement important si vous utilisez une configuration composite dans laquelle une table est en mode d'importation et l'autre table est en mode DirectQuery.

Supposons que vous ayez la table Produits, qui a été actualisée la semaine dernière, en mode d'importation. Quant à la table Sales, vous avez décidé de la faire passer par DirectQuery en raison de sa taille. Supposons également que vous créez votre rapport sur la base des deux tables dans lesquelles vous importez la colonne Marque et que vous créez une mesure Total Sales sur la même table Sales. Vous souhaitez également visualiser le montant des ventes en fonction de la marque.

Vous devez d'abord actualiser les données provenant du mode d'importation, car vous pourriez vous retrouver avec des données fraîches et mises à jour de DirectQuery et des données obsolètes de Vertipaq. Cela laissera quelques lignes vides sur votre matrice et votre visualisation.

La prochaine chose que vous devez savoir à propos de Vertipaq est que seules les opérations de base comme , , , ou sont nativement disponibles . Cela signifie que si d'autres opérations plus compliquées sont incluses dans le plan de requête, le moteur de stockage devra appeler le moteur de formule pour résoudre cette partie du code.

Enfin, le moteur de stockage est une base de données hautement optimisée en raison de la structure en colonnes de Vertipaq . Cela signifie que toutes les données sont stockées colonne par colonne et non ligne par ligne. En raison de cette structure, Vertipaq sera toujours plus rapide qu'une connexion DirectQuery même si vous créez des index dans votre modèle de données relationnel.

Utilisation de DirectQuery dans le moteur de stockage

La prochaine option que nous avons dans les services d'analyse LuckyTemplates est DirectQuery. Si vous utilisez la connexion DirectQuery, les services d'analyse agissent uniquement comme relais pour les requêtes envoyées par le moteur de formule.

Supposons que vous écriviez une requête. Le moteur de formule générera un plan de requête. Il transmettra ensuite la requête au moteur de stockage, déjà traduite dans la langue native de la base de données. La plupart du temps, ces requêtes sont en SQL.

Si la requête utilise DirectQuery, attendez-vous à ce qu'elle soit à jour en permanence. Vous n'avez pas à vous soucier de la date de la dernière actualisation des données.

Le processus d'optimisation du code DAX et du modèle de données dépendra également de la manière dont la base de données relationnelle a été créée. Si vous avez des index dans vos colonnes, alors vos requêtes seront toujours optimisées. Mais si votre base de données n'est pas optimisée en termes de création de rapports à l'aide de services d'analyse ou de LuckyTemplates, vous pourriez être confronté à quelques problèmes de performances. Soyez donc intentionnel en créant vos bases de données pour le développement de rapports.

Travailler avec des modèles composites

La troisième option consiste à créer un modèle composite afin que vous puissiez avoir une table en mode d'importation et une autre table dans DirectQuery.

Lorsque vous utilisez deux tables provenant de sources différentes, le moteur de formule enverra une requête à Vertipaq et une autre requête à la source de données DirectQuery. Dans les deux cas, les services d'analyse récupèrent également le cache de données de Vertipaq et de DirectQuery. Le moteur de formule utilisera ensuite JOIN, ou toute itération sur les deux caches de données avant de fournir les résultats à l'utilisateur final.

Supposons que vous essayez de visualiser le montant des ventes par marque de produit dans votre rapport. Le moteur de formule enverra une requête à Vertipaq, où il récupérera le produit, la marque et la clé du produit. Ensuite, à partir de DirectQuery, il essaiera de récupérer les ventes, le prix net, la quantité des ventes et la clé de produit des ventes.

Une fois qu'il a les deux caches de données basés sur la clé de produit, il rejoindra les deux caches de données et calculera le montant total des ventes. Il présentera ensuite les résultats à l'utilisateur final.

Autres points critiques concernant le moteur de stockage

Maintenant que nous avons couvert ses différents types, il y a quelques autres facteurs critiques que vous devez connaître sur le moteur de stockage pour vous aider à optimiser vos requêtes DAX.

Comme je l'ai mentionné précédemment, le moteur de stockage fournit le cache de données au moteur de formule sous la forme d'un cache de données non compressé. Lorsque vous êtes en mode import, la requête qui est renvoyée à Vertipaq dans le processus est exécutée dans un langage xmSQL.

Le langage xmSQL est quelque peu similaire à SQL mais n'est pas complètement le même. Nous allons parler de xmSWL en détail lorsque nous parlerons des plans de requête dans un autre tutoriel.

Il est également important de se rappeler que le moteur de stockage utilise tous les cœurs disponibles dans votre CPU. La possibilité d'utiliser plusieurs cœurs est avantageuse si vous avez plusieurs segments dans votre modèle de données.

Supposons que vous ayez une table dans LuckyTemplates avec 12 millions de lignes. Ce tableau sera ensuite divisé en 12 segments, car dans Power Pivot et LuckyTemplates, chaque segment correspond à 1 million de lignes. Ceci est différent des services d'analyse en général, où un segment contient 8 millions de lignes.

Donc, si j'ai six cœurs dans mon processeur, les six cœurs analyseront les six premiers des 12 segments en même temps. Une fois qu'ils auront terminé, ils passeront aux six segments suivants.

Mais si je travaille avec des services d'analyse où le segment par défaut contient 8 millions de lignes, seuls deux de mes six cœurs seront utilisés - un segment traitera 8 millions de lignes tandis que l'autre en traitera 4 millions.

Travailler sur des requêtes compliquées

Plus tôt, j'ai mentionné que le mode d'importation ne prend en charge que les opérations de base telles que MIN, MAX, SUM, COUNT et GROUPBY. Que se passe-t-il si vous travaillez sur des requêtes plus compliquées ?

Supposons que vous décidiez d'utiliser une instruction IF dans le contexte de la ligne ou une itération imbriquée telle que SUMX sur les tables Products et Sales.

Dans ce cas, le moteur de stockage ne pourra pas résoudre la requête tout seul. Il appellera ensuite le moteur de formule, qui commencera à résoudre le calcul complexe ligne par ligne à l'intérieur du moteur de stockage. Certains peuvent penser qu'il s'agit d'un scénario favorable, les deux moteurs fonctionnant ensemble, mais c'est loin d'être vrai.

Vous voyez, lorsque cela se produit, le cache de données produit par le moteur de stockage ne peut pas être mis en cache au cas où il y aurait un callbackdataID dans cette requête particulière. Ainsi, si vous actualisez le visuel, le même calcul devra être effectué à la fois par le moteur de formule et le moteur de stockage, même si vous venez d'exécuter la même requête il y a quelques secondes. Cela entraînera des retards de performances et une mauvaise expérience utilisateur.

Notez également que le moteur de stockage ne sait pas si les requêtes ont été exécutées avec DAX ou MDX. Comme nous l'avons mentionné précédemment, c'est le travail du moteur de formule de convertir les requêtes dans le bon langage avant de transmettre le plan de requête.

Enfin, le moteur de formule envoie les requêtes au moteur de stockage une par une. Cela signifie qu'il est vraiment préférable d'avoir plusieurs segments afin de réduire le temps de numérisation global dans Vertipaq, plusieurs segments étant numérisés en même temps.


DAX pour LuckyTemplates : Optimisation à l'aide de moteurs de formule dans DAX Studio
Techniques et leçons d'optimisation des requêtes DAX
Performances des requêtes et configuration de DAX Studio

Conclusion

Comprendre les tenants et les aboutissants du moteur de stockage aide vraiment à optimiser vos requêtes DAX, surtout si vous utilisez DAX Studio. Si vous avez également suivi le didacticiel expliquant le moteur de formule, vous pouvez prendre de meilleures décisions sur la façon de créer des requêtes plus performantes.

Bien que le moteur de formule serve de moteur de niveau supérieur, il ne fait aucun doute qu'il ne peut pas fonctionner aussi bien qu'il le peut si nous ne maximisons pas les deux moteurs.

Tous mes vœux,


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