Sintomas
Assuma que utiliza o modo de armazenamento relacional OLAP (ROLAP) para um grupo de medidas num caso de SQL Server 2014 ou 2016 Serviços de Análise. Depois de definir o valor da propriedade avançada MaxRolapOrConditions para mais de 256, executa consultas MDX nesse grupo de medidas. Neste caso, recebe erros que se assemelham ao seguinte:
#Error O analisador DOM não conseguiu carregar e analisar o fluxo. URL:'' Razão: "Operação abortada: restrição de profundidade de elemento máximo violada." Fonte:'. Posição do ficheiro: 0. Linha: 6.
Causa
Os Serviços de Análise geram um documento pseudo-SQL XML, que é então analisado através de uma folha de Estilo XML para gerar a declaração final de SQL que é enviada para a fonte relacional. Ao gerar o documento inicial de XML interno, as condições de uma coluna são geradas como elementos XML aninhados como no exemplo seguinte:
<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 MSXML DOM que é usado pelos Serviços de Análise para construir o documento XML é de 256 em MSXML 6.0.Portanto, quando a configuração MaxROLAPOrConditions é aumentada, o documento XML gerado pode exceder esta profundidade máxima.
Resolução
Esta emissão é corrigida 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
Cada nova atualização cumulativa do 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. Confira as últimas atualizações cumulativas do SQL Server:
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Mais Informações
Esta correção altera a forma como o documento XML intermédio é gerado, de modo que cada condição adicional de OR não é aninhada no elemento OR XML anterior. Portanto, pode aumentar as Condições MaxROLAPOr para além de 256. No entanto, ainda existem limitações práticas ao número de condições de OR que podem ser utilizadas. À medida que o número de condições de OR aumenta, a complexidade da declaração SQL gerada pode exceder a capacidade do servidor de base de dados relacional, causando novas condições de erro. Seguem-se exemplos de condições que podem causar novos erros:
-
Excedendo o número máximo de parâmetros em comunicado
-
Excedendo o número máximo de condições numa cláusula
-
Erros na análise da cadeia de consulta SQL
-
Excedendo o tamanho máximo de uma cadeia de consulta SQL
Por isso, recomendamos que quaisquer ajustes ao valor de configuração MaxROLAPOrConditions sejam feitos com cuidado.
Referências
Saiba mais sobre a terminologia que a Microsoft utiliza para descrever atualizações de software.