查看维层次类型

每个 ASO 维都分配了一个层次类型:“存储”、“动态”或“多个”。层次类型为“存储”的维的元素会存储起来,而且聚合在聚合视图中进行实体化。

“动态”维的元素无法聚合到视图中。在“多个”类型的维中,层代 2(顶级节点的子代)设置为“存储”或“动态”。对于“多个”层次类型,可以在层代 2 选择“存储”或“动态”作为层次类型。第一个层代 2 子项(通常是主层次)的类型必须为“存储”。对于此类层次,您应编辑所有层代 2 成员并选择“存储”(首选)或“动态”作为层次类型。

首选存储维以确保获得最佳性能。由于选择的层次类型也会影响可以创建的聚合视图数,因此 Oracle 建议如下:

  • 如有可能,仅使用“存储”类型维。
  • 如果无法使用“存储”类型维,尽可能使用“多个”。
  • 对于“多个”层次维,如有可能,将层代 2 设为“存储”而不是“动态”。
  • 仅当无法使用“多个”层次类型时才使用“动态”维。
  • 帐户维必须始终为“动态”,因为它是 ASO 压缩维。这无法更改。

维转换中层次类型的影响

例如,在将维从“动态”转换为“多个”时,节点成员 (Gen1) 会成为仅标签。如果动态维在层代 2 只有一个子代 (+),则转换将发挥作用。如果需要 Gen1(节点)级别的合计,则从“动态”到“多个”的维转换可能无法完成。

设置层次类型

层次类型(“存储”、“动态”或“多个”)针对每个维的顶级节点成员设置。在所有情况下,后代都继承父代的层次类型。因此,“存储”和“动态”层次类型是针对整个维设置的。对于给定“多个”层次类型的维,将每个层代 2 成员(节点成员的子代)设为“动态”或“存储”。

“存储”层次类型的注意事项如下:

  • “存储”层次类型可包含合并运算符 +(加法)和 ~(忽略)。
  • 仅当成员的父级设置为 LABEL_ONLY 时,才能在“存储”层次类型中使用无合并或忽略 (~) 运算符。

“动态”层次类型的注意事项如下:

  • 具有“动态”层次类型的成员可以使用任何合并运算符,包括加法和忽略。
  • 可以在“动态”层次类型中使用公式。
  • 在某些情况下,共享成员可能存在于“存储”层次类型中,但可能需要位于“动态”层次中(请参阅“共享成员和层次类型”)。
  • 避免将大型维设为“动态”。

公式和层次类型的使用

尽管可以在“动态”层次类型中使用公式,但需要注意的是,整个维不需要都是“动态”的;只有公式所在的层次需要是“动态”的。

维包含公式时,尽可能使用“多个”作为层次类型。在层代 2 中,仅将维中包含公式的层次设为“动态”;将剩余层次设为“存储”。

方案维就是一个很好的示例,其中可能包含“实际”、“预算”、“预测”和一些公式。通常,这些都是层代 2 成员。在这种情况下,将方案层次类型设为“多个”,将包含公式的层代 2 成员设为“动态”,将所有其他成员设为“存储”。

共享成员和层次类型

共享成员可以影响 ASO 数据库中有关层次类型的决策。尽管“存储”维不能具有共享成员,但“多个”维类型中的“存储”层次可以具有共享成员。

在“多个”维中设置层次类型时,尽可能多地将层次设为“存储”类型(在层代 2 设置)。

如果共享成员仅共享一次,并且是与 0 级成员共享,则可以存在于“多个”维中的“存储”层次中。但是,对于“存储”层次中的共享成员,可能存在以下限制,要求您将“多个”维中的层代 2 层次设为“动态”:

  • 为了确保不会重复计算值,“存储”层次不能包含同一个共享成员的多个副本。
  • “存储”层次不能同时包含同一成员的存储版本和共享版本。
  • 只有在“动态”层次成员为不包含公式的 0 级成员时,“存储”层次才能包含该“动态”层次成员的共享实例。也就是说,“存储”层次不能包含较高级别成员的共享成员或包含公式的成员。
  • 如果每个共享成员仅使用一次,并且是 0 级成员的共享实例,则可以存在于“多个”维中。

只有在无法将层次设为“存储”时,才能将共享成员层次(而不是维)设为“动态”。但是,在许多情况下,共享成员可以存在于所有层代 2 成员均设为“存储”的“多个”维中,例如,共享成员在所有共享层次中仅使用一次。