聚合存储大纲的 64 位维大小限制

每个维的 Essbase 聚合存储 (ASO) 多维数据集大纲不能超过 64 位。

维所需的位数是任何 0 级子项使用的最大位数,包括替代层次结构中的 0 级子项和关联的属性维。对于成员编号,属性维被视为其基本维的备用层次。

通常,用于确定维中任何成员所需的位数的公式可以表示为:

#_bits_member’s_parent + log(x)

其中 x 是父项的子项数量。

例如,如果成员的父代是成员 A(需要 5 位),而 A 具有 10 个子代,则每个子代所需的位数为:

5 +log(10) = 9 bits

维或层次的顶级成员通常使用 0 位。但是,当一个或多个顶级成员由仅标签成员组成时,仅标签成员不会收到成员编号(因为它们不被视为存储的成员)。因此,如果第一个非标签生成中存在 x 成员,则这些成员将使用日志 ( x ) 位。剩下的孩子都是正常编号的。

同样,如果维或层次是动态的,则仅存储或共享的 0 级成员接收成员编号。这些成员所需的位数是 log( x ),其中 x 是所存储或共享的 0 级别成员的数量(即不是公式成员的 0 级成员的数量)。

但是,如果任何替代层次已存储(非共享)0 级成员,则维中每个层次的每个成员(包括关联的属性维)都使用额外的日志 ( x ) 位,其中 x 是此基本维的层次和关联属性维的总数。

以下示例使用 ASOsamp.Basic 数据库中的“产品”维:


此图像显示“产品”维度,如图像后面的文本中所述。

“产品”维有两个层次结构:“所有商品”和“高端商品”,这是一个替代层次结构。高端商品有一个存储级别 0 的成员:存储成员。“产品”维没有任何关联的属性维。

所有商品和高端商品使用 log(2) = 1 位。

注意:

如果替代层次结构“高端商品”没有任何存储的 0 级成员,则每个层次结构的顶层成员(以及关联的属性维)将使用 0 位。

计算每个级别 0 子项所需的位数:

All Merchandise = 1 bit
   Personal Electronics, Home Entertainment, Other = 1 + log(3) = 3 bits
      Digital Cameras/Camcorders, Handhelds/PDAs, Portable Audio = 3 + log(3) = 5
         Children of Digital Cameras/Camcorders = 5 + log(3) = 7
         Children of Handhelds/PDAs = 5 + log(3) = 7
         Children of Portable Audio = 5 + log(2) = 6
      Televisions, Home Audio/Video = 3 + log(2) = 4
         Children of Televisions = 4 + log(5) = 7

         Children of Home Audio/Video = 4 + log(4) = 6
      Computers and Peripherals = 3 + log(1) = 3 **
      Systems, Displays, CD/DVD drives = 3 + log(3) = 5
         Children of Systems = 5 + log(2) = 6
   High End Merchandise = 1 bit
      Flat Panel, HDTV, Stored Member = 1 + log(3) = 3 bits

成员计算机和外设的位数 (3) 与其父其他位数相同。

“产品”维度中任何 0 级子代使用的最大位数为 7(数字摄像机和电视机的子代)。因此,产品使用 7 位,这小于 64 位的尺寸限制。

如果维大小超过 64 位:

  • 保存大纲时, Essbase 会生成以下错误:

    Hierarchy [DimensionName] is too complex. It exceeds the maximum member number width of 64 bits. See application log for details.
  • Essbase 将类似以下消息的消息记录在应用程序日志中:

    Member number for member [level0member] requires [65] bits to encode
    Member [level0member] contributes [5] bits to member number
    Member [level1parent] contributes [20] bits to member number
    Member [level2parent] contributes [20] bits to member number
    Member [level3parent] contributes [20] bits to member number

要修复错误,请使用以下建议之一:

  • 如果可能,请删除消息中引用的任何成员的某些同级。通过两个功率来减少兄弟姐妹的数量可以节省一个位。例如,假设 level0member 为成员编号贡献了 5 位,具有 18 个同级,包括其自身。将同级数减少到 16 个或更少可节省一个位,因为 log(16) = 4。同样,将兄弟姐妹数减少到 8 或更少会节省两个位。

  • 对消息中引用的成员的一些同级重新分类。例如,将 level0member 18 个兄弟姐妹的一半移动到没有那么多子女的另一父代。或者,创建一个新的父代作为 level1parent 的同级,并将 level1parent 的子代的一半移动到新成员下。这种方法节省了一点。

  • 结合一些中间层次。例如,将 level0member 及其所有兄弟姐妹移动为 level2parent 的子代,然后删除 level1parent。这种方法更涉及,但它可以节省许多比特。