为什么要使用 Process Data 与 Process Full 来处理分区

Why would you want to use Process Data vs Process Full for processing a partition

如前所述here处理数据将只处理数据而不构建聚合或索引。如果分区中有数据,将在用源数据重新填充分区之前将其删除。另一方面,对于Process Full,Analysis Services 也会删除分区中的所有数据,然后处理分区。因此,如果连接到分区的属性层次结构设置为 AttributeHierarchyOptimizedState = true,Analysis Services 将为属性层次结构构建索引以提高查询性能。在对 Adventure Works 数据库进行查询后,我能够通过 运行 确认此行为:

SELECT
DIMENSION_NAME, ATTRIBUTE_NAME, ATTRIBUTE_INDEXED,
ATTRIBUTE_COUNT_MIN, ATTRIBUTE_COUNT_MAX
FROM SystemRestrictSchema($system.discover_partition_dimension_stat
        ,DATABASE_NAME = 'AdventureWorksDW2014Multidimensional-EE'
        ,CUBE_NAME = 'Adventure Works'
        ,MEASURE_GROUP_NAME = 'Internet Sales'
        ,PARTITION_NAME = 'Internet_Sales_2013') 

当我 Process data ATTRIBUTE_INDEXED 列的所有属性都设置为 false 时。当我执行 process full 时,大多数属性的 ATTRIBUTE_INDEXED 列都设置为 true。

所以我想知道为什么有人只想处理数据并因此牺牲查询性能来获得什么? 谢谢

简而言之——减少多维数据集停机时间和多维数据集准备时间。正如您所说,在 ProcessDataProcessIndex.
期间查询性能下降 处理通常会使多维数据集脱机,至少在提交更改时会这样,这可能会花费大量时间。为了减少由于处理而导致的多维数据集脱机时间,尤其是在大多维数据集上,使用 处理日期 选项处理具有更新数据的多维数据集分区(部分)。完成此处理后,立方体中的新数据可用于查询,但会降低性能。之后 Process Indexes 在受影响的分区上启动,这会在对象上构建所有索引和聚合。
根据我的经验,它仅在大型项目中使用并且有意义。另一个发现 - 运行 多维数据集上的进程默认值 在未指定确切度量值组等的情况下构建缺失的索引和聚合