处理对象 (XMLA)

在MICROSOFT SQL Server Analysis Services 中,处理是将数据转换为业务分析信息的步骤或一系列步骤。 处理因对象类型而异,但处理始终是将数据转换为信息的一部分。

若要处理 Analysis Services 对象,可以使用 Process 命令。 该 Process 命令可以处理 Analysis Services 实例上的以下对象:

  • 立方体

  • 数据库

  • 尺寸

  • 度量值组

  • 挖掘模型

  • 采矿结构

  • 分区

若要控制对象的处理,该 Process 命令具有可以设置的各种属性。 该 Process 命令具有控制的属性:将执行多少处理、将处理哪些对象、是否使用行外绑定、如何处理错误以及如何管理写回表。

指定处理选项

命令的 ProcessType 属性指定处理对象时要使用的处理选项。 有关处理选项的详细信息,请参阅“处理选项和设置”(Analysis Services)。

下表列出了属性的常量 Type 以及可以使用每个常量处理的各种对象。

Type 适用的对象
ProcessFull 多维数据集, 数据库, 维度, 度量值组, 挖掘模型, 挖掘结构, 分区
ProcessAdd 维度、分区
ProcessUpdate 尺寸
ProcessIndexes 维度、多维数据集、度量值组、分区
ProcessData 维度、多维数据集、度量值组、分区
ProcessDefault 多维数据集, 数据库, 维度, 度量值组, 挖掘模型, 挖掘结构, 分区
ProcessClear 多维数据集, 数据库, 维度, 度量值组, 挖掘模型, 挖掘结构, 分区
ProcessStructure 多维数据集,挖掘结构
ProcessClearStructureOnly 矿业结构
ProcessScriptCache 立方体

有关处理 Analysis Services 对象的详细信息,请参阅 多维模型对象处理

指定要处理的对象

命令的 ProcessObject 属性包含要处理的对象的对象标识符。 命令中只能指定一个 Process 对象,但处理对象也会处理任何子对象。 例如,处理多维数据集中的度量值组处理该度量值组的所有分区,同时处理数据库包含的所有对象,包括多维数据集、维度和挖掘结构。

如果将命令的属性Process设置为 ProcessAffectedObjects true,则也会处理受处理指定对象影响的任何相关对象。 例如,如果使用命令中的 ProcessProcessUpdate 处理选项以增量方式更新维度,则 Analysis Services 如果设置为 true,则由于要添加或删除成员而使聚合失效的任何分区也将被 Analysis Services ProcessAffectedObjects 处理。 在这种情况下,单个 Process 命令可以处理 Analysis Services 实例上的多个对象,但 Analysis Services 确定除了命令中指定的 Process 单个对象外,哪些对象也必须进行处理。

但是,可以使用命令中的Batch多个Process命令同时处理多个对象,例如维度。 批处理作为 Analysis Services 实例上的对象串行处理或并行处理提供比使用 ProcessAffectedObjects 特性更精细的控制级别,并允许你优化用于大型 Analysis Services 数据库的处理方法。 有关执行批处理作的详细信息,请参阅“执行批处理作”(XMLA)。

指定行外绑定

如果命令不包含BatchProcess命令,可以选择在要处理的对象的 BindingsDataSource 和 DataSourceView 属性Process中指定行外绑定。 行外绑定是对数据源、数据源视图和其他对象(其中绑定仅在命令执行 Process 期间存在)的引用,这些对象将替代与正在处理的对象关联的任何现有绑定。 如果未指定行外绑定,则使用当前与要处理的对象关联的绑定。

在以下情况下使用脱机绑定:

  • 以增量方式处理分区,其中必须指定现有事实数据表的替代事实数据表或筛选器,以确保行不计数两次。

  • 在Microsoft SQL Server Integration Services 中使用数据流任务在处理维度、挖掘模型或分区时提供数据。

行外绑定描述为 Analysis Services 脚本语言(ASSL)的一部分。 有关 ASSL 中的脱机绑定的详细信息,请参阅数据源和绑定(SSAS 多维)。

以增量方式更新分区

增量更新已处理的分区通常需要一个行外绑定,因为为分区指定的绑定引用已在分区中聚合的事实数据表数据。 使用 Process 命令以增量方式更新已处理的分区时,Analysis Services 将执行以下作:

  • 创建一个临时分区,其结构与要增量更新的分区的结构相同。

  • 使用命令中指定的 Process 行外绑定处理临时分区。

  • 将临时分区与现有的所选分区合并。

有关使用 XML for Analysis 合并分区的详细信息(XMLA),请参阅合并分区(XMLA)。

处理错误

使用命令的 ProcessErrorConfiguration 属性可以指定如何处理处理对象时遇到的错误。 例如,处理维度时,Analysis Services 在键属性的键列中遇到重复值。 由于属性键必须是唯一的,Analysis Services 会放弃重复的记录。 Analysis Services 的 KeyDuplicate 属性 ErrorConfiguration可以:

  • 忽略错误并继续处理维度。

  • 返回一条消息,指出 Analysis Services 遇到重复键并继续处理。

有许多类似的条件可用于 ErrorConfiguration 在命令期间 Process 提供选项。

管理写回表

Process如果命令遇到启用了写入的分区,或者此类分区的多维数据集或度量值组(尚未完全处理),则该分区可能尚不存在写回表。 命令的 ProcessWritebackTableCreation 属性确定 Analysis Services 是否应创建写回表。

例子

DESCRIPTION

以下示例完全处理 Adventure Works DW 多维 2012 示例 Analysis Services 数据库。

代码

<Process xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">  
  <Object>  
    <DatabaseID>Adventure Works DW Multidimensional 2012</DatabaseID>  
  </Object>  
  <Type>ProcessFull</Type>  
  <WriteBackTableCreation>UseExisting</WriteBackTableCreation>  
</Process>  

DESCRIPTION

以下示例以增量方式处理 Adventure Works DW 多维 2012 示例 Analysis Services 数据库中 Adventure Works DW 多维数据集的 Internet Sales 度量值组中的 Internet_Sales_2004 分区。 该Process命令使用命令属性Process中的Bindings行外查询绑定,检索要从中生成要添加到分区的聚合的事实数据表行,以便为 2006 年 12 月 31 日之后的订单日期添加聚合。

代码

<Process ProcessAffectedObjects="true" xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">  
  <Object>  
    <DatabaseID>Adventure Works DW Multidimensional 2012</DatabaseID>  
    <CubeID>Adventure Works DW</CubeID>  
    <MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>  
    <PartitionID>Internet_Sales_2006</PartitionID>  
  </Object>  
  <Bindings>  
    <Binding>  
      <DatabaseID>Adventure Works DW Multidimensional 2012</DatabaseID>  
      <CubeID>Adventure Works DW</CubeID>  
      <MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>  
      <PartitionID>Internet_Sales_2006</PartitionID>  
      <Source xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="QueryBinding">  
        <DataSourceID>Adventure Works DW</DataSourceID>  
        <QueryDefinition>  
          SELECT  
            [dbo].[FactInternetSales].[ProductKey],  
            [dbo].[FactInternetSales].[OrderDateKey],  
            [dbo].[FactInternetSales].[DueDateKey],  
            [dbo].[FactInternetSales].[ShipDateKey],   
            [dbo].[FactInternetSales].[CustomerKey],   
            [dbo].[FactInternetSales].[PromotionKey],  
            [dbo].[FactInternetSales].[CurrencyKey],  
            [dbo].[FactInternetSales].[SalesTerritoryKey],  
            [dbo].[FactInternetSales].[SalesOrderNumber],  
            [dbo].[FactInternetSales].[SalesOrderLineNumber],  
            [dbo].[FactInternetSales].[RevisionNumber],  
            [dbo].[FactInternetSales].[OrderQuantity],  
            [dbo].[FactInternetSales].[UnitPrice],  
            [dbo].[FactInternetSales].[ExtendedAmount],  
            [dbo].[FactInternetSales].[UnitPriceDiscountPct],  
            [dbo].[FactInternetSales].[DiscountAmount],  
            [dbo].[FactInternetSales].[ProductStandardCost],  
            [dbo].[FactInternetSales].[TotalProductCost],  
            [dbo].[FactInternetSales].[SalesAmount],  
            [dbo].[FactInternetSales].[TaxAmt],  
            [dbo].[FactInternetSales].[Freight],  
            [dbo].[FactInternetSales].[CarrierTrackingNumber],  
            [dbo].[FactInternetSales].[CustomerPONumber]  
          FROM [dbo].[FactInternetSales]  
          WHERE OrderDateKey > '1280'  
        </QueryDefinition>  
      </Source>  
    </Binding>  
  </Bindings>  
  <Type>ProcessAdd</Type>  
  <WriteBackTableCreation>UseExisting</WriteBackTableCreation>  
</Process>