Поделиться через


Конфигурация ошибок для обработки кубов, секций и измерений

Применимо к: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Свойства конфигурации ошибок для кубов, секций и объектов измерения определяют реакцию сервера на возникновение ошибок целостности данных во время обработки. Обычно такие ошибки вызваны повторяющимися или отсутствующими ключами и значения NULL в ключевом столбце. Хоть запись с ошибкой и не будет добавлена в базу данных, можно задать свойства, которые определят дальнейшую реакцию на ошибку. По умолчанию обработка останавливается. Однако во время разработки куба желательно продолжить обработку при возникновении ошибки для тестирования поведения куба с импортированным данными, даже если они не будут полными.

Этот раздел включает следующие подразделы:

Порядок выполнения

Сервер для каждой записи всегда выполняет правила NullProcessing до правил ErrorConfiguration . Это важно учитывать, потому что свойства обработки значения NULL, преобразующие NULL в нуль, могут впоследствии ввести ошибки повторяющихся ключей, когда две или более записи с ошибками будут иметь нуль в ключевом столбце.

Поведение по умолчанию

По умолчанию обработка останавливается при обнаружении первой ошибки в каком-либо ключевом столбце. Это поведение контролируется значением предельного количества ошибок, которое определяет нуль в качестве дозволенного количества ошибок и директиву «Остановить обработку», предписывающую серверу остановить обработку при достижении предельного количества ошибок.

Записи, ведущие к ошибкам из-за наличия NULL и повторяющихся или отсутствующих значений, преобразуются в неизвестный элемент или отбрасываются. SQL Server Analysis Services не импортирует данные, нарушающие ограничения целостности данных.

  • Преобразование в неизвестный элемент производится по умолчанию. Это происходит из-за параметра ConvertToUnknown для KeyErrorAction. Записи, приписанные неизвестному элементу, помещаются в «карантин» базы данных в качестве свидетельства проблемы, которая впоследствии может быть исследована разработчиком после завершения обработки данных.

    Неизвестные элементы исключаются из рабочих нагрузок запросов, но будут наблюдаться в некоторых клиентских приложениях, если свойство UnknownMember имеет значение Отображается.

    Если нужно отслеживать, сколько значений NULL было преобразовано в неизвестный элемент, можно изменить свойство NullKeyConvertedToUnknown так, чтобы эти ошибки отмечались в журнале или в окне «Обработка».

  • Записи будут отбрасываться, если вручную установить для свойства KeyErrorAction значение DiscardRecord.

С помощью свойств конфигурации ошибок можно определить, как сервер будет реагировать на возникновение ошибки. Среди возможных вариантов: немедленная остановка обработки, продолжить обработку, но прервать ведение журнала или же продолжить обработку и ведение журнала ошибок. Поведение по умолчанию зависит от серьезности ошибки.

Подсчет ошибок отслеживает количество возникающих ошибок. Если установлен верхний предел, ответ сервера меняется при достижении этого предела. По умолчанию сервер останавливает обработку после достижения предела. По умолчанию предел равен 0, что приводит к остановке обработки при учете первой же ошибки.

Важные ошибки, такие как отсутствующий ключ или значение NULL в поле ключа, должны быть быстро устранены. По умолчанию эти ошибки подпадают под действие поведения сервера ReportAndContinue — сервер перехватывает ошибку, увеличивает счетчик ошибок и затем продолжает обработку (если только не задано нулевое предельное количество ошибок, тогда обработка прерывается сразу же).

По умолчанию другие ошибки создаются, но не подсчитываются и не заносятся в журнал (это параметр IgnoreError ), поскольку не обязательно нарушают целостность данных.

На подсчеты количества ошибок влияют параметры обработки значений NULL. Для атрибутов измерения эти параметры определяют реакцию сервера при обнаружении значений NULL. По умолчанию значения NULL в числовом столбце преобразуются в нули, а NULL в строковом столбце — в пустые строки. Свойства NullProcessing можно переопределить на отлов значений NULL до возникновения ошибок KeyNotFound и KeyDuplicate , связанных с ними. Дополнительные сведения см. в разделе Ключи NULL в измерении .

Ошибки регистрируются в диалоговом окне «Обработка», но не сохраняются. Можно указать имя файла журнала ошибок ключа для сбора ошибок в текстовом файле.

Свойства конфигурации ошибок

Есть девять свойств конфигурации ошибок. Пять из них определяют реакцию сервера на определенную ошибку. Другие четыре свойства относятся к рабочим нагрузкам конфигурации ошибок и определяют разрешенное количество ошибок, действия при достижении предела и возможность сбора ошибок в файле журнала.

Реакция сервера на определенные ошибки

Свойство По умолчанию Другие значения
CalculationError

Происходит при инициализации конфигурации ошибок.
IgnoreError не подсчитывает ошибки и не заносит их в журнал; обработка продолжается, пока количество ошибок меньше максимального предела. ReportAndContinue фиксирует ошибки в журнале и ведет их подсчет.

ReportAndStop сообщает об ошибке и сразу же прекращает обработку вне зависимости от значения предельного количества ошибок.
KeyNotFound

Возникает, когда для внешнего ключа в таблице фактов отсутствует совпадающий первичный ключ в связанной таблице измерения (например, таблица фактов Sales имеет запись с кодом продукта, которого нет в таблице измерения Product). Эта ошибка может произойти во время обработки секций или измерений, связанных по схеме «снежинка».
ReportAndContinue фиксирует ошибки в журнале и ведет их подсчет. ReportAndStop сообщает об ошибке и сразу же прекращает обработку вне зависимости от значения предельного количества ошибок.

IgnoreError не подсчитывает ошибки и не заносит их в журнал; обработка продолжается, пока количество ошибок меньше максимального предела. По умолчанию записи, ведущие к этой ошибке, преобразуются в неизвестный элемент. Однако можно изменить свойство KeyErrorAction , тогда такие записи будут отбрасываться.
KeyDuplicate

Возникает при обнаружении в измерении повторяющихся ключей атрибутов. В большинстве случаев допустимо иметь повторяющиеся ключи атрибутов. Эта ошибка сообщает о повторах, чтобы разработчик мог проверить измерение на изъяны проектирования, которые приводят к возникновению несогласованных связей между атрибутами.
IgnoreError не подсчитывает ошибки и не заносит их в журнал; обработка продолжается, пока количество ошибок меньше максимального предела. ReportAndContinue фиксирует ошибки в журнале и ведет их подсчет.

ReportAndStop сообщает об ошибке и сразу же прекращает обработку вне зависимости от значения предельного количества ошибок.
NullKeyNotAllowed

Возникает при установке ошибки NullProcessing = для атрибута измерения или при наличии значений NULL в ключевом столбце атрибута, используемом для уникальной идентификации элемента.
ReportAndContinue фиксирует ошибки в журнале и ведет их подсчет. ReportAndStop сообщает об ошибке и сразу же прекращает обработку вне зависимости от значения предельного количества ошибок.

IgnoreError не подсчитывает ошибки и не заносит их в журнал; обработка продолжается, пока количество ошибок меньше максимального предела. По умолчанию записи, ведущие к этой ошибке, преобразуются в неизвестный элемент. Однако можно указать свойство KeyErrorAction , тогда такие записи будут отбрасываться.
NullKeyConvertedToUnknown

Возникает, когда значения NULL впоследствии преобразуются в неизвестный элемент. Установка NullProcessing = ConvertToUnknown для атрибута измерения вызовет эту ошибку.
IgnoreError не подсчитывает ошибки и не заносит их в журнал; обработка продолжается, пока количество ошибок меньше максимального предела. Если вы рассматриваете эту ошибку как информационное предупреждение, оставьте значение по умолчанию. В ином случае можно выбрать ReportAndContinue , чтобы ошибка отмечалась в окне «Обработка» и учитывалась при подсчете предельного количества ошибок.

ReportAndStop сообщает об ошибке и сразу же прекращает обработку вне зависимости от значения предельного количества ошибок.

Общие свойства

Свойство Значения
KeyErrorAction Это действие, выполняемое сервером при возникновении ошибки KeyNotFound . Допустимая реакция на эту ошибку: ConvertToUnknown или DiscardRecord.
KeyErrorLogFile Это определяемое пользователем имя файла должно иметь расширение LOG и находиться в папке, для которой учетная запись службы имеет разрешения на чтение и запись. Файл журнала будет содержать только ошибки, возникшие во время обработки. Для сбора более подробной информации воспользуйтесь средством «черный ящик».
KeyErrorLimit Максимальное число ошибок целостности данных, допустимых для сервера, прежде чем он остановит обработку. Значение -1 указывает, что предел не установлен. Значение по умолчанию — 0, т. е. обработка останавливается при первой ошибке. Также можно задать целое число.
KeyErrorLimitAction Это действие, выполняемое сервером, при достижении количества ключевых ошибок верхнего предела. Действие Остановить обработкусразу же завершает операцию обработки. С действием Остановить ведение журналаобработка продолжается, но ошибки больше не учитываются и не отмечаются в журнале.

Место установки свойств конфигурации ошибок

Используйте страницы свойств в SQL Server Management Studio после развертывания базы данных или в проекте модели в SQL Server Data Tools. Одинаковый набор свойств есть в обеих средах. Чтобы изменить значения по умолчанию, свойства конфигурации ошибок можно задать в файле msmdrsrv.ini либо сделать это с помощью команд Batch и Process , если обработка выполняется как скрипт.

Конфигурацию ошибок можно задать для любого объекта, который может быть обработан в отдельной операции.

SQL Server Management Studio

  1. В обозревателе объектов щелкните правой кнопкой мыши элемент Свойства для одного из следующих объектов: измерение, куб или секция.

  2. В окне свойств щелкните по вкладке Конфигурация ошибок.

SQL Server Data Tools

  1. Дважды щелкните по измерению или кубу в обозревателе решений. На панели ниже появитсяКонфигурация ошибок в окне свойств.

  2. Как вариант, допустимый только для одного измерения, щелкните правой кнопкой мыши измерение в обозревателе решений, выберите пункт Обработатьи затем Изменить параметры в диалоговом окне "Обработка измерения". Параметры конфигурации ошибок появятся на вкладке «Ошибки ключей измерения».

Отсутствующие ключи (KeyNotFound)

Записи с отсутствующим значением ключа не могут быть добавлены в базу данных, даже когда ошибки пропускаются или не задано предельное количество ошибок.

Сервер формирует ошибку KeyNotFound во время обработки секции, когда запись в таблице фактов содержит значение внешнего ключа, но внешний ключ не имеет соответствующей записи в связанной таблице измерения. Эта ошибка также происходит при обработке связанных или собранных по схеме «снежинка» таблиц измерений, когда запись в одном измерении указывает внешний ключ, который отсутствует в связанном измерении.

Когда возникает ошибка KeyNotFound , запись, послужившая причиной, назначается неизвестному элементу. Это поведение контролируется свойством Действие по ключу, в котором задано значение ConvertToUnknown. Назначенные таким образом записи можно изучать в дальнейшем.

Внешние ключи NULL в таблице фактов (KeyNotFound)

По умолчанию значение NULL в столбце внешнего ключа фактической таблицы преобразуется в нуль. С учетом того, что нуль не является допустимым значением внешнего ключа, ошибка KeyNotFound будет учтена и подсчитана для предельного количества ошибок, которое по умолчанию равно нулю.

Чтобы разрешить продолжение обработки, можно оперировать значением NULL до его преобразования и проверки на ошибки. Для этого установите в свойстве NullProcessing значение Ошибка.

Установка свойства NullProcessing для меры

  1. В обозревателе решений среды SQL Server Data Tools дважды щелкните по кубу, чтобы открыть его в конструкторе кубов.

  2. На панели мер щелкните нужную меру правой кнопкой мыши и выберите пункт Свойства.

  3. В окне свойств разверните узел Источник , чтобы увидеть свойство NullProcessing . По умолчанию свойству задано значение Автоматическая , что для элементов OLAP преобразует значения NULL в полях с числовыми данными в нули.

  4. Измените значение на Error , чтобы исключить любые записи, имеющие значение NULL, и избежать преобразование NULL в нуль. Это изменение позволяет избежать ошибок повторяющихся ключей, когда в ключевом столбце множество записей содержат нули, а также избежать ошибок KeyNotFound , когда внешний ключ с нулевым значением не имеет эквивалентного первичного ключа в связанной таблице измерения.

Ключи NULL в измерении

Чтобы продолжить обработку при обнаружении значений NULL во внешних ключах измерения, собранного по схеме «снежинка», сначала обработайте значения NULL, установив NullProcessing для свойства KeyColumn атрибута измерения. Это приведет к отбрасыванию или преобразованию записи до возникновения ошибки KeyNotFound .

Есть два варианта обработки значений NULL в атрибуте измерения:

  • Задайте значение NullProcessing=UnknownMember , чтобы выделить записи со значениями NULL для неизвестного элемента. Это формирует ошибку NullKeyConvertedToUnknown , которая по умолчанию пропускается.

  • Задайте значение NullProcessing=Error , чтобы исключить записи со значениями NULL. Это формирует ошибку NullKeyNotAllowed , которая записывается в журнал и учитывается при подсчете предельного количества ошибок ключа. Чтобы разрешить продолжение обработки, можно задать свойству конфигурации ошибок Ключ NULL не разрешен значение IgnoreError .

Значения NULL могут быть проблемой для неключевых полей, так как запросы MDX возвращают различные результаты в зависимости от того, интерпретируется ли NULL как нуль или пустое значение. По этой причине SQL Server Analysis Services предоставляет параметры обработки null, которые позволяют заранее определить нужное поведение преобразования.

Установка свойства NullProcessing для атрибута измерения

  1. В обозревателе решений среды SQL Server Data Tools дважды щелкните по измерению, чтобы открыть его в конструкторе измерения.

  2. На панели атрибутов щелкните нужный атрибут правой кнопкой мыши и выберите пункт Свойства.

  3. В окне свойств разверните узел KeyColumns , чтобы увидеть свойство NullProcessing . По умолчанию свойству задано значение Автоматическая , что преобразует значения NULL в полях с числовыми данными в нули. Установите для свойства значение Ошибка либо UnknownMember.

    Это модификация удаляет условия, которые формируют ошибку KeyNotFound , отбрасывая или преобразуя запись до ее проверки на ошибки.

    В зависимости от конфигурации ошибок одно из этих действий может привести к формированию ошибки, которая будет учтена. Возможно, потребуется настроить дополнительные свойства, например задать для KeyNotFound значение ReportAndContinue или для KeyErrorLimit значение, отличное от нуля, чтобы разрешить продолжение обработки, когда эти ошибки учитываются и отмечаются в журнале.

Повторяющиеся ключи, ведущие к несогласованным связям (KeyDuplicate)

По умолчанию присутствие повторяющегося ключа не прерывает обработку, но эта ошибка пропускается, а повторяющаяся запись исключается из базы данных.

Чтобы изменить такое поведение, установите KeyDuplicate в ReportAndContinue или ReportAndStop , чтобы эта ошибка была отмечена. Затем эту ошибку можно изучить, чтобы определить потенциальные изъяны в проектировании измерения.

Изменение предельного количества ошибок или действия при его достижении

Предельное количество ошибок можно поднять, чтобы разрешить формирование большего числа ошибок во время обработки. У нас нет рекомендаций, до какого числа стоит увеличивать предельное количество ошибок. Подходящее значение будет зависеть от конкретного случая. Ограничения ошибок указываются как KeyErrorLimit в свойствах ErrorConfiguration в SQL Server Data Tools или как число ошибок на вкладке Конфигурация ошибок для свойств измерений, кубов или групп мер в SQL Server Management Studio.

Можно задать действие, которое после достижения предельного количества ошибок остановит обработку или ведение журнала. Предположим, что задано действие StopLogging для предельного количества ошибок в 100 штук. На 101-й ошибке обработка продолжится, но ошибки больше не будут учитываться и не будут отмечаться в журнале. Действия с ограничением ошибок указываются как KeyErrorLimitAction в свойствах ErrorConfiguration в SQL Server Data Tools или как действие При возникновении ошибки на вкладке Конфигурация ошибок для свойств измерений, кубов или групп мер в SQL Server Management Studio.

Указание пути к журналу ошибок

Можно указать файл для хранения сообщения об ошибках, связанных с ключами и обнаруженных во время обработки. По умолчанию во время интерактивной обработки сообщения об ошибках можно просматривать в окне «Обработка». После закрытия окна или сеанса обработки сообщения они удаляются. Журнал будет содержать только сведения об ошибках, относящихся к ключам, идентичных ошибкам, отображаемым в диалоговых окнах обработки.

Ошибки будут заноситься в текстовый файл, который должен иметь расширение LOG. Файл будет пустым в случае отсутствия ошибок. По умолчанию файл создается в папке DATA. Можно указать и другую папку, главное, чтобы учетная запись служб Analysis Services имела разрешения на запись в это место.

Следующий шаг

Определитесь, будут ошибки прерывать обработку или же пропускаться. Помните, что пропускается только сама ошибка. Запись, приведшая к ошибке, не пропускается; она отбрасывается либо преобразуется в неизвестный элемент. Записи, нарушающие правила целостности данных, никогда не добавляются в базу данных. По умолчанию обработка прерывается при возникновении первой ошибки, но это поведение можно изменить, увеличив предельное количество ошибок. При разработке кубов может быть полезно сделать правила конфигурации ошибок менее строгими, чтобы разрешить продолжение обработки и собрать данные для тестирования.

Определитесь, следует ли изменить стандартные правила обработки значений NULL. По умолчанию значения NULL в строковом столбце обрабатываются как пустые значения, а NULL в числовом столбце — как нуль.

См. также:

Свойства журнала
Определение свойств Unknown Member и Null Processing