Symptômes
Partez du principe que vous utilisez le mode de stockage OLAP relationnel (ROLAP) pour un groupe de mesures dans une instance de SQL Server 2014 ou 2016 Analysis Services. Après avoir défini la valeur de la propriété Advanced MaxRolapOrConditions sur plus de 256, vous exécutez des requêtes MDX sur ce groupe de mesures. Dans ce cas, vous recevez des erreurs similaires à ce qui suit :
#Error l’analyseur DOM n’a pas pu charger et analyser le flux. URL : « raison : » opération interrompue : contrainte de profondeur d’élément Max violée. ' Source : ' '. Emplacement du fichier : 0. Ligne : 6.
Cause
Analysis Services génère un document XML Pseudo-SQL, qui est ensuite analysé par le biais d’une feuille de style XML pour générer l’instruction SQL finale qui est envoyée à la source relationnelle. Lors de la génération du document XML interne initial, les conditions d’une colonne sont générées en tant qu’éléments XML imbriqués comme dans l’exemple suivant :
<OR> <Condition>column1 = value1</Condition> <OR> <Condition>column1 = value2</Condition> <OR> <Condition>column1 = value3</Condition> </OR> </OR></OR>
La propriété MaxElementDepth par défaut d’un objet DOM MSXML qui est utilisée par Analysis Services pour générer le document xml est 256 dans MSXML 6.0. par conséquent, lorsque la configuration MaxROLAPOrConditions est améliorée, le document XML généré peut dépasser cette profondeur maximale.
Résolution
Ce problème a été résolu dans la mise à jour cumulative suivante pour SQL Server :
Mise à jour cumulative 5 pour SQL Server 2016 RTM
Mise à jour cumulative 2 pour SQL Server 2016 SP1
Mise à jour cumulative 4 pour SQL Server 2014 SP2
Mise à jour cumulative 10 pour SQL Server 2014 SP1
À propos des mises à jour cumulatives pour SQL Server
Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs et les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :
Statut
Microsoft a confirmé l’existence de ce problème dans les produits Microsoft répertoriés dans la section « S’applique à ».
Informations supplémentaires
Ce correctif modifie le mode de génération du document XML intermédiaire, de sorte que chaque élément supplémentaire ou condition n’est pas imbriqué dans l’élément précédent ou XML. Par conséquent, vous pouvez augmenter la MaxROLAPOrConditions au-delà de 256. Néanmoins, il existe toujours des limitations pratiques en matière de nombre de conditions qui peuvent être utilisées. Lorsque le nombre de conditions augmente, la complexité de l’instruction SQL générée peut dépasser la capacité du serveur de base de données relationnelle, ce qui engendre de nouvelles conditions d’erreur. Voici quelques exemples de circonstances susceptibles de provoquer de nouvelles erreurs :
-
Dépassement du nombre maximum de paramètres dans une instruction
-
Dépassement du nombre maximal de conditions dans une clause Where
-
Erreurs dans l’analyse de la chaîne de requête SQL
-
Dépassement de la taille maximale d’une chaîne de requête SQL
Par conséquent, nous vous conseillons d’apporter des modifications à la configuration de configuration MaxROLAPOrConditions avec précaution.
Références
Apprenez-en davantage sur la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.