現象
SQL Server 2014 または 2016 Analysis Services のインスタンスのメジャー グループにリレーショナル OLAP (ROLAP) ストレージ モードを使用するとします。 MaxRolapOrConditions 詳細プロパティの値を 256 より大きく設定した後、そのメジャー グループに対して MDX クエリを実行します。 この場合、次のようなエラーが表示されます。
注
#Error DOM パーサーがストリームの読み込みと解析に失敗しました。 URL:'' 理由: '操作を中止しました: max-element-depth 制約に違反しました。' ソース:''。 ファイルの位置: 0。 行: 6.
原因
Analysis Services は疑似 SQL XML ドキュメントを生成し、XML スタイル シートを介して解析され、リレーショナル ソースに送信される最終的な SQL ステートメントを生成します。 最初の内部 XML ドキュメントを生成すると、次の例のように、列の OR 条件が入れ子になった XML 要素として生成されます。
<OR>
<Condition>column1 = value1</Condition>
<OR>
<Condition>column1 = value2</Condition>
<OR>
<Condition>column1 = value3</Condition>
</OR>
</OR>
</OR>
Analysis Services が XML ドキュメントを作成するために使用する MSXML DOM オブジェクトの既定の MaxElementDepth プロパティ は、MSXML 6.0 では 256 です。
したがって、MaxROLAPOrConditions 構成を増やすと、生成される XML ドキュメントはこの最大深度を超える可能性があります。
解決策
この問題は、SQL Server 用の次の累積的な更新プログラムで解決されています。
SQL Server 2016 RTM の累積的な更新プログラム 5
SQL Server 2016 SP1 の累積的な更新プログラム 2
SQL Server 2014 SP2 の累積的な更新プログラム 4
SQL Server 2014 SP1 の累積的な更新プログラム 10
SQL Server 用の累積的な更新プログラムについて
SQL Server 用の累積的な更新プログラムについて
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
SQL Server 2016 の最新の累積的な更新プログラム
SQL Server 2014 の最新の累積的な更新プログラム
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
追加情報
この修正プログラムにより、中間 XML ドキュメントの生成方法が変更され、各追加の OR 条件が前の OR XML 要素に入れ子にならなくなります。 そのため、MaxROLAPOrConditions を 256 以上に増やすことができます。 ただし、使用できる OR 条件の数には依然として実際的な制限があります。
OR 条件の数が増えるにつれて、生成される SQL ステートメントの複雑さがリレーショナル データベース サーバーの容量を超え、新しいエラー状態が発生する可能性があります。
新しいエラーの原因となる条件の例を次に示します。
- ステートメント内のパラメーターの最大数を超える
- where 句の条件の最大数を超える
- SQL クエリ文字列の解析エラー
- SQL クエリ文字列の最大サイズを超える
したがって、MaxROLAPOrConditions 構成値の調整は慎重に行うことをお勧めします。
参考資料
Microsoft がソフトウェア更新プログラムについて説明するために使用する 用語について説明します 。