Проблемы
Предположим, что вы используете режим хранилища OLAP (ROLAP) для группы мер в экземпляре служб аналитики SQL Server 2014 или 2016. После установки для свойства MaxRolapOrConditions Advanced значения больше 256 вы выполняете запросы МНОГОМЕРных выражений для этой группы мер. В этом случае появляются ошибки, похожие на приведенные ниже.
#Error средству синтаксического анализа DOM не удалось загрузить и проанализировать поток. URL-адрес: "причина:" Операция прервана: нарушено ограничение по максимальной глубине элемента. Источник: "". Расположение файла: 0. Строка: 6.
Причина
Службы Analysis Services создают XML-документ псевдо-SQL, который затем анализируется с помощью таблицы стилей XML для создания конечной инструкции SQL, которая отправляется в реляционный источник. При формировании исходного внутреннего XML-документа или условия для столбца создаются как вложенные XML-элементы, как показано в следующем примере:
<OR> <Condition>column1 = value1</Condition> <OR> <Condition>column1 = value2</Condition> <OR> <Condition>column1 = value3</Condition> </OR> </OR></OR>
Свойство MaxElementDepth по умолчанию для объекта MSXML DOM, которое используется службами Analysis Services для создания XML-документа, — 256 в MSXML 6.0. Поэтому при увеличении конфигурации MaxROLAPOrConditions созданный XML-документ может превысить эту максимальную глубину.
Решение
Эта проблема устранена в следующем накопительном обновлении SQL Server:
Накопительное обновление 5 для SQL Server 2016 RTM
Накопительное обновление 2 для SQL Server 2016 с пакетом обновления 1 (SP1)
Накопительное обновление 4 для SQL Server 2014 с пакетом обновления 2 (SP2)
Накопительное обновление 10 для SQL Server 2014 с пакетом обновления 1 (SP1)
Сведения о накопительных обновлениях для SQL Server
Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Дополнительная информация
Это исправление изменяет способ создания промежуточного XML-документа, чтобы каждое дополнительное или условие не было вложено в предыдущий или XML-элемент. Таким образом, вы можете расширить MaxROLAPOrConditions за пределами 256. Тем не менее, существуют практические ограничения на количество или условия, которые можно использовать. При увеличении числа или условий сложность создаваемой инструкции SQL может превышать емкость реляционного сервера базы данных, что приводит к новым условиям ошибки. Ниже приведены примеры условий, которые могут привести к новым ошибкам.
-
Превышение максимального количества параметров в операторе
-
Превышение максимального количества условий в предложении WHERE
-
Ошибки при анализе строки запроса SQL
-
Превышение максимального размера строки запроса SQL
Поэтому мы рекомендуем соблюдать осторожность при любых изменениях значения конфигурации MaxROLAPOrConditions .
Ссылки
Ознакомьтесь с терминологией , которую корпорация Майкрософт использует для описания обновлений программного обеспечения.