处理对象 (XMLA)
在 Microsoft SQL Server Analysis Services 中,处理指的是将数据转换为业务分析所需信息的一个步骤或一系列步骤。处理因对象类型而异,但处理始终是将数据转换为信息的一个环节。
若要处理 Analysis Services 对象,可以使用 Process 命令。Process 命令可以对 Analysis Services 实例处理以下对象:
多维数据集
数据库
维度
度量值组
挖掘模型
挖掘结构
分区
为了控制对象的处理,Process 命令有多个可设置的属性。Process 命令的属性可以控制以下方面:处理的程度、处理的对象、是否使用外部绑定、如何处理错误以及如何管理写回表。
指定处理选项
Process 命令的 Type 属性用于指定处理对象时使用的处理选项。有关处理选项的详细信息,请参阅 处理选项和设置。
下表列出了 Type 属性的各个常量以及使用每一常量时可处理的不同对象。
Type 值 |
适用对象 |
---|---|
ProcessFull |
多维数据集、数据库、维度、度量值组、挖掘模型、挖掘结构和分区 |
ProcessAdd |
维度和分区 |
ProcessUpdate |
维度 |
ProcessIndexes |
维度、多维数据集、度量值组和分区 |
ProcessData |
维度、多维数据集、度量值组和分区 |
ProcessDefault |
多维数据集、数据库、维度、度量值组、挖掘模型、挖掘结构和分区 |
ProcessClear |
多维数据集、数据库、维度、度量值组、挖掘模型、挖掘结构和分区 |
ProcessStructure |
多维数据集和挖掘结构 |
ProcessClearStructureOnly |
挖掘结构 |
ProcessScriptCache |
多维数据集 |
有关处理 Analysis Services 对象的详细信息,请参阅处理 Analysis Services 对象。
指定要处理的对象
Process 命令的 Object 属性包含要处理的对象的对象标识符。在 Process 命令中仅可指定一个对象,但是在处理一个对象的同时会处理其所有子对象。例如,在处理多维数据集中的一个度量值组时会处理该度量值组的所有分区;在处理一个数据库时会处理该数据库所包含的所有对象,包括多维数据集、维度和挖掘结构。
如果将 Process 命令的 ProcessAffectedObjects 属性设置为 true,则处理指定对象时所影响的所有相关对象都会得到处理。例如,在使用 Process 命令中的 ProcessUpdate 处理选项对一个维度进行增量更新时,如果 ProcessAffectedObjects 设置为 true,则 Analysis Services 也会对其聚合因成员的添加或删除而变得无效的所有分区进行处理。在这种情况下,单个 Process 命令可以处理 Analysis Services 实例上的多个对象,但是 Analysis Services 会确定除 Process 命令中指定的单个对象外,哪些对象也必须加以处理。
不过,在 Batch 命令中使用多个 Process 命令可以同时处理多个对象,如多个维度。与使用 ProcessAffectedObjects 属性相比,批处理操作可为 Analysis Services 实例上对象的串行或并行处理提供更为精确的控制,从而为较大的 Analysis Services 数据库提供更好的处理方法。有关执行批处理操作的详细信息,请参阅执行批处理操作 (XMLA)。
指定外部绑定
如果 Process 命令未包含在 Batch 命令中,则可以选择在 Process 命令的 Bindings、DataSource 和 DataSourceView 属性中为要处理的对象指定外部绑定。外部绑定是对数据源、数据源视图和其他对象的引用(在这些数据源、数据源视图和对象中,该绑定仅在执行 Process 命令时存在),并会覆盖与所处理对象关联的所有现有绑定。如果未指定外部绑定,则使用当前与要处理的对象关联的绑定。
外部绑定用在以下情况下:
增量处理一个分区,其中必须指定另一个事实数据表或现有事实数据表上的一个筛选器以确保不会对行进行两次计数。
处理维度、挖掘模型或分区时使用 Microsoft SQL Server Integration Services 中的数据流任务提供数据。
外部绑定属于 Analysis Services 脚本语言 (ASSL) 的一部分。有关 ASSL 中的外部绑定的详细信息,请参阅数据源和绑定(Analysis Services - 多维数据)。
增量更新分区
增量更新已处理的分区时通常需要外部绑定,原因在于为该分区指定的绑定会引用已在该分区中聚合的事实数据表数据。使用 Process 命令增量更新已处理的分区时,Analysis Services 会执行以下操作:
创建一个与要增量更新的分区具有相同结构的临时分区。
使用 Process 命令中指定的外部绑定处理该临时分区。
将该临时分区与所选现有分区合并。
有关使用 XML for Analysis (XMLA) 合并分区的详细信息,请参阅合并分区 (XMLA)。
对处理错误进行处理
可以使用 Process 命令的 ErrorConfiguration 属性用于指定如何对处理对象过程中遇到的错误进行处理。例如,在处理维度时,Analysis Services 在键属性的键列中遇到重复的值。因为属性键必须是唯一的,因此 Analysis Services 会丢弃重复的记录。根据 ErrorConfiguration 的 KeyDuplicate 属性,Analysis Services 将:
忽略错误并继续处理该维度。
返回说明 Analysis Services 遇到了重复键的消息并继续处理。
ErrorConfiguration 可为执行 Process 命令过程中遇到的许多类似情况提供各种选项。
管理写回表
如果 Process 命令遇到一个可写入的分区或者此类分区的多维数据集或度量值组,而且是未完整处理的,则该分区的写回表可能不存在。Process 命令的 WritebackTableCreation 属性用于确定 Analysis Services 是否应创建写回表。
示例
说明
下面的示例对 Adventure Works DW 示例 Analysis Services 数据库进行完整处理。
代码
<Process xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>Adventure Works DW</DatabaseID>
</Object>
<Type>ProcessFull</Type>
<WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>
说明
下面的示例增量处理 Adventure Works DW 示例 Analysis Services 数据库中 Adventure Works DW 多维数据集的 Internet Sales 度量值组的 Internet_Sales_2004 分区。通过在 Process 命令的 Bindings 属性中使用外部查询绑定以检索从中生成要添加到该分区中的聚合的事实数据表行,Process 命令将订单日期晚于 2006 年 12 月 31 日的聚合添加到该分区中。
代码
<Process ProcessAffectedObjects="true" xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>Adventure Works DW</DatabaseID>
<CubeID>Adventure Works DW</CubeID>
<MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
<PartitionID>Internet_Sales_2006</PartitionID>
</Object>
<Bindings>
<Binding>
<DatabaseID>Adventure Works DW</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>