症状
假设你在 SQL Server 2014 或 2016 Analysis Services 实例中对度量值组使用关系 OLAP (ROLAP)存储模式。 将 MaxRolapOrConditions advanced 属性的值设置为大于256后,将对该度量值组执行 MDX 查询。 在这种情况下,你会收到类似于以下内容的错误:
#Error DOM 分析程序加载和分析流失败。 URL: ' ' 原因: ' 操作已中止:违反了最大元素深度约束。 ' 源: ""。 文件位置:0。 行:6。
原因
Analysis Services 生成一个伪 SQL XML 文档,然后通过 XML 样式表分析该文档,以生成最终 SQL 语句,该文档将发送到关系源。 生成初始内部 XML 文档时,或列的条件生成为嵌套的 XML 元素,如以下示例中所示:
<OR> <Condition>column1 = value1</Condition> <OR> <Condition>column1 = value2</Condition> <OR> <Condition>column1 = value3</Condition> </OR> </OR></OR>
用于生成 XML 文档的 Analysis Services 使用的 MSXML DOM 对象的默认 MaxElementDepth 属性是 msxml 6.0 中的256。因此,当 MaxROLAPOrConditions配置增加时,生成的 XML 文档可能超过此最大深度。
解决方案
在 SQL Server 的以下累积更新中修复了此问题:
关于 SQL Server 的累积更新
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
更多信息
此修补程序将更改生成中间 XML 文档的方式,以便每个附加 OR 条件不会嵌套在之前或 XML 元素中。 因此,你可以增加256以外的MaxROLAPOrConditions 。 但是,对于可以使用的 OR 条件,仍然存在实际限制。随着或条件的增加,生成的 SQL 语句的复杂程度可能会超过关系数据库服务器的容量,从而导致新的错误条件。下面是可能会导致新错误的条件示例:
-
在语句中超过最大参数数目
-
超过 where 子句中的最大条件数
-
分析 SQL 查询字符串时出错
-
超过 SQL 查询字符串的最大大小
因此,我们建议你对 MaxROLAPOrConditions 配置值的任何调整均应谨慎。
参考
了解 Microsoft 用于描述软件更新的 术语 。