KB3208179 - CORREÇÃO: A consulta MDX retorna erros se o valor de MaxRolapOrConditions for maior que 256 no SQL Server Analysis Services

Aplica-se A
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

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.