Sintomas
Suponha que você use o modo de armazenamento de OLAP relacional (ROLAP) para um grupo de medidas em uma instância do SQL Server 2014 ou do 2016 Analysis Services. Depois de definir o valor da propriedade avançada MaxRolapOrConditions para mais de 256, você executa consultas MDX nesse grupo de medidas. Nesse caso, você recebe erros semelhantes aos seguintes:
#Error o analisador DOM não carregou e analisou o fluxo. URL: ' ' motivo: ' operação anulada: restrição de profundidade de elemento máximo violada. ' Fonte: ' '. Posição do arquivo: 0. Linha: 6.
Causa
O Analysis Services gera um documento XML pseudo-SQL, que é então analisado por meio de uma folha de estilos XML para gerar a instrução SQL final que é enviada para a fonte relacional. Ao gerar o documento XML interno inicial, ou as condições 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 do MSXML usado pelo Analysis Services para criar o documento XML é o 256 no MSXML 6.0. portanto, quando a configuração do MaxROLAPOrConditions é aumentada, o documento XML gerado pode exceder essa profundidade máxima.
Resolução
Esse problema foi corrigido na seguinte atualização cumulativa do 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 as atualizações cumulativas do SQL Server
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes do SQL Server:
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".
Informações adicionais
Essa correção altera o modo como o documento XML intermediário é gerado, de forma que cada adicional ou condição não seja aninhada no elemento anterior ou XML. Portanto, você pode aumentar o MaxROLAPOrConditions além do 256. No entanto, ainda há limitações práticas quanto ao número de condições ou que podem ser usadas. À medida que o número de condições ou aumenta, a complexidade da instrução SQL que é gerada pode exceder a capacidade do servidor de banco de dados relacional, causando novas condições de erro. Veja a seguir exemplos de condições que podem causar novos erros:
-
Excedendo o número máximo de parâmetros em uma instrução
-
Excedendo o número máximo de condições em uma cláusula Where
-
Erros na análise da cadeia de consulta SQL
-
Exceder o tamanho máximo de uma cadeia de caracteres de consulta SQL
Portanto, recomendamos que todos os ajustes no valor de configuração do MaxROLAPOrConditions sejam feitos com cautela.
Referências
Saiba mais sobre a terminologia usada pela Microsoft para descrever atualizações de software.