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


Инструкция UPDATE CUBE (многомерные выражения)

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

Синтаксис

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

Аргументы

  • Cube_Name
    Допустимое строковое выражение, возвращающее имя куба.

  • Tuple_Expression
    Допустимое многомерное выражение, возвращающее кортеж.

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

  • Weight_Expression
    Допустимое числовое многомерное выражение, возвращающее десятичное значение от 0 до 1.

Замечания

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

Можно рассматривать инструкцию 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. Оно определяет ту часть размещаемого значения, которую требуется присвоить конечным ячейкам, участвующим в размещении. Задачей программиста клиентского приложения является создание выражений, статистических значений, свертки которых будут равны размещаемому значению выражения.

ПредупреждениеВнимание!

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

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

ПредупреждениеВнимание!

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

Важное примечаниеВажно!

Если обновленные ячейки не пересекаются, свойство строки соединения Update Isolation Level может быть использовано для повышения производительности инструкции UPDATE CUBE.