徵狀
假設您在 SQL Server 2014 或2016分析服務的實例中,針對 [測度] 群組使用 [關聯式 OLAP (ROLAP)] 儲存模式。 將 MaxRolapOrConditions advanced 屬性的值設為大於256之後,就會在該量值群組上執行 MDX 查詢。 在這種情況下,您會收到如下所示的錯誤:
#Error DOM 解析器載入並分析資料流失敗。 URL: ' 原因: ' 操作已中止:違反最大元素深度限制。」 來源: ""。 檔案位置:0。 Line: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>
Msxml DOM 物件的預設 MaxElementDepth 屬性是由 Analysis SERVICES 在 msxml 6.0 中建立 xml 256 檔所使用。因此,當 MaxROLAPOrConditions設定增加時,產生的 xml 檔可能會超過此最大深度。
解決方案
此問題已在下列 SQL Server 累積更新中修正:
關於 SQL Server 的累計更新
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
狀態
Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。
其他相關資訊
此修正程式會變更中間 XML 檔的產生方式,因此每個額外或條件不會嵌套在前一個或 XML 元素中。 因此,您可以增加256以外的MaxROLAPOrConditions 。 不過,對於可以使用的 OR 條件,仍有實際的限制。隨著或條件數增加,產生的 SQL 語句的複雜性可能會超過關系型資料庫伺服器的容量,從而導致新的錯誤情況。下列是可能導致新錯誤的條件範例:
-
超過語句中的參數數目上限
-
超過 where 子句中的最大條件數
-
分析 SQL 查詢字串時的錯誤
-
超過 SQL 查詢字串的大小上限
因此,建議您慎用任何對 MaxROLAPOrConditions 設定值所做的調整。
參考
瞭解 Microsoft 用於描述軟體更新的 術語 。