Обработка данных MDX — UPDATE CUBE

Оператор UPDATE CUBE используется для записи данных в любую ячейку куба, которая агрегируется в родительский элемент с помощью агрегации SUM. Для более подробного объяснения и примера см. раздел «Понимание распределения» в этом блоге: Создание приложения для записи обратной связи с помощью аналитических сервисов (блог).

Syntax

  
UPDATE [ CUBE ] Cube_Name   
   SET   
            <update clause>   
           [, <update clause> ...n ]  
  
<update clause> ::=   
      Tuple_Expression[.VALUE]= New_Value  
      [   
        USE_EQUAL_ALLOCATION   
        | USE_EQUAL_INCREMENT   
        | USE_WEIGHTED_ALLOCATION [ BY Weight_Expression]   
        | USE_WEIGHTED_INCREMENT [ BY Weight_Expression]  
      ]  

Arguments

Cube_Name
Действительная строка, дающая имя куба.

Tuple_Expression
Допустимое выражение многомерных выражений (MDX), возвращающее кортеж.

New_Value
Допустимое числовое выражение.

Weight_Expression
Действительное числовое выражение многомерных выражений (MDX), которое возвращает десятичное значение от 0 до 1.

Remarks

Вы можете обновить значение определённой ячейки или нелистовой ячейки в кубе, при желании выделяя значение для определённой нелистовой ячейки между зависимыми листовыми ячейками. Ячейка, заданная выражением кортежа, может быть любой действительной ячейкой в многомерном пространстве (то есть клетка не обязательно должна быть листовой). Однако ячейка должна быть агрегирована с функцией суммы агрегата и не должна включать вычисленный элемент в кортеже, используемый для идентификации ячейки.

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

Ниже приведено описание методов распределения.

USE_EQUAL_ALLOCATION: Каждой ячейке листа, внесённой в обновлённую ячейку, будет присвоено равное значение на основе следующего выражения.

<leaf cell value> =   
<New Value> / Count(leaf cells that are contained in <tuple>)  

USE_EQUAL_INCREMENT: Каждая клетка листа, вносящая вклад в обновлённую ячейку, будет изменена согласно следующему выражению.

<leaf cell value> = <leaf cell value> +   
(<New Value > - <existing value>) /  
Count(leaf cells contained in <tuple>)  

USE_WEIGHTED_ALLOCATION: Каждой ячейке листа, внесённой в обновлённую ячейку, будет присвоено равное значение, основанное на следующем выражении.

<leaf cell value> = < New Value> * Weight_Expression  

USE_WEIGHTED_INCREMENT: Каждая клетка листа, вносящая вклад в обновлённую ячейку, будет изменена согласно следующему выражению.

<leaf cell value> = <leaf cell value> +   
(<New Value> - <existing value>)  * Weight_Expression  

Если выражение веса не указано, UPDATE оператор CUBE неявно использует следующее выражение.

Weight_Expression = <leaf cell value> / <existing value>  

Выражение веса должно выражаться в виде десятичного значения между нулём (0) и 1. Это значение указывает отношение выделенного значения, которое вы хотите присвоить к ячекам листа, на которые влияет распределение. Программист клиентских приложений отвечает за создание выражений, чьи агрегированные значения при сводке равны выделенному значению выражения.

Caution

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

Каждое UPDATE распределение CUBE должно считаться атомарным для транзакционных целей. Это означает, что если любая из операций распределения не сработает по какой-либо причине, например, из-за ошибки формулы или нарушения безопасности, вся UPDATE операция CUBE провалится. Перед обработкой расчётов отдельных операций распределения делается снимок данных, чтобы убедиться в точности полученных расчётов.

Caution

При использовании на мере, содержащей целые числа, метод USE_WEIGHTED_ALLOCATION может возвращать неточные результаты, вызванные инкрементальными изменениями округления.

Important

Когда обновлённые ячейки не пересекаются, для повышения производительности CUBE может использоваться UPDATE Level строка подключения.