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
你可以在立方体中更新指定叶子或非叶子单元的值,并可选择将指定的非叶子单元格的值分配到相关的叶子单元格之间。 元组表达式指定的单元可以是多维空间中任意有效单元格(即该单元格不必是叶单元格)。 然而,该单元必须与 Sum 聚合函数进行聚合,且不得包含用于识别单元的元组中计算出的成员。
可以把CUBE语句看作UPDATE一个子程序,自动生成一系列单个单元格的回写操作,这些操作会汇总到指定的和。
以下是分配方法的描述。
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 立方体 分配应被视为交易目的的原子分配。 这意味着,如果任何一个分配操作因任何原因失败,比如公式错误或安全违规,整个 UPDATE 立方体操作都会失败。 在处理各个分配操作的计算之前,会对数据进行快照,以确保计算结果正确。
注意
当用于包含整数的度量时,USE_WEIGHTED_ALLOCATION方法可能返回因增量四舍五入变化而产生的不精确结果。
Important
当更新后的单元格不重叠时,可以使用更新隔离级别的连接字符串属性来提升CUBE的性能UPDATE。