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:

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.