可以使用 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 中,右键单击一个度量值组,指向**“写回选项”,选择“启用写回”**。
您应在 Writeback 文件夹中看到新的写回表。 表名称为 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]
您应看到每个代表的销售配额。
运行 update cube 语句以写回新值。 在此示例中,我们将销售配额设置为 0。 因为新值为 0,不指定分配方法。
UPDATE CUBE [Adventure Works] SET ([Measures].[Sales Amount Quota], [Employee].[Employee Department].[Department].&[Sales]) = 0
重新运行 SELECT 语句。 您现在应看到配额为零。
将写回值限制为当前会话。 要使该值可用于各个用户和会话,请处理写回表。 在 Management Studio 中,右键单击 WriteTable_Fact Sales Quota 并选择**“处理”**。
要指定分配方法,新值必须大于零。 在此示例中,销售配额的新值为二百万,分配方法将该金额在所有销售代表间分配。
UPDATE CUBE [Adventure Works]
SET ([Measures].[Sales Amount Quota], [Employee].[Employee Department].[Department].&[Sales]) = 2000000
USE_EQUAL_ALLOCATION
错误条件
下表介绍了可能导致写回失败的原因以及这些错误的结果。
错误条件 |
结果 |
---|---|
更新包括同一维度中不能共存的成员。 |
更新将失败。 多维数据集空间将不包含被引用单元。 |
更新包括作为无符号类型的度量值的来源的度量值。 |
更新将失败。 增量需要度量值能够取负值。 |
更新包括执行非求和聚合的度量值。 |
已引发错误。 |
尝试更新子多维数据集。 |
已引发错误。 |
多维数据集更改的影响
下列更改将不会对写回产生影响:
处理多维数据集、多维数据集的度量值组或多维数据集的维度。
向任何维度中添加属性。
添加新维度。
删除不包含写回的维度。
添加、修改或删除层次结构。
添加新度量值。
只有删除写回数据才能进行下列更改:
删除属性或其属性层次结构(如果该属性包含在写回中)。 这包括显式删除属性或其属性层次结构,或者删除属性的父维度。
删除写回中包含的度量值。
向写回中包含的维度添加不带 (All) 级别的属性。
更改写回中包含的维度的维度粒度。