Analysis Services 中的合并分区 (SSAS - 多维)

可以合并现有 Analysis Services 数据库中的分区,以合并同一度量值组的多个分区中的事实数据。

常见方案

要求

合并分区后更新分区源

按事实数据表或命名查询分段的分区的特殊注意事项

如何使用 SSMS 合并分区

如何使用 XMLA 合并分区

常见应用场景

分区使用的单个最常见配置涉及跨时间维度的数据分离。 与每个分区关联的时间粒度因特定于项目的业务要求而异。 例如,分段可能按年份,最近一年除以月,加上活动月份的单独分区。 激活的月份分区定期接收新数据。

当活动月份完成时,该分区将合并回年初至今的分区中的月份,流程会继续。 年底,形成了一个完整的新年分区。

正如此方案所表明的,合并分区可以成为定期执行的常规任务,从而提供一种渐进式方法来合并和组织历史数据。

要求

仅当分区满足以下所有条件时,才能合并分区:

  • 它们具有相同的度量值组。

  • 它们具有相同的结构。

  • 它们必须处于已处理状态。

  • 它们具有相同的存储模式。

  • 它们包含相同的聚合设计。

  • 它们共享相同的字符串存储兼容性级别(仅适用于分区唯一计数度量组)。

如果目标分区为空(即,它具有聚合设计,但没有聚合),则合并将删除源分区的聚合。 必须在分区上运行进程索引、进程完整或进程默认值才能生成聚合。

远程分区只能与其他使用 Analysis Services 的远程实例定义的远程分区合并。

注释

如果使用本地分区和远程分区的组合,另一种方法是创建包含合并数据的新分区,删除不再使用的分区。

为了创建一个未来合并的候选分区,在分区向导中创建分区时,可以选择从另一个多维数据集的分区复制聚合设计。 这可确保这些分区具有相同的聚合设计。 当它们合并时,源分区的聚合与目标分区的聚合相结合。

合并分区后更新分区源

分区按查询进行分段,例如用于处理数据的 SQL 查询的 WHERE 子句,或者由向分区提供数据的表或命名查询进行分段。 分区 Source 上的属性指示分区是绑定到查询还是表。

合并分区时,将合并分区的内容,但 Source 不会更新该属性以反映分区的其他范围。 这意味着,如果随后重新处理保留其原始 Source分区的分区,则会从该分区获取不正确的数据。 分区会在父级别错误地聚合数据。 以下示例演示了此行为。

问题

假设你有一个数据立方,其中包含有关三种软饮料产品的信息。 它具有三个使用同一事实数据表的分区。 这些分区按产品细分。 分区 1 包含有关 [ColaFull] 的数据,分区 2 包含有关 [ColaDecaf] 的数据,分区 3 包含有关 [ColaDiet] 的数据。 如果将分区 3 合并到分区 2 中,则生成的分区(分区 2)中的数据正确,多维数据集数据准确。 但是,处理分区 2 时,其内容可能由产品级别的成员的父级确定。 [SoftDrinks] 这一父级还包括分区 1 中的产品 [ColaFull]。 处理分区 2 会加载分区,其中包含所有软饮料的数据,包括 [ColaFull]。 然后,数据集中包含 [ColaFull] 的重复数据,导致向最终用户返回错误的数据。

解决方案

解决方案是更新 Source 属性、调整 WHERE 子句或命名查询,或手动合并基础事实数据表中的数据,以确保在分区扩展范围的情况下,后续处理准确。

在此示例中,将分区 3 合并到分区 2 后,可以在生成的分区 2 中提供筛选器(“Product” = 'ColaDecaf' OR “Product” = 'ColaDiet'),以指定仅从事实数据表中提取有关 [ColaDecaf] 和 [ColaDiet] 的数据,并排除与 [ColaFull] 相关的数据。 或者,可以在创建分区 2 和分区 3 时指定筛选器,并在合并过程中合并这些筛选器。 无论哪种情况,在处理分区后,多维数据集不包含重复数据。

结论

合并分区后,请始终检查 Source 该筛选器是否适合合并的数据。 如果从包含 Q1、Q2 和 Q3 历史数据的分区开始,并且现在合并 Q4,则需要调整筛选器以添加 Q4 的内容。 否则,对分区的后续处理将产生错误的结果。 对于 Q4,它不正确。

按事实数据表或命名查询分段的分区的特殊注意事项

除了查询,分区还可以按表或命名的查询进行分割。 如果源分区和目标分区在数据源或数据源视图中使用相同的事实数据表,则合并分区后该 Source 属性有效。 它指定适合生成的分区的事实数据表数据。 由于结果分区所需的事实存在于事实数据表中,因此无需对 Source 属性进行任何修改。

使用多个事实数据表或命名查询中的数据进行分区需要额外的工作。 必须将源分区的事实数据表中的事实手动合并到目标分区的事实数据表中。

或者,可以将合并分区的源更改为返回两个单独的事实数据表内容的命名查询。 如果未执行此手动步骤,事实数据表不包含完整信息。

出于同样的原因,从命名查询获取分段数据的分区也需要更新。 组合分区现在必须具有一个命名查询,该查询返回以前从单独的命名查询获取的组合结果集。

分区存储注意事项:MOLAP

合并 MOLAP 分区时,也会合并存储在分区的多维结构中的事实。 这会导致内部完整且一致的分区。 但是,存储在 MOLAP 分区中的事实是事实数据表中事实的副本。 随后处理分区时,会删除多维结构中的事实(仅适用于完全刷新),并根据数据源和分区的筛选条件指定,从事实数据表复制数据。 如果源分区使用与目标分区不同的事实数据表,则必须将源分区的事实数据表与目标分区的事实数据表手动合并,以确保处理生成的分区时可以使用完整的数据集。 如果两个分区基于不同的命名查询,则同样适用。

重要

包含不完整事实数据表的合并 MOLAP 分区包含一个内部合并的事实数据表数据副本,并且在处理之前可以正常运行。

分区存储注意事项:HOLAP 和 ROLAP 分区

合并具有不同事实数据表的 HOLAP 或 ROLAP 分区时,事实数据表不会自动合并。 除非手动合并事实数据表,否则只有与目标分区关联的事实数据表可用于生成的分区。 与源分区关联的事实不适用于生成的分区中的向下钻取,并且处理分区时,聚合不会汇总不可用表中的数据。

重要

包含不完整事实数据表的合并 HOLAP 或 ROLAP 分区包含准确的聚合,但事实不完整。 引用缺失事实的查询返回不正确的数据。 处理分区时,仅从可用信息计算聚合。

除非用户尝试向下钻取到不可用表中的事实,或者执行需要来自不可用表的事实的查询,否则可能不会注意到不可用的事实。 由于在合并过程中聚合被组合,基于聚合的查询返回准确的数据,而其他查询可能会返回不准确的数据。 即使在处理生成的分区后,也可能不会注意到不可用事实数据表中缺少的数据,尤其是在它仅表示合并数据的一小部分时。

可以在合并分区之前或之后合并事实数据表。 但是,在完成这两个操作之前,聚合的结果不会准确表示基本事实。 建议在用户未连接到包含这些分区的多维数据集时,合并访问不同事实数据表的 HOLAP 或 ROLAP 分区。

如何使用 SSMS 合并分区

重要

合并分区之前,请先复制数据筛选器信息(通常是基于 SQL 查询的筛选器的 WHERE 子句)。 稍后,完成合并后,应更新包含累积事实数据的分区的 Partition Source 属性。

  1. 在对象资源管理器中,展开包含要合并分区的多维数据集的 度量值组 节点,展开 分区,右键单击作为合并操作目标或目的地的分区。 例如,如果要将季度事实数据移到存储年度事实数据的分区,请选择包含年度事实数据的分区。

  2. 单击 “合并分区 ”以打开 “合并分区 <名称> ”对话框。

  3. “源分区”下,选中要与目标分区合并的每个源分区旁边的复选框,然后单击“ 确定”。

    注释

    将源合并到目标分区后,将立即删除源分区。 刷新分区文件夹以在合并完成后更新其内容。

  4. 右键单击包含累积数据的分区,然后选择“ 属性”。

  5. 打开属性 Source 并修改 WHERE 子句,使其包含刚刚合并的分区数据。 回想一下,该 Source 属性不会自动更新。 如果在不首先更新 Source的情况下重新处理,则可能不会获取所有预期的数据。

如何使用 XMLA 合并分区

有关 合并分区(XMLA)的信息,请参阅本主题。

另请参阅

处理分析服务对象
分区(Analysis Services - 多维数据)
创建和管理本地分区(Analysis Services)
创建和管理远程分区(Analysis Services)
设置分区写回
Write-Enabled 分区
为维度和分区配置字符串存储