处理对象 (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 命令中仅可指定一个对象,但是在处理一个对象的同时会处理其所有子对象。 例如,在处理多维数据集中的一个度量值组时会处理该度量值组的所有分区;在处理一个数据库时会处理该数据库所包含的所有对象,包括多维数据集、维度和挖掘结构。

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

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

指定外部绑定

如果命令不包含BatchProcess命令,可以选择在命令的 BindingsDataSourceDataSourceView 属性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 会放弃重复记录。 根据 的 KeyDuplicate 属性 ErrorConfiguration,Analysis Services 可以:

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

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

ErrorConfiguration 可为执行 Process 命令过程中遇到的许多类似情况提供各种选项。

管理写回表

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

示例

说明

以下示例完全处理 Adventure Works DW Multidimensional 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>  

说明

以下示例以增量方式处理 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>