使用多维数据集写入(MDX)

使用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 的要求。

  1. 为 Adventure Works 数据库中的销售目标度量值组启用写回。 在 Management Studio 中,右键单击度量值组,指向 写回选项,选择 “启用写回”。

    应会在写回文件夹中看到新的写回表。 表名称: WriteTable_Fact Sales Quota。

  2. 打开 MDX 查询窗口。 运行以下 select 语句以查看原始值:

    SELECT [Measures].[Sales Amount Quota] on 0 ,  
    [Employee].[Employee Department].[Title].&[Sales Representative].children on 1  
    FROM [Adventure Works]  
    
    

    应会看到每个代表的销售金额配额。

  3. 运行更新多维数据集语句以写回新值。 在此示例中,我们将销售金额配额设置为 0。 由于新值为 0,因此不要指定分配方法。

    UPDATE CUBE [Adventure Works]   
    SET ([Measures].[Sales Amount Quota], [Employee].[Employee Department].[Department].&[Sales]) = 0  
    
    
  4. 重新运行 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) 级别的属性增加到包含在写回过程中的维度中。

  • 更改写回中包含的维度的维度粒度。

另请参阅

修改数据 (MDX)