使用UPDATE CUBE语句更新一个多维数据集。 此语句允许您使用特定值更新元组中的某个元素。 若要有效地使用 UPDATE CUBE 语句更新多维数据集,必须了解语句的语法、可能发生的错误条件以及更新对多维数据集的影响。
UPDATE CUBE 语句语法
以下语法描述了 UPDATE CUBE 语句:
UPDATE [CUBE] <Cube_Name> SET <tuple>.VALUE = <value> [,<tuple>.VALUE = <value>...]
[ USE_EQUAL_ALLOCATION | USE_EQUAL_INCREMENT |
USE_WEIGHTED_ALLOCATION [BY <weight value_expression>] |
USE_WEIGHTED_INCREMENT [BY <weight value_expression>] ]
如果未为元组指定完整的坐标集,则未指定的坐标将使用层次结构的默认成员。 标识的元组必须引用使用 Sum 函数聚合的单元格,并且不得使用计算成员作为单元格的坐标之一。
可以将 UPDATE CUBE 语句视为一个子例程,该子例程生成对原子单元进行的一系列写回操作。 所有这些单个写回操作随后汇总为指定的总和。
注释
更新后的单元格不重叠时, Update Isolation Level 连接字符串属性可用于增强 UPDATE CUBE 的性能。 有关详细信息,请参阅 ConnectionString。
示例:
可以使用 Adventure Works 多维数据集中的“销售目标”度量组测试 UPDATE CUBE。 此度量值组由 SUM 聚合的度量值组成,这是 UPDATE CUBE 的要求。
为 Adventure Works 数据库中的销售目标度量值组启用写回。 在 Management Studio 中,右键单击度量值组,指向 写回选项,选择 “启用写回”。
应会在写回文件夹中看到新的写回表。 表名称: WriteTable_Fact Sales Quota。
打开 MDX 查询窗口。 运行以下 select 语句以查看原始值:
SELECT [Measures].[Sales Amount Quota] on 0 , [Employee].[Employee Department].[Title].&[Sales Representative].children on 1 FROM [Adventure Works]应会看到每个代表的销售金额配额。
运行更新多维数据集语句以写回新值。 在此示例中,我们将销售金额配额设置为 0。 由于新值为 0,因此不要指定分配方法。
UPDATE CUBE [Adventure Works] SET ([Measures].[Sales Amount Quota], [Employee].[Employee Department].[Department].&[Sales]) = 0重新运行 SELECT 语句。 现在应会看到配额为零。
写回值限制为当前会话。 若要跨用户和会话保留值,请处理写回表。 在 Management Studio 中,右键单击WriteTable_Fact“销售配额”,然后选择“ 流程”。
若要指定分配方法,新值必须大于零。 在此示例中,销售金额配额的新值为 200 万,分配方法将金额分配给所有销售代表。
UPDATE CUBE [Adventure Works]
SET ([Measures].[Sales Amount Quota], [Employee].[Employee Department].[Department].&[Sales]) = 2000000
USE_EQUAL_ALLOCATION
错误条件
下表描述了导致写回失败的原因以及这些错误的结果。
| 错误条件 | 结果 |
|---|---|
| 更新包括同一维度中彼此不存在的成员。 | 更新将失败。 立方体空间不会包含被引用的单元格。 |
| 更新包括针对无符号类型的度量的一个度量值。 | 更新将失败。 增量要求度量值能够取负值。 |
| 更新包括聚合非总和的度量值。 | 出现错误。 |
| 在子多维数据集上尝试更新。 | 发生错误。 |
多维数据集更改的影响
以下更改不会影响写回:
处理多维数据集、多维数据集的度量值组或多维数据集的维度。
向任何维度添加属性。
添加新维度。
删除不包含回写过程的维度。
添加、修改或删除层次结构。
添加新度量值。
如果不删除写回数据,则无法进行以下更改:
删除属性或其属性层次结构,如果该属性包含在写回中。 这包括显式删除属性或其属性层次结构,或删除属性的父维度。
删除写回中包含的度量值。
将不含
(All)级别的属性增加到包含在写回过程中的维度中。更改写回中包含的维度的维度粒度。