分区是度量值组数据的一部分的容器。 MDX 查询中看不到分区;所有查询都反映度量值组的全部内容,而不考虑为度量值组定义了多少个分区。 分区的数据内容由分区的查询绑定和切片表达式定义。
简单 Partition 对象由基本信息、切片定义、聚合设计等组成。 基本信息包括分区的名称、存储模式、处理模式等。 切片定义是指定元组或集的 MDX 表达式。 切片定义具有与 StrToSet MDX 函数相同的限制。 切片定义与 CONSTRAINTSED 参数一起使用时,可以使用多维数据集中的维度、层次结构、级别和成员名称、键、唯一名称或其他命名对象,但不能使用 MDX 函数。 聚合设计是可跨多个分区共享的聚合定义的集合。 默认值取自父多维数据集的聚合设计。
Microsoft SQL Server Analysis Services 使用分区来管理和存储多维数据集中度量值组的数据和聚合。 每个度量值组至少有一个分区;定义度量值组时,将创建此分区。 为度量值组创建新分区时,新分区将添加到度量值组已存在的分区集。 度量值组反映其所有分区中包含的合并数据。 这意味着必须确保度量值组中分区的数据是度量值组中任何其他分区的数据独占,以确保数据不会多次反映在度量值组中。 度量值组的原始分区基于多维数据集的数据源视图中的单个事实数据表。 当度量值组有多个分区时,每个分区都可以在数据源视图或多维数据集的基础关系数据源中引用不同的表。 如果每个分区限制为表中的不同行,度量值组中的多个分区可以引用同一个表。
分区是管理多维数据集(尤其是大型多维数据集)的强大灵活方法。 例如,包含销售信息的多维数据集可以包含过去一年数据的分区,以及当前年份的每个季度的分区。 仅当将当前信息添加到多维数据集时,才需要处理当前季度分区;处理较少的数据将通过减少处理时间来提高处理性能。 到年底,四个季度分区可以合并为年份的单个分区,并为新一年第一季度创建一个新分区。 此外,作为数据仓库加载和多维数据集处理过程的一部分,可以自动执行此新的分区创建过程。
多维数据集的业务用户看不到分区。 但是,管理员可以配置、添加或删除分区。 每个分区存储在一组单独的文件中。 每个分区的聚合数据可以存储在定义分区的 Analysis Services 实例、另一个 Analysis Services 实例或用于提供分区源数据的数据源中。 分区允许多维数据集的源数据和聚合数据分布在多个硬盘驱动器和多台服务器计算机之间。 对于大小中等到较大的多维数据集,分区可以大大提高查询性能、负载性能和多维数据集维护的便利性。 有关远程分区的详细信息,请参阅 远程分区。
每个分区的存储模式可以独立于度量值组中的其他分区进行配置。 可以使用源数据位置、存储模式、主动缓存和聚合设计的任何选项组合来存储分区。 使用实时 OLAP 和主动缓存的选项,可以在设计分区时将查询速度与延迟进行平衡。 存储选项还可以应用于度量值组中的相关维度和事实。 这种灵活性使你可以设计适合你的需求的多维数据集存储策略。 有关详细信息,请参阅分区存储模式和处理、聚合和聚合设计以及主动缓存(分区)。
分区结构
分区的结构必须与度量值组的结构匹配,这意味着定义度量值组的度量值也必须在分区中定义,以及所有相关维度。 因此,创建分区时,它会自动继承为度量值组定义的同一组度量值和相关维度。
但是,度量值组中的每个分区可以具有不同的事实数据表,这些事实数据表可以来自不同的数据源。 当度量值组中的不同分区具有不同的事实数据表时,表必须足够类似于维护度量值组的结构,这意味着处理查询为所有分区的所有事实数据表返回相同的列和相同的数据类型。
当不同分区的事实数据表来自不同数据源时,任何相关维度的源表以及任何中间事实数据表也必须存在于所有数据源中,并且必须在所有数据库中具有相同的结构。 此外,用于定义与度量值组相关的多维数据集维度的属性的所有维度表列都必须存在于所有数据源中。 如果分区源表的结构与度量值组的源表具有相同的结构,则无需定义分区的源表与相关维度表之间的所有联接。
不用于定义度量值组中度量值的列可以存在于某些事实数据表中,但在其他事实数据表中不存在。 同样,不用于定义相关维度表中属性的列可以存在于某些数据库中,但在其他数据库中不存在。 不用于事实数据表或相关维度表的表可以存在于某些数据库中,但在其他数据库中不存在。
数据源和分区存储
分区基于数据源中的表或视图,或基于数据源视图中的表或命名查询。 存储分区数据的位置由数据源绑定定义。 通常,可以水平或垂直分区度量值组:
在水平分区度量值组中,度量值组中的每个分区都基于单独的表。 将数据分隔到多个表中时,这种分区是合适的。 例如,某些关系数据库具有每个月数据的单独表。
在垂直分区度量值组中,度量值组基于单个表,每个分区都基于筛选分区数据的源系统查询。 例如,如果单个表包含几个月的数据,则度量值组仍可以通过应用返回每个分区单独月份数据的 Transact-SQL WHERE 子句来按月对度量值组进行分区。
每个分区都有存储设置,用于确定分区的数据和聚合是存储在 Analysis Services 的本地实例中,还是存储在使用 Analysis Services 的另一个实例的远程分区中。 存储设置还可以指定存储模式以及是否使用主动缓存来控制分区的延迟。 有关详细信息,请参阅 分区存储模式和处理、 主动缓存(分区)和 远程分区。
增量更新
在多分区度量值组中创建和管理分区时,必须采取特殊预防措施,以确保多维数据集数据准确。 尽管这些预防措施通常不适用于单分区度量值组,但在以增量方式更新分区时,它们确实适用。 增量更新分区时,会创建一个新的临时分区,该分区的结构与源分区的结构相同。 将处理临时分区,然后与源分区合并。 因此,必须确保填充临时分区的处理查询不会复制现有分区中已有的任何数据。