Sintomas
Suponha que você use o modo de armazenamento OLAP relacional (ROLAP) para um grupo de medidas em uma instância do Analysis Services SQL Server 2014 ou 2016. Depois de definir o valor da propriedade avançada MaxRolapOrConditions para mais de 256, você executa consultas MDX nesse grupo de medidas. Neste caso, são apresentados erros semelhantes aos seguintes:
Nota
#Error O analisador DOM falhou ao carregar e analisar o fluxo. URL:'' Motivo: 'Operação abortada: restrição de profundidade máxima do elemento violada.' Fonte:''. Posição do arquivo: 0. Linha: 6.
Causa
O Analysis Services gera um documento XML pseudo-SQL, que é então analisado através de uma folha de Estilos XML para gerar a instrução SQL final que é enviada para a origem relacional. Ao gerar o documento XML interno inicial, as condições OR de uma coluna são geradas como elementos XML aninhados, como no exemplo a seguir:
<OR>
<Condition>column1 = value1</Condition>
<OR>
<Condition>column1 = value2</Condition>
<OR>
<Condition>column1 = value3</Condition>
</OR>
</OR>
</OR>
A propriedade MaxElementDepth padrão para um objeto DOM MSXML usado pelo Analysis Services para criar o documento XML é 256 no MSXML 6.0.
Portanto, quando a configuração MaxROLAPOrConditions é aumentada, o documento XML gerado pode exceder essa profundidade máxima.
Resolução
Este problema foi corrigido na seguinte atualização cumulativa para SQL Server:
Atualização cumulativa 5 para SQL Server 2016 RTM
Atualização cumulativa 2 para SQL Server 2016 SP1
Atualização cumulativa 4 para SQL Server 2014 SP2
Atualização cumulativa 10 para SQL Server 2014 SP1
Acerca das atualizações cumulativas para SQL Server
Acerca das atualizações cumulativas para SQL Server
Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Consulte as atualizações cumulativas mais recentes para SQL Server:
Atualização cumulativa mais recente para o SQL Server 2016
Atualização cumulativa mais recente para o SQL Server 2014
Estado
A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".
Mais Informações
Esta correção altera a forma como o documento XML intermédio é gerado, para que cada condição OR adicional não seja aninhada no elemento OR XML anterior. Portanto, você pode aumentar o MaxROLAPOrConditions além de 256. No entanto, ainda existem limitações práticas no que diz respeito ao número de condições OR que podem ser utilizadas.
À medida que o número de condições OR aumenta, a complexidade da instrução SQL gerada pode exceder a capacidade do servidor de banco de dados relacional, causando novas condições de erro.
Seguem-se exemplos de condições que podem causar novos erros:
- Exceder o número máximo de parâmetros numa instrução
- Exceder o número máximo de condições numa cláusula WHERE
- Erros ao analisar a cadeia de consulta SQL
- Exceder o tamanho máximo de uma cadeia de consulta SQL
Portanto, recomendamos que quaisquer ajustes no valor de configuração MaxROLAPOrConditions sejam feitos com cuidado.
Referências
Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.