Le Post Infeeny

Les articles des consultants et experts Infeeny

[JSS2013] Session : SSAS Tabular : DAX

Speaker : Marco RUSSO
Niveau : 300-400

Objectif de la session :

Analyser les plans d’exécution DAX avec SQL Profiler pour améliorer les perfs

Introduction :

Le modèle tabulaire se base sur 2 moteurs : Formula Engine et Storage Engine (VertiPaq/xVelocity)

Les différents types de Plan d’exécution :

On a trois types de plan d’exécution : logique (flux logique de la requête), physique () et VertiPaq Queries (les requêtes exécutées par le moteur xVelocity).

Chaque code DAX va générer un plan d’exec différent.

Voici les évènements à tracer :

  • Error
  • Query begin (requête DAX)
  • Query end
  • DAX Query Plan
  • VertiPaq Storage Engine (SE) Query Begin
  • VertiPaq SE Query Cache
  • VertiPaq SE Query End

Analyser les traces

Pour avoir une meilleure lisibilité des traces, on peut utiliser le codeplex DAX Studio. C’est un outil avec un requêteur et un profiler intégrés. Le résultat des traces est récupérable sur Excel.

Les opérations VertiPaq

  • VertiScan => Filtre les données sur un ou plusieurs colonnes
  • VertiCalc => pour des calculs simples les calculs sont faits par le moteur, pour des calculs complexes le moteur fait appel au formula engine pour effectuer les calculs et effectuer des allers retours

Exemple :

  • Le SUM est exécuté dans le moteur xVelocity et pas dans le Formula Engine. Le SUM est donc très performant.
  • Le SUMX est exécuté dans le Formula Engine car il évalue les calculs ligne à ligne. Tant que les calculs sont simples, ils se font dans le storage engine. Dès qu’on voit apparaître le CallbackDataID, c’est que l’expression devient assez complexe et le moteur rebascule en formula engine pour chaque ligne.

N.B : N’oubliez pas de vider le cache lors de vos tests.

Quelques bonnes pratiques

  • Filtrez les données au plus tôt pour réduire le plan d’exécution
  • Utilisez les relations au lieu du CALCULATE
  • Privilégiez ADDCOLUMNS à la place du SUMMARIZE
  • Délaissez les fonctions de type If…

Conclusion :

Très bonne session de Marco Russo qui nous explique bien la mécanique interne du moteur VertiPaq.

David – Consultant décisionnel MCNEXT

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :