UPDATE CUBE (MDX)

更新多维数据集中指定的叶单元或非叶单元的值,可以跨依赖的叶单元为指定的非叶单元分配值。

语法

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
    返回元组的有效多维表达式 (MDX)。

  • New_Value
    有效的数值表达式。

  • Weight_Expression
    有效的 MDX(多维表达式)数值表达式,将返回介于 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 的性能。

请参阅

参考

其他资源