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:
Observação
#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
Esse problema é corrigido na seguinte atualização cumulativa para o 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
Sobre atualizações cumulativas para o SQL Server
Sobre atualizações cumulativas para o 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
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seçã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.